Unix 进程调度程序本身是一个进程吗?

Ell*_*tus 7 process scheduling

Unix 进程调度程序本身是一个进程,还是像系统调用一样(在用户进程中运行内核代码并设置内核位)那样搭载在其他进程上?

Bru*_*ger 6

Unix 进程调度程序并没有真正“捎带”系统调用。执行调度程序几乎是任何系统调用的一部分。

一个read()系统调用或exit()系统调用绝对有可能导致调度执行。在read()磁盘访问的情况下,可能需要很长时间。除非您希望一切都非常慢,否则您需要运行调度程序以查看在第一个进程等待磁盘返回数据时应该运行哪个进程。Aread()可能发生在套接字上 - 数据从某个远程服务器返回所需的时间是不确定的。内核必须重新安排一些其他进程。在 的情况下,exit()进行系统调用的进程不想再存在,因此必须调度其他一些进程。对于 apause()或 an alarm(),进程希望在未来的某个时间执行。同样,调度程序必须选择另一个进程来运行。

我相信大多数(但不是全部)系统调用会导致 Unix/Linux/*BSD 调度程序执行。有时gettimeofday()不会导致调度程序运行 - Solaris 曾经以这种方式工作。但总的来说,您可以安全地将系统调用视为完成工作(通过 NIC 发送数据、设置磁盘读取或写入、执行进程退出工作、分叉等)、运行调度程序,然后执行任何操作接下来应该运行进程。有时这与进行系统调用的过程相同,但很多时候并非如此。