《Linux内核分析》第八周学习小结 进程的切换和系统的一般执行过程
进程的切换和系统的一般执行过程
一、进程调度的三个时机:
1.中断处理过程(包括时钟中断、I/O中断、系统调用和异常)中,直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule();
2.内核线程可以直接调用schedule()进行进程切换,也可以在中断处理过程中进行调度,也就是说内核线程作为一类的特殊的进程可以主动调度,也可以被动调度;
3.用户态进程无法实现主动调度,仅能通过陷入内核态后的某个时机点进行调度,即在中断处理过程中进行调度。
二、switch_to完成寄存器的切换
switch_to(prev,next,prev);

进程切换:为了控制进程的执行,内核必须有能力挂起正在CPU上运行的进程,并恢复以前挂起的某个进程的执行。这种行为被称为进程切换(process switch)、
任务切换(task switch)或上下文切换(context switch)。
schedule()函数选择一个新的进程来运行,调用switch_to来进行关键上下文切换。
switch_to完成寄存器的切换:先保存当前进程的寄存器,再进行堆栈切换,自此后所有的压栈都是在新进程的堆栈中了,再切换eip,这样当前进程
可以从新进程中恢复,还有其他必要的切换。
进程上下文包含了进程执行需要的所有信息,包括:
1、用户地址空间:包括程序代码,数据,用户堆栈等
2、控制信息:进程描述符,内核堆栈等
3、硬件上下文(与中断保存硬件上下文的方法不同)
三、Linux系统的一般执行过程(最一般的情况)
正在运行的用户态进程X切换到运行用户态进程Y的过程
正在运行的用户态进程X
发生中断——
save cs:eip/esp/eflags(current) to kernel stack;
then load cs:eip(系统调用的起点,entry of a specific ISR) and ss:esp(point to kernel stack)
进入内核代码,SAVE_ALL //保存现场
(这一步也可能不发生)中断处理过程中或中断返回前调用了schedule(),其中的switch_to做了关键的进程上下文切换
标号1之后开始运行上一步中选中的用户态进程Y(这里Y曾经通过以上步骤被切换出去过因此可以从标号1继续执行)
restore_all //恢复现场
iret - pop cs:eip/ss:esp/eflags from kernel stack
继续运行用户态进程Y
四、实验:
1.下载menu系统:

2.启动gdb进行调试:

3.在schedule处设置断点,点击c运行:

4.停在断点1:schedule

5.停在断点2:context_switch

6.按n单步执行:

五、总结:
Linux系统的一般执行过程:参见三。
《Linux内核分析》第八周学习小结 进程的切换和系统的一般执行过程的更多相关文章
- LINUX内核分析第八周学习总结——进程的切换和系统的一般执行过程
LINUX内核分析第八周学习总结——进程的切换和系统的一般执行过程 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/c ...
- LINUX内核分析第八周总结:进程的切换和系统的一般执行过程
一.进程调度与进程切换 1.不同的进程有不同的调度需求 第一种分类: I/O密集型(I/O-bound) 频繁的进行I/O 通常会花费很多时间等待I/O操作的完成 CPU密集型(CPU-bound) ...
- 20135337朱荟潼 Linux第八周学习总结——进程的切换和系统的一般执行过程
第八周 进程的切换和系统的一般执行过程 一.进程切换关键代码switch_to 1.不同类型进程有不同调度需求--两种分类 2.调度策略--规则 Linux中进程优先级是动态的,周期性调整. 3.时机 ...
- LINUX内核分析第八周学习总结
LINUX内核分析第八周学习总结 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.c ...
- Linux 内核分析第八周学习笔记
Linux 内核分析第八周学习笔记 zl + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-10 ...
- LINUX内核分析第六周学习总结——进程的描述与创建
LINUX内核分析第六周学习总结--进程的描述与创建 标签(空格分隔): 20135321余佳源 余佳源 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc ...
- LINUX内核分析第六周学习总结——进程的描述和进程的创建
LINUX内核分析第六周学习总结——进程的描述和进程的创建 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/cours ...
- Linux内核分析——第八周学习笔记20135308
第八周 进程的切换和系统的一般执行过程 一.进程切换的关键代码switch_to分析 1.进程调度与进程调度的时机分析 (1)进程分类 第一种分类 I/O-bound:等待I/O CPU-bound: ...
- LINUX内核分析第八周学习总结:进程的切换和系统的一般执行过程
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.进程切换的关 ...
随机推荐
- is_valid校验机制
先来归纳一下整个流程 (1)首先is_valid()起手,看seld.errors中是否值,只要有值就是flase(2)接着分析errors.里面判断_errors是都为空,如果为空返回self.fu ...
- 一道题引发的self和super
这个是那道题目,让写出输出的结果: 刚看到这一道题目的时候我的第一反应就是输出Son Father.但是输出的结果是Son Son. 下面是解析: 我首先建立了两个类,一个Fathe ...
- (15)Python时间
- C# Repeater、webdiyer:AspNetPager分页 AspNetPager分页样式
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/vaecnfeilong/article/details/32712611 AspNetPager分页 ...
- Spring Boot中Web应用的统一异常处理
我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况.Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用来 ...
- Qt 编程指南 8 显示静态小图片和动态大图片
显示控件概览 图片浏览示例 第一行是一个标签控件,objectName 为 labelShow,文本内容清空,因为是用来显示图片用的. 主界面第二行的控件是四个普通按钮 第一个按钮文本是 " ...
- 老男孩Python自动化运维视频
链接:https://pan.baidu.com/s/1VLXJ0RZr39kpSGthkLkgmA 密码私聊我
- gitlab--ci文件
1.when: manual 手动执行(加到哪个脚本中,哪个就会变成手动执行)
- springzuul本地路由和跨服务器路由问题
阿里云服务器在旧新服务迁移过程中,发现路由到认证中心找不到服务 解决办法: 在路由配置里面使用下面的配置 #zuul.routes.claimconf.path=/claimconf/**#zuul. ...
- iScroll.js插件使用方法
iScroll.js 用法参考 (share) 分享是传播.学习知识最好的方法 以下这篇文章是iScroll.js官网的中文翻译,尽管自己英文不好,但觉得原作者们翻译的这个资料还是可以的,基本用法介绍 ...