处理器调度的类型
处理器调度的目的是为了满足系统的目标,将进程分配到处理器上执行。
系统并发度:正等待处理器处理的进程个数。
长程调度程序决定哪个用户程序可以进入内存,因而它控制了系统并发度。
何时创建一个新进程由系统并发度相关管理程序决定。
允许哪个程序进入内存中基于先来先服务(FCFS)原则、优先级、计算密集型和 I/O 密集型等各种因素决定。
中程调度主要是进程在内存和外存之间的换入换出,与系统并发度有关。
短程调度程序也称分派器(dispatcher),用于决定将哪个进程交由处理器执行。调用短程调度程序的事件有:
- 时钟中断。
- I/O 中断。
- OS 调用。
- 信号。
调度算法
短程调度的主要目的是优化系统的某一方面行为而分配处理器时间。
调度规则根据两个维度可以分为面向用户和面向系统的。另一种分法是是否直接与性能相关。
面向用户
-性能相关
周转时间:一个进程从提交到完成之间的时间间隔。
响应时间:从提交一个请求到开始接收响应之间的时间间隔。
最后期限:当进程完成的截止期限可以被指定时,尽量最大化满足最后期限的进程所占百分比。
-其他
可预测性:进程的执行情况和预测的情况不能相差太大。
面向系统
-性能相关
吞吐量:单位时间内完成的进程数量最多。
处理器利用率:处理器处于忙状态的时间所占的百分比。
-其他
公平性:所有进程一般情况下应该被公平对待。
强制优先级:高优先级进程可以抢占低优先级。
平衡资源:尽可能地使计算机各种资源得到充分利用。
对于优先级的使用,可以将就绪态或者阻塞态(或者两种都使用)进程根据优先级划分成不同的等待队列,优先调用高优先级队列中的进程。
选择函数(selection function)决定选择哪个就绪进程下次执行。
决策模式(decision mode)分为非抢占式和抢占式两种。抢占式可避免单个进程长时间使用处理器。
服务时间:进程在处理器上执行完成需要的时间。
周转时间(turnaround time):进程从创建到执行完成花费的时间。
归一化周转时间(normalized turnaround time):周转时间和服务时间的比值,最小情况为1。
先来先服务(FCFS)策略:最简单,适用于长进程。缺点是不利于 I/O 密集型进程。
轮转策略:周期性产生时钟中断,中断时,当前运行的进程调入就绪队列,根据 FCFS 选择另一个就绪进程执行。也称时间片(slicing)技术。时间片最好稍微大于一次典型交互花费的时间。缺点是计算密集型进程使用了大部分时间片,I/O 密集型进程的性能降低。
虚拟轮转法(virtual round robin, VRR):当阻塞的 I/O 进程解除阻塞时,将其放入一个辅助队列中,进程置为就绪态。调度时,该辅助队列的优先级高于一般就绪队列。
最短进程优先(shortest process next, SPN):非抢占策略。原则是选择预计处理时间最短的进程交由处理器执行。难点在于需估计进程所需处理时间。缺点是经常出现短进程时,长进程会出现饥饿现象。
所需时间一般通过多次同一进程获取。
\(T_i\) 是进程的第 \(i\) 次运行花费的时间。\(S_i\) 为第 \(i\) 次进程运行花费时间的预测值。另一种计算方式为:
另一称为指数平均法(exponential averaging)的方式:
其中 \(0 \lt \alpha \lt 1\),用于确定距离现在较近或者较远的数据的相对权值。\(\alpha\) 越大,较近的数据的权重越大。
最短剩余时间(shortest remainning time, SRT):在 SPN 中增加了抢占机制。选择预估剩余时间最短的进程执行。性能优于 SPN。缺点是长进程可能饥饿。
最高响应比优先(HRRN):选择 \(R\) 值最大的就绪进程执行。\(w\) 为等待处理器时间,\(s\) 为预估的服务时间。
反馈法:根据优先级划分成不同的等待队列,进程刚进入内存时放入最高优先级队列中。运行中的进程被抢占或者中断时调入到比先前所在队列低一级别的队列中(如果在优先级最低队列中,则依然放入此队列中)。改进是随着队列优先级的降低,分配的时间片增加;进程随着等待时间的增加而提高其优先级。
参考
[1] William Stallings, 操作系统——精髓与设计原理(8th), 2017.