处理机调度定义:
在多道程序环境下,动态的将处理机分配给处于就绪状态的一个进程使之执行.
对于大型系统运行时的性能,很大程度上取决于处理机调度性能的好坏.
处理机调度的层次:
- 高级调度:
又称为长程调度或作业调度,他的调度对象是外村上处于后备队列中的作业.高级调度主要用于多道批处理系统中,而在分时和实时系统中不设置高级调度. - 低级调度: 又称为短程调度或进程调度,其调度对象是进程.在多道批处理,分时和实时三种类型的OS中,都必须配置这级调度.
- 中级调度: 又称内存调度,引入它的主要目的是提高内存利用率和系统吞吐量,它将已具备运行条件且内存又稍有空闲时,把外存上的那些已经具备运行条件的就绪进程再重新调入内存,并将其挂在就绪队列上等待.
处理机调度算法的共同目标:
- 资源利用率
- 公平性
- 平衡性
- 策略强制执行
批处理系统的目标:
- 平均周转时间短
- 系统吞吐量高
- 处理机利用率高
分时系统的目标:
- 响应时间快
- 均衡性
实时系统的目标:
- 截止时间的保证
- 可预测性
作业与作业调度
作业(Job)定义:作业是一个比程序更宽泛的概念,它不仅包含了通常的数据和程序,还有一份作业说明书,系统根据该说明书来对程序的运行进行控制.
同进程一样,作业也有与之对应的控制块:JCB 作业控制块.它是作业在系统中存在的标志,保存了系统的作业进行管理和调度所需要的全部信息.
作业调度的主要任务:根据JCB的信息,检查系统中的资源能否满足作业需求,按照一定的调度算法(下面介绍),从外存的后备队列选取某些作业调入内存,并创建进程,分配资源,再将创建的进程排在就绪队列上等待调度.每次进行作业调度时,都需要做两个决定:接纳多少个作业,接纳哪些作业.
调度算法:
-
先来先服务(FCFS)调度算法:
它是最简单的调度算法,系统按照先来后到的顺序进行调度它是最简单的调度算法, 系统按照先来后到的顺序进行调度 -
短作业优先(SJF)调度算法:
它以作业的长短来计算优先级,作业越短,其优先级越高,作业的长短是由作业所要求的运行时间来衡量的.
该算法相较于FCFS有改进但还是有很大的缺陷:
必须预知作业的运行时间/对长作业非常不利/
人机无法实现交互/不能保证紧迫性作业及时处理. -
优先级(PSA)调度算法:
它以外部赋予作业相应的优先级,调度算法根据该优先级进行调度 -
高响应比优先(HRRN)调度算法:
它以一个响应比Rp为基准调度作业
Rp=(等待时间+要求服务时间)/要求服务时间=响应时间/要求服务时间
由上式可以看出:
①. 如果作业等待时间相同,那么要求的服务时间越短优先级越高,有利于短作业
②. 如果作业要求服务时间相同时,作业的优先级又取决于等待时间
进程调度
进程调度的任务: 保存处理机现场信息//按某种算法选取进程//把处理机分配给进程.
进程调度方式:
1. 非抢占式: 一旦把处理机分配给某进程,除非进程执行完毕,或者阻塞,否则不会因为其他任何原因去抢占当前正在运行进程的处理机.
2. 抢占方式: 这种调度方式允许调度程序根据某种规则,去暂停某个正在执行的进程,将已分配给某进程的处理机重新分配给另一进程.其"抢占"主要原则有三:
②. 短进程优先原则(新到的短进程抢占当前长进程)
③. 时间片原则(时间片用完便重新调度)
调度算法:
- 轮转调度(RR)算法: 将就绪进程排成一个队列,从队首开始分配时间片,用完但未执行完毕的移至队列尾等待下一次分配.在该算法中,当时间片未用完但进程执行完毕也会触发调度.
- 优先级调度算法: 按类型分为两种:抢占式和非抢占式优先级调度算法.这里的调度规则便是"程序优先级".
优先级的类型分为两种:
①.静态优先级:在创建进程时便决定了优先级,在运行期间不变.
②.动态优先级:在创建进程时先赋予一个优先级,随着进程的推进或等待时间的增加而改变,以获得更好的调度性能. - 多队列调度算法: 设置多个队列,每个队列采用一种调度算法(可以不同),固定某种类型的进程进入哪一个队列,以此获取更好的调度性能.
- 多级反馈队列(MFQ)调度算法:设置多个队列,均采用FCFS算法,按优先级由高到低排列,S1队列优先级最高,时间片每次分配最短,当S1队列作业在分配的时间片内未做完时,将其移至S2队列尾,只有S1队列空时才会调度S2队列.在S2队列仍未完成的作业继续下调至S3队列尾,以此类推.
实时调度
实现实时调度的基本条件:
①提供必要的信息:包括(就绪时间,开始截止时间,完成截止时间,处理时间,资源要求和优先级).
②.系统处理能力能够在规定时间内完成全部的任务
实时调度的算法依然分为:非抢占式和抢占式.
抢占式中增加了一种调度算法:立即抢占.
立即抢占:它要求操作系统快速响应外部中断,一旦出现外部中断,只要当前任务未处于临界区,则立即剥夺当前任务的执行,将处理机分配给请求中断的紧迫任务.
调度算法:
- 最早截止时间优先(EDF)算法:如字面意义,将任务按截止时间排序,截止时间越早,优先级就越高.
- 最低松弛度优先(LLF)算法:
松弛度:松弛度代表了该任务还可等待的最大时间,小于0时任务无法在截止时间前完成.
松弛度=截止完成时刻–当前时刻–还需执行时间
该算法根据任务的松弛程度,松弛程度越低,优先级就越高.
优先级倒置
何为优先级倒置?
即P2任务优先级低于P1任务却优先于P1执行的情况.
产生原因?
举例说明:有P1P2P3三个任务,优先级P1最高P3最低.当进入内存顺序为P3P2P1时,P3在调度之前申请了临界资源M,在P1开始执行之后想要申请M时便会被P3阻塞,此时低优先级的P2反而会比高优先级的P1先执行.
解决办法:
在动态优先级的基础上,当高优先级任务P1申请一个被低优先级任务P3占用的临界资源时,一方面阻塞P1,另一方面让P3继承P1的优先级,让P3继续执行直至P3退出临界区.