-
长程调度:
又称作业调度、高级调度;
是“新建”状态转换到“就绪”状态;
由调度程序选择;
控制多道程序的“道/度” -
短程调度:
又称CPU调度、低级调度;
调度程序选择下一个执行进程; -
比较: (短程/长程)
切换频率:高,低;
切换开销:小,大;
操作系统中应用:必需 ,可选 -
中程调度:
又称:交换;
将进程在内存和外存间换进换出;
目的:节省内存空间; -
进程调度队列:
就绪队列:在主内存中处于就绪状态并等待执行的所有进程集合;
设备队列:等待某一I/O设备的进程队列;
进程的执行过程实际上就是进程在各种队列之间的迁移; -
CPU调度过程:
调度程序:根据某种策略选择一个就绪进程;一个CPU同时只能运行一个进程;
分派程序:负责把CPU的控制权转交给CPU调度程序;切换上下文;切换到用户态;跳转到用户程序的适当位置并重新运行之;
分配延迟:分派程序终止一个进程的运行并启动另一个进程运行所花的时间; -
调度方式:
非抢占调度:
一旦把CPU分配给进程后,系统不可以抢占已分配的CPU并分配给其他进程;
只有进程自愿释放CPU,才可以把CPU分配给其他进程;
优点:易实现,调度开销小,适合批处理系统;
缺点:响应时间长,不适合交互式系统;
抢占式调度:
调度程序可根据某种原则暂停某个正在执行的进程,将已分配给它的cpu重新分配给另一进程;
可防止但一进程长时间独占CPU;
系统开销大; -
抢占式与非抢占式的区分:
运行进程是否是自愿放弃CPU; -
CPU调度可能发生在当一个进程:
从运行转到等待(非抢占式)
从运行转到就绪(抢占式)
从等待转到就绪(抢占式)
终止运行(非抢占式) -
调度准则-基本指标:
CPU利用率:固定时间内CPU运行时间的比例;
吞吐量:单位时间内运行完的进程数;
周转时间:进程从提交到结束的全部时间;
等待时间:进程等待调度(不运行)的时间片总和;
响应时间:从进程提交到首次运行(而不是输出结果)的时间段,也就是第一段的等待时间
周转时间=等待时间+运行时间;
响应时间<=等待时间;
-
调度准则-优化方法:
最大的CPU利用率;
最大的吞吐量;
最短的周转时间;
最短的等待时间;
最短的响应时间;
解决方法:调度算法:就绪队列中哪个进程被选中运行 -
先来先服务算法(FCFS):
按进程请求CPU的先后顺序使用CPU;
算法特点:
实现简单,可使用FIFO队列实现;
非抢占;
公平;
当一个长进程后面的多个短进程,让长进程先执行,会让后面的短进程等待较长时间,从而导致CPU和设备利用率降低 -
短作业优先(SJF)调度算法:
关联到每个进程下次运行的CPU区间长度,调度最短的进程;
两种模式:
非抢占式调度:一旦进程拥有CPU,它的使用权限只能在该CPU区间结束后让出;
抢占式调度:发生在有比当前进程剩余时间片更短的进程到达时,也称为最短剩余时间优先调度;
SJF最优:对一组指定的进程而言,它给出了最短的平均等待时间; -
SJF算法的难点:如何知道下一个CPU区间的长度;
-
指数估算法:通过先前的CPU区间长度及其指数平均进行预测;
-
SJF通常用于长程调度;
-
优先级调度(PR):
基于进程的紧迫程度,由外部赋予每个进程相应的优先级,CPU分配给最高优先级的进程;
每个进程都有一个优先数,优先数为整数;
默认:小优先数具有高优先级;
目前主流的操作系统调度算法;
调度模式:抢占式和非抢占式; -
优先级可静态不变,也可动态调整;
-
优先级类型:
静态优先级:
进程创建时确定,在运行期间不变;
简单易行,系统开销小;
不够精确,可能会出现饥饿问题;
动态优先级:
进程创建时的优先级随进程推进或等待时间增加而改变;
如高响应比优先调度算法
-
优先级调度算法的优缺点:
优点:实现简单,考虑了进程的紧迫程度;灵活,可模拟其他算法;
存在问题:饥饿-低优先级的进程可能永远得不到运行;
解决方法:老化-视进程等待时间的延长提高其优先数; -
时间片轮转(RR):
专为分时系统设计,类似于FCFS,但增加了抢占;
时间片:小单位的CPU时间,通常为10-100毫秒;
为每个进程分配不超过一个时间片的CPU,时间片用完后,该进程将被抢占并插入就绪队列末尾,循环执行;
假定就绪队列中有n个进程、时间片为q,则任何一个进程的等待时间不会超过(n-1)*q; -
通常,RR的平均周转时间比SJF长,但响应时间要短;
-
时间片大小:
q大———FCFS
q小———增加上下文切换时间;
一般准则:时间片/10>进程上下文切换时间 -
以上算法存在局限性,如:
SJF有利短进程而不利长进程;
RR系统开销大;
所有进程采用同一策略,不合理 -
不同类型的进程需要不同策略:
交互进程需要短的响应时间;批处理进程需要短的等待时间; -
多级队列调度(MLQ):
系统中存在多个就绪队列,每个队列有自己的调度算法;
要素:
队列数;
每一队列的调度算法;
决定新进程将进入哪个队列的方法 -
多级反馈队列调度(MLFQ):
多级队列的延伸;
不同:多级队列:进程不能在不同队列间移动;多级反馈队列:进程能在不同队列间移动;
多级反馈队列调度需要考虑以下问题:
队列数;
每一队列的调度算法;
决定进程升级(低级队列到高级队列)的方法;
决定进程降级(高级队列到低级队列)的方法;
决定新进程将进入哪个队列的方法; -
多处理器调度:
适用于多核处理器的CPU调度;
多个CPU可用时,CPU调度将更为复杂;
对称多处理器(SMP)- 每个处理器决定自己的调度方案,主流方案;
非对称多处理器(ASM)- 仅一个处理器能处理系统数据结构,减轻对数据的共享需求;
调度算法:和单处理器相似;
负载平衡:将任务平均分配给多个处理器;
亲和性:进程在某个给定的CPU上尽量长时间地运行而不被迁移到其他处理器的倾向性;
软亲和性:进程通常不会在处理器之间频繁迁移;
硬亲和性:进程不会在处理器之间迁移; -
单队列调度方法(SQMP):
单队列多核调度方法:
系统有一个就绪队列;
当任意一个CPU空闲时,就从就绪队列中选择一个进程到该CPU上运行;
优点:
容易从单核调度算法推广到多核/多处理器;
实现简单,负载均衡;
缺点:
不具有亲和性;
加锁问题; -
多队列调度方法(MQMP):
系统有多个就绪队列,每个CPU一个;
每个就绪队列有自己的调度算法,并且调度相互独立;
优点:
亲和性好;
不需要加锁;
缺点:
负载不均衡;
策略:
“偷”进程