当前位置: 技术问答>linux和unix
关于中断与进程的切换问题
来源: 互联网 发布时间:2017-05-29
本文导语: 本帖最后由 u011564456 于 2014-09-13 10:59:26 编辑 大家好,我最近在看《一个操作系统的实现》,看到第六章 “进程” 的时候,感觉有点吃力,有一个问题始终不理解,所以想大家请教,希望各路大神帮帮我!!!感激...
我的问题时,《一个操作系统的实现》这本书的进程的实现中,TestA()是这样的:
void TestA()
{
int i = 0;
while(1){
disp_str( "A" );
disp_str( "i++" );
delay(1);
}
我的问题就是,既然进程 TestA 是一个死循环,那么中断与进程是如何切换的?
|
楼主可以这样简单的形象化这个问题
cpu是一个运行程序的硬件, 当前在testa 中死循环, 时钟中断发生的时候cpu的运行被强行打断去运行一段特殊的代码,这个动作由硬件完成所以testa无法阻止,只能被打断
中断处理程序运行在更高权限上所以可以剥夺testa的运行权利,把另一个程序放到cpu上运行,完成程序切换
程序切换的本质就是程序运行环境的保存和恢复
这里的关键是硬件的支持,一个靠纯软件实现程序切换的系统不是没有(Cooperative multitasking), 但就需要每个程序配合,遇到testa这样的霸凌就没有办法了
cpu是一个运行程序的硬件, 当前在testa 中死循环, 时钟中断发生的时候cpu的运行被强行打断去运行一段特殊的代码,这个动作由硬件完成所以testa无法阻止,只能被打断
中断处理程序运行在更高权限上所以可以剥夺testa的运行权利,把另一个程序放到cpu上运行,完成程序切换
程序切换的本质就是程序运行环境的保存和恢复
这里的关键是硬件的支持,一个靠纯软件实现程序切换的系统不是没有(Cooperative multitasking), 但就需要每个程序配合,遇到testa这样的霸凌就没有办法了