这是一个一般的操作系统理论问题,但由于我正在通过类 UNIX 系统学习操作系统理论,所以我想在这里问这个问题。
今天,在我的操作系统讲座之后,我向我们的讲师询问:“调度程序是一个线程,位于进程管理器进程内部。既然PM也是一个进程,当一个名为A的进程处于运行状态时,PM如何接管它的处理器呢?调度程序应该将处理器从进程中夺走并将其分配给另一个进程。但是,当进程管理器没有运行时,这应该如何发生呢?
他说:“进程管理器在CPU0中‘始终’处于运行状态”。我说:‘如果只有一个CPU一核,PM怎么会一直处于运行状态呢?’他说是的。
任何人都可以让我摆脱这种困境吗?
答案1
每当正在运行的线程进行系统调用,或者出现时钟中断,或者发生其他中断时,操作系统通常会从控制线程中“夺走处理器”。
也就是说,正在运行的线程通过read()
或write()
或gettimeofday()
系统调用来调用内核。系统调用处理程序不仅执行读取或写入等工作,还最终确定是否应该返回调用它的线程,或者是否应该运行其他内容。负责“弄清楚”的就是流程经理。
受 CPU 限制的程序(不进行读/写/打开/关闭系统调用)仍然会经常被定时器中断夺走 CPU。特殊时钟每秒中断 CPU 10 或 60 或 1000 次。中断处理程序除其他外,还决定在下一个时间片中将 CPU 分配给哪个线程。
其他中断也可能来自鼠标、键盘、网卡或磁盘驱动器。
你可以说“进程管理器”总是可运行的,因为中断处理程序和系统调用处理程序中的代码总是调用它。