博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux 进程切换
阅读量:2344 次
发布时间:2019-05-10

本文共 1429 字,大约阅读时间需要 4 分钟。

内核栈组织形式

内核中栈的管理情况如上,stack->pt_regs指向保存的用户态栈信息(task_pt_regs获取)。thread保存的是内核栈的信息。
task_struct数据结构中的stack成员指向thread_union结构(Linux内核通过thread_union联合体来表示进程的内核栈)

union thread_union {
struct thread_info thread_info; unsigned long stack[THREAD_SIZE/sizeof(long)]; };

但其实thread_struct包含了两部分的栈信息,

struct thread_struct {
/* Cached TLS descriptors: */ struct desc_struct tls_array[GDT_ENTRY_TLS_ENTRIES]; unsigned long sp0; unsigned long sp;

sp0指向了用户态栈

sp指向内核态栈
#define task_pt_regs(tsk) ((struct pt_regs *)(tsk)->thread.sp0 - 1)

struct pt_regs {
unsigned long r15; unsigned long r14; unsigned long r13; unsigned long r12; unsigned long bp; unsigned long bx;/* arguments: non interrupts/non tracing syscalls only save up to here*/ unsigned long r11; unsigned long r10; unsigned long r9; unsigned long r8; unsigned long ax; unsigned long cx; unsigned long dx; unsigned long si; unsigned long di; unsigned long orig_ax;/* end of arguments *//* cpu exception frame or undefined */ unsigned long ip; unsigned long cs; unsigned long flags; unsigned long sp; unsigned long ss;/* top of stack page */};

硬件切换到软件切换

x86本身设计了自带的tss任务切换方式,管理特权进程的切换。但linux系统采用了新的软件机制。摒弃了大部分tss的用途,设计出了以cpu为基准的tss特权切换方式。每个cpu实现一个tss,当特权切换发生时,大部分寄存器采用软件实现的方式保存和调用。

硬件支持实现软件使用中断触发硬件行为, 但摒弃的tss机制只在cpu上使用了。进程权限切换使用软件实现,且只使用了esp0、io bitmap。

但是固定cpu不一定会永远持有 进程栈状态。所以他的tss状态esp0恢复的可能并不一定是当前进程的栈信息。原因在与多任务机制的存在,当任务切换发生的时候,进程状态会被暂停并保存。进而转到另外的任务,tss段将发生变化,所以当任务恢复的时候,tss必须恢复到当前任务的状态。

转载地址:http://jnjvb.baihongyu.com/

你可能感兴趣的文章
解决文件提示: /bin/ksh^M: bad interpreter: bad interpreter:No such file or directory
查看>>
ajaxanywhere jsp 使用
查看>>
jquery的使用
查看>>
如何静态化JSP页面
查看>>
XML 与 Java 技术: 用 Castor 进行数据绑定
查看>>
Python未知领域系列:(附Python学习教程+Python学习路线)Python高级教程之面向对象
查看>>
盘点Python 面向对象编程最容易被忽视的知识点
查看>>
Python:一个可以套路别人的python小程序
查看>>
用Python告诉你:这些年,我们点过的的那些外卖
查看>>
如何美观地打印Python对象?这个标准库可以简单实现
查看>>
写作路上的这些小成绩,铸就了一个不平庸的程序员
查看>>
程序员找工作的个人经验教训以及注意事项
查看>>
2019 编程语言排行榜:Java、Python 龙争虎斗!谁又屹立不倒
查看>>
拥有10年编程经验的你,为什么还一直停留在原地
查看>>
Flask vs Django,Python Web开发用哪个框架更好
查看>>
用Python制作动态二维码,一行代码就做到了
查看>>
Python说:常见的数据分析库有哪些
查看>>
Python教程:Python数据类型之字典
查看>>
Python基础教程:python的数据类型
查看>>
Python学习教程:另辟蹊径,appium抓取app应用数据了解一下
查看>>