ucos-2-进程切换过程
精选 转载 进行进程切换就是从正在运行的进程中收回处理器,然后再使待运行进程来占用处理器。
这里所说的从某个进程收回处理器,实质上就是把进程存放在处理器的寄存器中的中间数据找个地方存起来,从而把处理器的寄存器腾出来让其他进程使用。那么被中止运行进程的中问数据存在何处好呢?当然这个地方应该是进程的私有堆栈。
让进程来占用处理器,实质上是把某个进程存放在私有堆栈中寄存器的数据(前一次本进程被中止时的中间数据)再恢复到处理器的寄存器中去,并把待运行进程的断点送入处理器的程序指针PC,于是待运行进程就开始被处理器运行了,也就是这个进程已经占有处理器的使用权了。
这就像多个同学要分时使用同一张课桌一样9说是要收回正在使用课桌同学的课桌使用权,实质上就是让他把属于他的东西拿走;而赋予某个同学课桌使用权,只不过就是让他把他的东西放到课桌上罢了。
在切换时,一个进程存储在处理器各寄存器中的中间数据叫做进程的上下文,所以进程的 切换实质上就是被中止运行进程与待运行进程上下文的切换。在进程未占用处理器时,进程 的上下文是存储在进程的私有堆栈中的。
从上面的叙述可知,调度器进程切换的代码应有如下功能:
●保存处理器PC寄存器的值到被中止进程的私有堆栈;
●保存处理器PSW寄存器的值到被中止进程的私有堆栈;
●保存处理器SP寄存器的值到被中止进程的进程控制块;
●保存处理器其他寄存器的值到被中止进程的私有堆栈;
●自待运行进程的进程控制块取SP值并存入处理器的寄存器SP;
●自待运行进程的私有堆栈恢复处理器各寄存器的值;
●自待运行进程的私有堆栈中弹出PSW值并送入处理器的PSW;
●自待运行进程的私有堆栈中弹出PC值并送入处理器的PC。
显然,进程的切换可以用中断技术来实现,即当调度器获得了待运行进程的控制块之后,应立即用软中断指令来中止当前进程的运行,并保存当前进程的PC值和PSW值。其后,使 用压栈指令把处理器其他寄存器的值压入进程私有堆栈。接下来,就从待运行进程的进程控 制块中取出私有堆栈指针的值并存入处理器的寄存器SP,至此SP就指向了待运行进程的私 有堆栈,于是下面就自待运行进程的私有堆栈中弹出上下文进人处理器。最后,利用中断返回指令来实现自待运行进程的私有堆栈中弹出PSW值和自待运行进程的私有堆栈中弹出PC值的功能。
这是一个完整的软中断处理过程,只不过在保护现场和恢复现场工作中,保护的是被中止 运行进程的现场,恢复的是待运行进程的现场,这一切都依赖于堆栈指针的切换。
进程切换时,被中止进程保护断点和待运行进程保护断点的示意图如下:
上一篇:ucos-1-就绪表
下一篇:ucos-3-任务调度1
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
[linux内核] 7.进程切换过程总结
文章目录.
数据库 nosql linux 用户态 内核线程 -
MySQL MHA switchover在线切换过程
MySQL MHA switchover在线切换过程
MySQL MHA switchover 在线切换过程 -
redis master切换记录怎么查 redis故障切换过程
关注爱因诗贤 每天进步一点点 导读 前面介绍了 Redis 主从模型如何在不影响正常业务的情况下实现数据一致,若从库发生故障,客户端可以请求其他的从(或主)库读取数据,若主库发生故障,客户端就无法写入,而且还会影响从库的数据复制,这个时候就需要考虑主从切换,这篇文章就来学习下 Redis 哨兵机制和哨兵集群。1.笔记图2.Red
redis master切换记录怎么查 redis主从切换会堵塞进程吗 客户端 Redis 优先级