使用硬件计时器是实现进程调度的唯一方法吗?



我读到操作系统使用以下方法实现调度:

  • CPU 必须有一个硬件计时器,该计时器每 X 触发一次中断 毫秒。
  • 计时器中断触发后,计时器中断处理程序将执行 将使CPU开始执行另一个进程的指令 (或者我想我应该说的另一个线程)。

我的问题是:我刚才描述的方法是否是实现调度的唯一方法?

No.基本上,在操作系统中实现多线程有两种基本方法:

1) 先发制人的多任务处理

通过先发制人的多任务处理,您可以使用中断源来触发任务切换。大多数情况下,在计时器ISR(中断服务例程)内执行任务切换,以防执行长时间运行的任务并且没有发生其他硬件事件。如果发生了其他硬件事件,还可以执行任务切换到具有更高优先级的阻塞线程以允许处理硬件事件。

2) 协作式多任务处理

在协作式多任务处理中,每当执行系统调用时,操作系统都会切换线程。这可以是允许应用程序显式触发任务切换的特殊系统调用(如早期多任务系统(如 Windows 3.11、经典 Mac OS 等)中使用的 Yield)。还可以完全在用户模式下实现协作式多任务处理。

今天,大多数操作系统采用混合方法 - 它们对硬件事件做出反应(如果长时间运行的线程从未调用系统例程并且没有其他I/O发生,这将是计时器),但是每当应用程序执行系统调用或调用系统提供的库时,它们也可以以协作方式切换任务。

在具有相同优先级的线程或进程之间进行时间切片上下文切换时需要计时器中断。对于某些多线程抢占式嵌入式操作系统,另一种方法是使每个线程具有不同的优先级,从而消除了对时间切片或计时器中断的需求。 中断仍可用于触发上下文切换(除了使用系统调用向其他线程发出信号的线程之外),但不需要计时器中断。

最新更新