调度的层次
进程在处理中断的过程中; 需要完全屏蔽中断的原子操作的过程中不能进行进程的调度与切换。
高级调度(作业调度)
高级调度是宏观调度。其功能是按一定的调度算法把外存上处于后备作业队列中的作业调入内存,为它们分配所需的资源并创建进程,然后将新创建的进程插入到系统的进程就绪队列中。每个作业只调入一次、调出一次。
功能 :
- 选择作业
- 分配资源
- 创建进程
- 作业控制
- 回收资源
中级调度(内存调度)
又称交换调度。功能是在内存使用紧张的情况下,将内存中暂时无法运行的进程挂起,即由内存调至外存 (换出),使外存上具备运行条件的就绪进程能够及时进入内存运行。中级调度次数略多。
低级调度(进程调度)
又称进程调度或微观调度。其主要功能使按照一定的调度算法将CPU分派给进程就绪队列中的某个进程,将其状态改为运行态。低级调度频率最高。
调度性能指标
- 系统吞吐量:单位时间内 CPU 完成作业的数量
- 等待时间:进程处于等待 CPU 的时间之和
- 响应时间:从用户提交请求到系统首次产生响应所用的时间
典型的调度算法
(非抢占式)先来先服务(FCFS)算法
特点
- 算法简单,但效率低
- 对长作业有利,对短作业不利
- 有利于 CPU 繁忙型作业,不利于 I/O 繁忙型作业
(非抢占式)短作业优先(SJF)算法
短作业优先调度算法的平均等待时间、平均周转时间是最优的。
SJF 算法也可以是抢占式的,抢占式 SJF 调度算法也称最短剩余时间优先调度算法
特点
- 对长作业不利,会产生“饥饿”现象
- 完全未考虑作业的紧迫程度
- 作业预计运行时间是用户提供的,用户可能会欺骗
(非抢占式)高响应比优先调度算法
(非抢占式+抢占式)优先级调度算法
静态优先级
优先级在创建进程时决定,且保持不变。
动态优先级
创建进程时先赋予一个初始优先级,但是可以动态改变。
进程优先级设置
- 系统进程>用户进程
- 交互性进程>非交互性进程
- I/O 型进程>计算型进程
(抢占式)时间片轮转调度算法 RR
系统每隔一定时间便产生一次时钟中断,激活调度程序进行调度,调度就绪队列队首的进程使用 CPU,而被剥夺的进程回到就绪队列队尾,重新排队。
Tip
RR 调度算法使得每个进程在执行过程中都像是独占了 CPU,从而实现了对 CPU 资源的虚拟化。
多级队列调度算法
多级队列调度算法由于设置多个就绪队列,因此对每个就绪队列就可以实施不同的调度算法,因此,系统针对不同用户进程的需求,很容易提供多种调度策略。
(抢占式)多级反馈队列调度算法
实现思想
- 设置多个就绪队列
- 每个队列的进程运行时间片大小各不相同,优先级越高,时间片越小
- 每个队列都采用 FCFS 算法,在最后一级队列使用 RR 算法
- 按照队列优先级调度,只有当高优先级的队列空时,才会调度优先级更低的队列
优点
- 终端型作业用户:短作业优先
- 短批处理作业用户:周转时间较短
- 长批处理作业用户:不会产生“饥饿”