当前位置: 技术问答>linux和unix
一个关于操作系统的长久的困惑!
来源: 互联网 发布时间:2015-02-18
本文导语: 我对操作系统一直以来有一个困惑: 对于单任务的DOS,应用程序一旦运行,指令指针就指向了应用程序,直到 程序退出,ret,程序主动把指令指针交回到DOS。如果应用程序发生死锁, 则系统崩溃。这是毫无疑问的。 那...
我对操作系统一直以来有一个困惑:
对于单任务的DOS,应用程序一旦运行,指令指针就指向了应用程序,直到
程序退出,ret,程序主动把指令指针交回到DOS。如果应用程序发生死锁,
则系统崩溃。这是毫无疑问的。
那么在多任务操作系统的情况下,当一个进程运行完自己的时间片以后,系统
内核是如何使指令指针回到自己呢?
这个问题我和周围的很多人都探讨过,但没有人能拿出一个大家都能信服的说法,
有的说“多任务操作系统并没有象dos那样把cpu真正的交给应用程序,而是由内核读取
到应用程序的指令以后代替它执行同样的指令而已,就象一个虚拟机”
大家群起攻之:这样效率太低了吧?
还有人说“大概编译器在每个应用程序里面都插入了定期交回指针的系统调用吧”
这个说法更不能另人信服
最后有人说,把minix源代码拿来读懂就明白真相了,大家全部晕倒!
不知道这里的大虾们对这个问题有什么看法?
对于单任务的DOS,应用程序一旦运行,指令指针就指向了应用程序,直到
程序退出,ret,程序主动把指令指针交回到DOS。如果应用程序发生死锁,
则系统崩溃。这是毫无疑问的。
那么在多任务操作系统的情况下,当一个进程运行完自己的时间片以后,系统
内核是如何使指令指针回到自己呢?
这个问题我和周围的很多人都探讨过,但没有人能拿出一个大家都能信服的说法,
有的说“多任务操作系统并没有象dos那样把cpu真正的交给应用程序,而是由内核读取
到应用程序的指令以后代替它执行同样的指令而已,就象一个虚拟机”
大家群起攻之:这样效率太低了吧?
还有人说“大概编译器在每个应用程序里面都插入了定期交回指针的系统调用吧”
这个说法更不能另人信服
最后有人说,把minix源代码拿来读懂就明白真相了,大家全部晕倒!
不知道这里的大虾们对这个问题有什么看法?
|
操作系统运行在保护模式时,会设定一个任务切换的时间片, 每当时间片内的时间用完时, 硬件会产生一个中断, 转入操作系统核心代码. 此时操作系统可以调用调度程序决定下一步运行的程序. 注意: 时间片设定后, 中断是由硬件产生的.
|
很简单啊,系统运行在保护模式中,任何系统调用和外部中断都会使运行进入核心态。进程时间片只有核心态代码才能看到,如果发现时间片用完,核心代码调度其它进程即可。
|
up,高手过照!继续!!!!
|
gz