【发布时间】:2021-06-13 11:30:25
【问题描述】:
假设你有一个进程运行一些看起来像这样的代码
while (true) {
//do nothing
}
为什么这不会阻止操作系统?
我知道操作系统有一个进程调度器(例如 Linux 上的 CFS),但这实际上是如何工作的?
如果代码正在执行一个无限循环,进程调度器什么时候有时间执行自己的代码?
难道不需要外部运行来中断正在运行的代码以返回给操作系统吗?如果是这样,像 Linux 这样的操作系统是如何管理的?
CPU 是否具有管理此类用例的内置功能?
【问题讨论】:
-
来自外围设备(KB、鼠标、磁盘、NIC、USB 等)的硬件中断可能会导致执行切换到驱动程序,这可能会更改正在运行的线程集。来自另一个内核上运行的另一个线程的系统调用也是如此(内核间驱动程序可以中断“无限循环”)。
-
另外注意,如果就绪线程数不大于内核数,则不需要输入OS调度器代码。在中断/系统调用改变某些东西之前它什么都不做,所以它什么也不做。
标签: multithreading operating-system cpu