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

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

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

答案1

Unix 进程调度程序并不真正“搭载”系统调用。执行调度程序几乎是任何系统调用的一部分。

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

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

相关内容