中断的上下文切换和任务调度的上下文切换
来源:互联网 发布:share.js用法 编辑:程序博客网 时间:2024/06/05 14:40
linux内核分析
中断是在同一个进程的上下文中(在中断函数中可能产生进程调度),而进程上下文切换时在两个进程之间进行切换。中断 用户态陷入内核态。进程调度是在内核态完成的。
中断的执行过程
1.内核把当前eip esp等压到内核堆栈里面去 然后把eip的内容放到中断函数开始处产生中断。例如: int指令会在堆栈(内核堆栈)上保存一些寄存器的值(用户态栈顶地址,当时的状态字,当时的eip的值)。然后把 cs:eip(中断服务程序入口) ss:esp(指向内核的堆栈)加载到cpu寄存器。
2.保护现场save all:进入中断的首要任务是保护现场 push es ds eax ebp edi esi edx ecx(因为已经切换为内核堆栈 所以信息保存在了内核堆栈)
中断服务(过程中可能执行进程调度)。如果发生了任务调度 (save all)这些信息会暂时保存在系统里面(内核堆栈) 切换回来之后再 restore all
3. 恢复现场restore all
进程调度的过程
进程调度是在内核态中完成
1 根据调度算法选出下一个进程 next= pick_next_task();
2 进程上下文切换
调用context_switch();
context_switch(rq,prev,next){
prepare_task_switch(rq,prev,next);
...
switch_to();////切换堆栈和寄存器的状态切换
sp(因为此时在中断内部(内核态) 所以sp内核堆栈的栈顶)
save flags push ebp 把当前的栈顶保存在 prev->thread.sp ,把next的栈顶加载到esp
接下来的操作就是在next进程的内核堆栈里面了。
save eip 恢复next进程的eip(对于新创建的进程是ret-from_fork)
}
阅读全文
0 0
- 中断的上下文切换和任务调度的上下文切换
- 说说中断上下文的切换
- uCOS中任务调度时的上下文切换
- uCOS中任务调度时的上下文切换
- 操作系统的“两把剑”:中断上下文切换和进程上下文切换
- 线程上下文切换和进程上下文切换的区别
- 线程上下文切换和进程上下文切换的区别
- 线程上下文切换和进程上下文切换的区别
- 线程上下文切换和进程上下文切换的区别
- 线程上下文切换和进程上下文切换的区别
- 任务调度与上下文切换时间测试
- 任务调度与上下文切换时间测试
- 进程的上下文切换
- 进程调度、上下文切换
- 进程切换(进程上下文和中断上下文)详解
- 在用户空间发生中断时,上下文切换的过程
- 在用户空间发生中断时,上下文切换的过程
- 在用户空间发生中断时,上下文切换的过程
- ssh vim中按了ctrl+s
- js数组内数字按大小排序实现函数
- hdu 5887 大01背包问题
- Android图片缓存策略
- IP问问:特殊类型IP地址介绍——VPN
- 中断的上下文切换和任务调度的上下文切换
- HDU
- tomcat启动timer定时器会执行两次问题解决方案
- HDU6165 FFF at Valentine(爆搜)
- HDU1702--ACboy needs your help again!(栈和队列)
- 大谈设计模式及单例模式代码
- IP问问:关于多区域IP地址定位在互联网在线广告投放领域中的应用分析
- 斗地主之初始评估与叫牌
- JS获取北京时间并制作时钟效果