调度器 (Scheduler) 和分派器 (Dispatcher) 的区别

2025年4月22日 | 阅读6分钟

调度器和分派器都与操作系统的进程调度有关。调度是操作系统决定哪个进程应该被分配CPU来执行多个进程的过程。

调度器和分派器的关键区别在于,调度器负责从多个进程中选择一个要执行的进程。而分派器则负责将CPU分配给由调度器选中的进程。

OS中的调度器 (Scheduler) 是什么

调度器是特殊的系统软件,以各种方式处理进程调度。它们的主要任务是选择要提交到系统中的作业,并决定要运行哪个进程。操作系统中有三种类型的调度器。

Scheduler vs Dispatcher
  1. 长期调度器 (Long Term Scheduler): 也称为作业调度器 (job scheduler)。长期调度器决定哪些程序被允许进入系统进行处理。它从作业队列中选择进程,并将它们加载到内存中执行。进程加载到内存中以便进行CPU调度。
    作业调度器的主要目标是提供均衡的作业组合,例如 I/O 密集型作业和 CPU 密集型作业。它还控制多道程序设计的程度。如果多道程序设计的程度保持稳定,那么进程创建的平均速率必须等于进程离开系统的平均速率。
    在某些系统中,长期调度器可能不可用或仅起很小的作用,而分时操作系统则没有长期调度器。当进程从新状态 (new) 变为就绪状态 (ready) 时,存在一个长期调度器。
  2. 短期调度器 (Short Term Scheduler): 也称为CPU调度器 (CPU scheduler)。其主要目标是在选定的标准下提高系统性能。它负责将进程从就绪状态 (ready) 变为运行状态 (running)。CPU调度器在就绪的进程中选择一个进程,并将其分配给CPU。
    短期调度器,也称为分派器,负责决定下一个要执行的进程。短期调度器比长期调度器快。
  3. 中期调度器 (Medium Term Scheduler): 中期调度是交换 (swapping) 的一部分。它将进程从内存中移除,从而降低了多道程序设计的程度。中期调度器负责处理被交换出去的进程。
    一个正在运行的进程在发出 I/O 请求时可能会被挂起,而一个被挂起的进程无法取得任何进展。在这种情况下,被挂起的进程会被移到辅助存储器,以从内存中移除进程并为其他进程腾出空间。这个过程称为交换 (swapping),该进程被称为被交换出去 (swapped out) 或卷出 (rolled out)。为了改善作业混合,可能需要进行交换。

OS 中的分派器 (Dispatcher) 是什么

分派器是一个特殊的程序,在调度器之后发挥作用。当短期调度器从就绪队列中选择进程后,分派器负责将选定的进程分配给 CPU。一个正在运行的进程会因 I/O 操作等原因进入等待状态,此时 CPU 会被分配给另一个进程。这种 CPU 从一个进程切换到另一个进程的过程称为上下文切换 (context switching)

Scheduler vs Dispatcher

分派器执行各种任务,包括上下文切换、设置用户寄存器和内存映射。这些是进程执行和将 CPU 控制权转移给该进程所必需的。在分派时,进程从就绪状态变为运行状态。

分派器需要尽快运行,因为它在每次上下文切换时都会被调用。分派器所消耗的时间称为分派延迟 (dispatch latency)

有时,分派器被认为是短期调度器的一部分,因此整个单元称为短期调度器 (short-term scheduler)。在这种情况下,短期调度器的任务是从就绪队列中选择一个进程,并为该进程分配 CPU。在操作系统中,分派器具有以下职责:

  • 切换到用户模式 (Switching to user mode): 所有低级操作系统进程都在内核级别的安全访问权限下运行,但所有应用程序代码和用户发起的进程都在应用程序空间或用户权限模式下运行。分派器将进程切换到用户模式。
  • 地址解析 (Addressing): 程序计数器 (PC) 寄存器指向下一个要执行的进程。分派器负责处理该地址。
  • 启动上下文切换 (Initiation of context switch): 上下文切换是指当前运行的进程被暂停,其所有数据和进程控制块 (PCB) 都存储在主内存中,然后另一个进程被加载到其位置执行。
  • 管理分派延迟 (Managing dispatch latency): 分派延迟计算为停止一个进程并启动另一个进程所需的时间。分派延迟越低,在相同的硬件配置下软件效率越高。

注意:分派器不是一个线程。分派器在每个核心上运行,运行一个线程一段时间,保存其状态,加载另一个线程的状态并运行它。

调度器和分派器的示例

假设四个进程 P1、P2、P3 和 P4 都在就绪队列中。它们的到达时间分别为 T1、T2、T3 和 T4。整个过程或任务使用的是先进先出 (FIFO) 调度算法。

Scheduler vs Dispatcher

进程 P1 最先到达,因此调度器将决定它将是第一个被执行的进程,分派器将 P1 从就绪队列中移除并将其分配给 CPU。

然后调度器将确定进程 P2 是下一个应该执行的进程,因此当分派器返回队列以获取新进程时,它将获取进程 P2 并将其分配给 CPU。对于进程 P3 和 P4,这个过程会以相同的方式继续。

操作系统中调度器和分派器的区别

CPU 无法同时执行就绪队列中所有等待执行的进程。因此,操作系统必须根据调度算法选择一个特定进程,调度器负责执行从众多进程中选择一个进程的这一过程。

一旦调度器从队列中选出了一个进程,分派器就会将其从就绪队列中取出并移到运行状态。因此,调度器向分派器提供一个进程的有序列表,分派器会随着时间的推移将这些进程移到 CPU 上。

调度器和分派器都在操作系统的进程调度中使用,它们都完成相同的过程或任务。然而,调度器和分派器之间的区别在于,调度器负责从多个进程中选择一个要执行的进程。而分派器负责将 CPU 分配给由调度器选中的进程。调度器和分派器在操作系统中还有其他一些区别,例如:

性质调度器调度器
定义调度器是特殊的系统软件,通过选择要执行的进程来处理进程调度。分派器是一个模块,它将 CPU 控制权交给由短期调度器选定的进程。
算法调度器根据各种算法工作,例如 FCFS、SJF、RR 等。分派器没有特定的实现算法。
类型调度器有三种类型,如长期调度器、短期调度器、中期调度器。分派器没有不同的类型,它只是一个代码段。
依赖性调度器独立工作,并在需要时立即工作。分派器的工作依赖于调度器,这意味着分派器必须等待调度器选择进程。
耗时调度器耗时通常可以忽略不计。分派器耗时称为分派延迟。
函数调度器的唯一工作是选择进程。分派器还负责上下文切换、切换到用户模式以及进程重新启动时跳转到正确的位置。
任务调度器分三个阶段执行任务:
  • 长期调度器从作业队列中选择进程并将其放入就绪队列。
  • 短期调度器从就绪队列中选择一个进程。
  • 中期调度器执行进程的交换进、交换出。
分派器将 CPU 分配给由短期调度器选定的进程。

下一个主题操作系统-nyc