进程调度基础
进程调度负责根据调度算法选择一个进程分配给处理器,以及从处理器上移除一个进程。它是操作系统中多道程序设计的重要组成部分。
进程调度算法
进程调度算法用于处理为处理器选择进程或在进程之间分配资源。
一些进程调度算法如下所示:
- 先来先服务
此算法按照进程到达就绪队列的顺序处理进程。FCFS是最简单的调度算法。FCFS中没有抢占,因此不会发生饥饿现象。尽管如此,它的吞吐量仍然很低,因为大型进程可能会长时间占用CPU。
- 最短作业优先
此算法按照进程执行时间的顺序执行进程,即首先选择执行时间最短的进程。SJF支持抢占,因此可能导致某些进程饥饿。但是,在大多数情况下,它提供了最大的吞吐量。
- 固定优先级调度
此算法按照每个进程指定的优先级顺序执行进程。低优先级进程可能会被高优先级进程抢占,这可能导致某些进程饥饿。
- 轮循调度
此算法为每个进程提供固定的时间片,并在所有进程之间循环,直到它们的执行完成。由于每个进程都有机会执行,因此不会发生饥饿现象。如果时间片过长,则轮循算法的行为类似于FIFO,如果时间片过短,则其行为类似于SJF。
进程调度程序
进程调度涉及短期调度程序、中期调度程序和长期调度程序。这些程序的详细信息如下所示:
- 长期调度程序
长期调度程序执行长期调度。这涉及从辅助存储器中的存储池中选择进程,并将其加载到主存储器中的就绪队列中以供执行。
长期调度程序控制多道程序设计的程度。它必须选择I/O绑定和CPU绑定进程的谨慎组合,以产生最佳的系统吞吐量。如果它选择了太多CPU绑定进程,则I/O设备处于空闲状态;如果它选择了太多I/O绑定进程,则处理器将无事可做。
- 短期调度程序
短期调度程序执行短期调度。这涉及从就绪队列中选择一个进程,并将其安排执行。短期调度程序使用调度算法来决定接下来由哪个进程执行。
下图展示了使用长期和短期调度程序进行调度的过程:
- 中期调度程序
中期调度程序执行中期调度。这涉及将进程从主内存中交换出去。稍后可以从该进程停止执行的位置交换回该进程。
这也可以称为挂起和恢复进程,有助于降低多道程序设计的程度。交换也有助于改善内存中I/O绑定和CPU绑定进程的组合。
下图展示了中期调度的过程: