操作系统 - 进程调度
定义
进程调度是进程管理器的活动,它处理从 CPU 中移除正在运行的进程并根据特定策略选择另一个进程。
进程调度是多道程序操作系统的重要组成部分。 此类操作系统允许一次将多个进程加载到可执行内存中,并且加载的进程使用时分复用共享 CPU。
调度类别
调度分为两类:
- 非抢占式: 在进程完成执行之前,不能从进程中获取资源。 当正在运行的进程终止并进入等待状态时,就会发生资源切换。
- 抢占式: 这里操作系统将资源分配给进程一段固定的时间。 在资源分配过程中,进程从运行状态切换到就绪状态或从等待状态切换到就绪状态。 发生这种切换是因为 CPU 可能会优先考虑其他进程,并将优先级较高的进程替换为正在运行的进程。
进程调度队列
操作系统在进程调度队列中维护所有进程控制块 (PCB)。 操作系统为每个进程状态维护一个单独的队列,并且处于相同执行状态的所有进程的PCB被放置在同一个队列中。 当一个进程的状态发生变化时,它的 PCB 会从它当前的队列中取消链接并移动到它的新状态队列中。
操作系统维护以下重要的进程调度队列 −
作业队列 − 这个队列保存了系统中的所有进程。
就绪队列 − 该队列保留了一组驻留在主内存中的所有进程,准备好并等待执行。 一个新进程总是放在这个队列中。
设备队列 − 由于 I/O 设备不可用而阻塞的进程构成此队列。
操作系统可以使用不同的策略来管理每个队列(FIFO、循环、优先级等)。 操作系统调度程序确定如何在就绪队列和运行队列之间移动进程,系统上每个处理器核心只能有一个条目; 在上图中,它已与 CPU 合并。
两态过程模型
两态进程模型是指运行和非运行状态,如下所述 −
S.N. | 状态 & 描述 |
---|---|
1 | Running 当一个新的进程被创建时,它进入系统,就像处于运行状态。 |
2 | Not Running 未运行的进程保留在队列中,等待轮到它们执行。 队列中的每个条目都是指向特定进程的指针。 队列是使用链表实现的。 调度程序的使用如下。 当一个进程被中断时,该进程被转移到等待队列中。 如果该过程已完成或中止,则该过程被丢弃。 无论哪种情况,调度程序都会从队列中选择一个进程来执行。 |
调度器
调度程序是一种特殊的系统软件,它以各种方式处理进程调度。 他们的主要任务是选择要提交到系统中的作业并决定运行哪个进程。 调度器分为三种类型 −
- 长期调度程序
- 短期调度程序
- 中期调度程序
长期调度程序
它也被称为作业调度器。 长期调度程序确定哪些程序被允许进入系统进行处理。 它从队列中选择进程并将它们加载到内存中执行。 进程加载到内存中进行 CPU 调度。
作业调度程序的主要目标是提供平衡的作业组合,例如 I/O 限制和处理器限制。 它还控制多道程序的程度。 如果多道程序的程度是稳定的,那么进程的平均创建率必须等于进程离开系统的平均离开率。
在某些系统上,长期调度程序可能不可用或很少。 分时操作系统没有长期调度程序。 当一个进程从新状态变为就绪状态时,就需要使用长期调度器。
短期调度程序
也称为CPU调度器。 其主要目标是根据所选标准提高系统性能。 它是进程的就绪状态到运行状态的变化。 CPU 调度程序在准备好执行的进程中选择一个进程,并将 CPU 分配给其中一个。
短期调度程序,也称为调度程序,决定接下来执行哪个进程。 短期调度程序比长期调度程序更快。
中期调度程序
中期调度是交换的一部分。 它从内存中删除进程。 它降低了多道程序的程度。 中期调度器负责处理换出的进程。
如果一个正在运行的进程发出 I/O 请求,它可能会被挂起。 暂停的进程无法在完成方面取得任何进展。 在这种情况下,为了从内存中删除进程并为其他进程腾出空间,挂起的进程被移动到辅助存储。 这个过程被称为swapping,这个过程被称为被换出或转出。 可能需要交换以改进流程组合。
调度器之间的比较
S.N. | 长期调度器 | 短期调度器 | 中期调度器 |
---|---|---|---|
1 | 这是一个作业调度器 | 它是一个 CPU 调度器 | 是一个进程交换调度器。 |
2 | 速度小于短期调度器 | 速度是其他两个中最快的 | 速度介于短期和长期调度之间。 |
3 | 控制多道程序的程度 | 它提供了对多道程序程度的较少控制 | 它降低了多道程序的程度。 |
4 | 分时系统中几乎不存在或极少 | 在分时系统中也是最小的 | 它是分时系统的一部分。 |
5 | 它从池中选择进程并将它们加载到内存中执行 | 它选择那些准备好执行的进程 | 可以将进程重新引入内存,继续执行。 |
上下文切换
上下文切换是在进程控制块中存储和恢复 CPU 的状态或上下文的机制,以便稍后可以从同一点恢复进程执行。 使用这种技术,上下文切换器使多个进程能够共享一个 CPU。 上下文切换是多任务操作系统功能的重要组成部分。
当调度程序将 CPU 从执行一个进程切换到执行另一个时,当前运行进程的状态被存储到进程控制块中。 之后,从自己的PCB中加载下一个要运行的进程的状态,用于设置PC、寄存器等。此时,第二个进程就可以开始执行了。
上下文切换是计算密集型的,因为必须保存和恢复寄存器和内存状态。 为了避免上下文切换时间量,一些硬件系统采用两组或更多组处理器寄存器。 当进程切换时,会保存以下信息以备后用。
- 程序计数器
- 计划信息
- 基础和限制寄存器值
- 当前使用的寄存器
- 改变状态
- I/O 状态信息
- 监听信息