为什么无限循环不锁定 OS?

Why doesn't an infite loop lock an OS?

假设你有一个过程运行一些代码看起来像这样

while (true) {
  //do nothing
}

为什么这不阻止 OS?

我知道操作系统有一个进程调度程序(例如 Linux 上的 CFS),但这实际上是如何工作的?

如果代码正在执行无限循环,进程调度器什么时候有时间执行自己的代码?

是否需要外部 运行 中断 运行 代码以返回到 OS?如果是这样,像 Linux 这样的 OS 如何管理它?

CPU 是否具有管理此类用例的内置功能?

根据一些研究,计算机似乎有一个称为可编程间隔定时器 (PIT) 的硬件定时器,OS 可以使用它来设置未来的时间,从而在某些系统中引起“中断”未来的毫秒或纳秒。

在循环的每次迭代中,程序通常会产生其 CPU 时间,以便内核可能有很好的机会为其他进程安排一些时间来执行。然而,这并不是绝对必要的,因为 CPU 完全有能力暂停一个程序——即使是在无限循环的中间——基于接收到任何硬件中断

这里首先要了解的是,操作系统始终处于控制之中,它完全有能力随时中断任何进程。 CPU 也提供硬件支持来实现这一点。

大多数当代操作系统(包括Linux)调度程序都可以中断正在执行的进程。它通常通过使用定时器中断来完成。它本质上是一个可编程时钟,您可以在其中定义每个时钟滴答发生的情况。

在Linux中,可以通过以下步骤定义调度程序的进程抢占

  1. CPU本地定时器中断被调用,中断处理程序开始执行
  2. 现在中断处理程序由 CPU 控制(因此您的无限循环代码处于暂停状态
  3. 中断处理程序检查当前进程是否应该继续执行(检查优先级、时间份额等)
  4. 如果不允许该进程执行,则它会被抢占并分配一个新进程 CPU

正如您所见,任何进程都不会获得 100% 的系统控制权,操作系统总是有办法停止或终止它。