进程切换
2015-07-01 17:08
274 查看
进程切换
我们通常所说的从某个进程收回处理器,实质上是吧进程存放在处理器的寄存器中的数据找个地方存起来,从而把处理器的寄存器腾出来让其他进程使用。一般被中止运行的进程的中间数据存放在进程的私有堆栈和PCB中。
同理,让进程占用处理器,实质上是把某个进程放在私有堆栈中的寄存器的数据(前一次本进程被中止时的中间数据)再恢复到处理器的寄存器中去,并把待运行进程的断点送入处理器的程序指针PC。于是待运行进程就开始被处理器运行了,也就是这个进程已经占用处理器的使用权了。
切换时,一个进程存储在处理器各寄存器中的中间数据叫做进程上下文。所以进程的切换实际上是被中止运行的进程与待运行的进程上下文的切换。
其过程的基本思想是:
当进程A要切换出去时,先把EIP和其他寄存器的内容保存到自己的堆栈中,而这个被保存的EIP实际指向了用来恢复其他寄存器的指令的起始地址。接着将ESP的内容保存到对应的thread_struct结构体中(Linux中用于实现PCB的结构是task_struct,thread_struct是task_struct的一个成员)以备切换回来时使用。在ESP中装入进程B的ESP内容,其他需要切换回来的状态分量都可以通过ESP切换回来,注意按照保存的顺序切换回来。
进程切换和线程切换
联系:它们的本质都是程序上下文的切换
区别:进程的切换还伴随着进程空间的切换
我们通常所说的从某个进程收回处理器,实质上是吧进程存放在处理器的寄存器中的数据找个地方存起来,从而把处理器的寄存器腾出来让其他进程使用。一般被中止运行的进程的中间数据存放在进程的私有堆栈和PCB中。
同理,让进程占用处理器,实质上是把某个进程放在私有堆栈中的寄存器的数据(前一次本进程被中止时的中间数据)再恢复到处理器的寄存器中去,并把待运行进程的断点送入处理器的程序指针PC。于是待运行进程就开始被处理器运行了,也就是这个进程已经占用处理器的使用权了。
切换时,一个进程存储在处理器各寄存器中的中间数据叫做进程上下文。所以进程的切换实际上是被中止运行的进程与待运行的进程上下文的切换。
其过程的基本思想是:
当进程A要切换出去时,先把EIP和其他寄存器的内容保存到自己的堆栈中,而这个被保存的EIP实际指向了用来恢复其他寄存器的指令的起始地址。接着将ESP的内容保存到对应的thread_struct结构体中(Linux中用于实现PCB的结构是task_struct,thread_struct是task_struct的一个成员)以备切换回来时使用。在ESP中装入进程B的ESP内容,其他需要切换回来的状态分量都可以通过ESP切换回来,注意按照保存的顺序切换回来。
进程切换和线程切换
联系:它们的本质都是程序上下文的切换
区别:进程的切换还伴随着进程空间的切换
相关文章推荐
- Android编译相关
- Python中使用PhantomJS抓取Javascript网页数据
- [Objective-C] 为什么Objective-C不支持类的私有方法
- oracle 监控执行的sql语句
- js的封装库css
- MQTT的学习研究(八)基于HTTP DELETE MQTT 订阅消息服务端使用
- Java新技术---线程学习之Callable与Future的应用
- Ubuntu常用的APT命令参数(针对apt-get update和upgrade)
- matlab 中的 S-Function的用法(C语言)
- redis学习小结
- 进程间通信第一课--管道
- MQTT的学习研究(七)基于HTTP POST MQTT 发布消息服务端使用
- input()和raw_input()区别
- 适配较好的写法
- 题目1008:最短路径问题
- iOS开发之iOS程序偏好设置(Settings Bundle)的使用
- BaiduMap---百度地图官方Demo之基本地图功能(创建一张百度地图并管理地图的生命周期)
- 操作远程计算机文件
- iOS开发笔记24--第三方库JSONModel的使用
- XGBoost:参数解释