【问题标题】:Is using a hardware timer the only way to implement process scheduling?使用硬件定时器是实现进程调度的唯一方法吗?
【发布时间】:2017-10-13 05:42:47
【问题描述】:

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

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

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

【问题讨论】:

    标签: linux windows macos operating-system scheduling


    【解决方案1】:

    没有。基本上有两种在操作系统中实现多线程的基本方法:

    1) 抢先式多任务处理

    通过抢占式多任务,您可以使用中断源来触发您的任务切换。大多数情况下,如果执行了长时间运行的任务并且没有发生其他硬件事件,则会在定时器 ISR(中断服务程序)内进行任务切换。万一发生了其他硬件事件,也可以将任务切换到具有更高优先级的阻塞线程以允许处理硬件事件。

    2) 协作式多任务处理

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

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

    【讨论】:

    • 这意味着在常见的实现中,您通常会切换堆栈、页表等(取决于您如何管理线程和进程 - 在 x86 上,您可能只需要交换 CR3 和堆栈指针即可切换定时器中断服务例程 (ISR) 内的线程和进程。如果在两者之间发生任何其他硬件事件,您也可以在其 ISR 内部或在其间发生的任何系统调用期间切换。
    • “也可以将任务切换到更高优先级的阻塞线程”我不明白这部分,你的意思是切换到阻塞的线程吗?
    • @ptr_user7813604:硬件事件可以使正在等待的线程可运行。如果现在可运行的线程比当前运行的线程具有更高的优先级,则需要进行上下文切换。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2017-07-22
      • 1970-01-01
      相关资源
      最近更新 更多