操作系统中的进程队列

2025年5月2日 | 阅读 4 分钟

引言

进程调度器是操作系统中控制进程执行方式的重要组成部分。它使用进程控制块 (PCB) 存储每个进程的详细信息,例如其状态、程序计数器和 CPU 寄存器。进程调度的重要组成部分是使用进程队列。排队机制用于控制进程在等待、运行和就绪等各种状态之间的移动。本文将详细介绍各种调度队列及其属性。

调度队列的类型

操作系统为每个进程状态管理各种类型的队列。与进程相关的 PCB 也存储在相同状态的队列中。如果进程从一个状态移动到另一个状态,则其 PCB 也从相应的队列中取消链接并添加到发生转换的另一个状态队列中。我们将在接下来的子主题中研究计算机系统中使用的各种调度队列。

1. 作业队列(在磁盘中)

开始时,所有进程都存储在作业队列中。它存储在辅助内存中。长期调度程序(作业调度程序)选择一些作业并将它们放入主内存中。列表中所有等待处理的作业或进程都包含在此队列中,该队列称为作业队列。

  • 作业:创建后,作业进入作业队列并等待处理。
  • 包括所有已提交的作业。
  • 在它们准备进入执行阶段之前,进程会在此处保持等待状态。
  • 当新作业添加到调度系统时,它们最初存储在此状态,这是最简单和最基本的。
  • 长期调度程序从作业队列中选择一个进程并将其添加到就绪队列中。

2. 就绪队列(在主内存中)

就绪队列维护在主内存中。短期调度程序从就绪队列中选择作业并分派到 CPU 执行。所有准备好从内存中检索并执行的进程都列在备用队列中。当进程启动时,它通过加入就绪队列等待 CPU 变得可用。根据其使用的调度算法,操作系统从该队列中选择一个进程分配给正在运行的处理器。

  • 由主要等待 CPU 执行不同任务的进程(主要是它们的 PCB)组成。
  • 使用 FCFS、SJF 或优先级调度等调度算法进行管理。
  • 短期调度程序从就绪队列中选择一个进程,然后将其推进到运行状态。

3. 等待队列

由于资源分配或外部事件而无法当前进行推进的进程的 PCB 保存在等待队列中,也称为阻塞队列。这可能包括等待来自另一个进程的用户输入信号或 I/O 完成,例如从磁盘读取。当资源或事件可用时,它从等待队列移动到就绪队列。

  • 目标:存储在重新启动之前等待事件或资源的进程。
  • 状态:在所需的资源或事件可用之前,等待队列中的进程处于阻塞状态,无法继续。
  • 示例:一个进程在继续之前等待用户输入,例如表单提交或网络响应。

它们根据它们处于等待队列的原因连接到多个队列。例如,请求特定文件位置的 PCB 位于与等待输入的 PCB 不同的队列中。某些策略规定了等待队列的管理顺序。

设备或阻塞队列(在主内存中)

此队列现在包含因 I/O 设备不可用而导致的阻塞进程。每个设备都有自己的阻塞队列。

上述队列中的移动

下图描绘了进程在各个队列中的流动。

Process Queues in Operating Systems
  • 所有进程都从作业队列开始。
  • 调度程序首先将新进程添加到就绪队列。在它被选择执行(或调度)之前,它一直停留在就绪队列中。在进程被分配给 CPU 并正在运行后,可能会发生几种情况。
    1. 进程在添加到设备队列之前可能会提交 I/O 请求。
    2. 进程可能会等待其终止,然后才生成新的子进程。
    3. 发生中断时,进程可能会被强制从 CPU 中移除并返回到就绪队列。