一、处理机调度的基本概念
作业进入系统驻留在外存的后备队列上,再至调入内存运行完毕,可能要经历下述三级调度:
①高级调度
②中级调度
③低级调度
1、高级调度
1)又称作业调度或长程调度,接纳调度,主要在早期批处理阶段,处理在外存上的作业。
决定外存后备队列中的哪些作业调入内存;
为它们创建进程、分配必要的资源;
将新创建的进程排在就绪队列上,准备执行。
管理的方面比较多
2)作业调度决定的细节
在每次执行作业调度时,都须作出两个决定:
①接纳多少作业——取决于多道程序度。应根据系统的规模和运行速度等情况综合考虑。
②接纳哪些作业——取决于采用的调度算法。如先来先服务,短作业优先等。
2、低级调度
也称为进程调度、微观调度或短程调度,决定内存就绪队列中的哪个进程获得处理机,进行分配工作。是最基本的一种调度,在三种基本OS中都有。
3、中级调度
又称交换调度或中程调度
引入目的:提高内存利用率和系统吞吐量。根据条件将一些进程调出或再调入内存。
4、三级调度比较
二、 调度算法
1、 先来先服务调度算法FCFS
一种最简单的调度算法,按先后顺序进行调度。既可用于作业调度,也可用于进程调度。
按照作业提交,或进程变为就绪状态的先后次序分派CPU;
新作业只有当当前作业或进程执行完或阻塞才获得CPU运行
被唤醒的作业或进程不立即恢复执行,通常等到当前作业或进程出让CPU。 (所以,默认即是非抢占方式)
不利于短作业(进程)
时间分析举例:
2、短作业(进程)优先调度算法SJF/SPF
优点:
通过上表可见采用SJF/SPF算法,平均周转时间、平均带权周转时间都有明显改善。SJF/SPF调度算法能有效的降低作业的平均等待时间,提高系统吞吐量。
方式:分抢占和非抢占两种方式,上例为简单的非抢占式。
SPF(抢占)调度算法的时间分析举例:
①标明关键的时间点
②分析时实时画出就绪队列排队情况
SJF/SPF的不足:
①对短作业有利,但同时造成了对长作业的不利。
②由于作业(进程)的长短含主观因素,不一定能真正做到短作业优先。
③未考虑作业的紧迫程度,因而不能保证紧迫性作业(进程)的及时处理。
3、 高优先权优先调度算法HPF
照顾紧迫性作业,使其获得优先处理而引入调度算法。常用于批处理系统中的作业调度算法,以及多种操作系统中的进程调度算法
- 分两种方式:
非抢占式优先权算法
抢占式优先权算法 关键点:新作业产生时
2)优先权的类型
静态优先权:创建进程时确定,整个运行期间保持不变。一般利用某一范围的一个整数来表示,又称为优先数。
动态优先权:创建进程时赋予的优先权可随进程的推进或随其等待时间的增加而改变。
3)高响应比优先调度算法HRRN
①同时到达的作业优先权相同。
初始t=0,随着时间增长,如果等待时间 t 相同,执行时间愈短的优先权愈高,利于短作业。
对于长作业,作业的优先级可以随等待时间的增加而提高,当其等待时间足够长也可获得处理机。长作业有照顾。
②当执行时间相同的作业,优先权的高低决定于其等待时间的长短,也就是先来先服务。
例:
时刻1:B和A响应比都是1,B入就绪队列;
时刻2: A,C响应比都是1,而B已经等待过肯定比1大,则B运行,A、C都入就绪队列。
时刻3:D新来权为1,比较其他进程 A=6/5;B=9/8;C=5/4;转C运行。
时刻7:C运行完。 D=6/2;B=13/8;A=10/5;转D运行。
时刻9:D运行完。 B=15/8;A=12/5,转A运行。
4、基于时间片的轮转调度算法RR
1)时间片轮转算法
①将系统中所有的就绪进程按照FCFS原则,排成一个队列。
②每次调度时将CPU分派给队首进程,让其执行一个时间片。时间片的长度从几个ms到几百ms。
③在一个时间片结束时,发生时钟中断。
④调度程序据此暂停当前进程的执行,将其送到就绪队列的末尾,并通过上下文切换执行当前就绪的队首进程。
⑤进程阻塞情况发生时,未用完时间片也要出让CPU
6、多级反馈队列算法FB
1)设置多个就绪队列,各队列有不同的优先级,优先级从第一个队列依次降低。
2) 赋予各队列进程执行时间片大小不同, 优先权越高,时间片越短。
3)当一个新进程进入内存,引发的调度过程
①准备调度:先将它放入第一个队列的末尾,按FCFS原则排队等待调度。
②IF时间片内完成,便可准备撤离系统;
③IF时间片内未能完成,调度程序便将该进程转入第二队列的末尾等待再次被调度执行。
④当第一队列中的进程都执行完,系统再按FCFS原则调度第二队列。在第二队列的稍放长些的时间片内仍未完成,再依次将它放入第三队列。
⑤依次降到第n队列后,在第n队列中便采取按时间片轮转的方式运行。
4)FB算法(q=2i-1,抢占)第1队列q=1,第2队列q=2…
死锁以及死锁产生的条件
定义:
死锁(Deadlock):指多个进程在运行过程中,因争夺资源而造成的一种僵局。当进程处于这种状态时,若无外力作用,它们都将无法再向前推进。
产生死锁的原因可归结为如下两点:
竞争资源。系统中供多个进程共享的资源如打印机、公用队列等的数目不满足需要时,会引起资源竞争而产生死锁。
进程间推进顺序非法。进程在运行过程中,请求和释放资源的顺序不当,同样会导致死锁。
产生死锁的必要条件:
1.互斥条件:进程对所分配到的资源进行排他性使用
2.请求和保持条件:进程已经保持了至少一个资源,又提出新的资源请求,而新请求资源被其他进程占有只能造成自身进程阻塞,但对自己已获得的其他资源保持不放,必然影响其他进程。
3.不剥夺条件:进程已获得的资源未使用完之前不能被剥夺,只能在使用完时由自己释放。
4.环路等待条件
处理死锁的基本方法
1.事先预防:
预防死锁
设置限制条件,破坏四个必要条件的一个或几个,预防发生死锁。
较易实现。限制条件的严格也会导致系统资源利用率和系统吞吐量降低。
避免死锁
不须事先限制,破坏四个必要条件,而是在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免发生死锁。
这种事先加以较弱限制的方法,实现上有一定难度,但可获较高的资源利用率及系统吞吐量,目前在较完善的系统中,常用此方法来避免发生死锁。
2.事后处理
检测死锁。
允许系统运行过程中发生死锁,但通过系统检测机构可及时的检测出,能精确确定与死锁有关的进程和资源;然后采取适当的措施,从系统中将已发生的死锁清除掉。
解除死锁。
与死锁检测配套的一种措施。
常用的实施方法:撤销或挂起一些进程,以便回收一些资源并将他们分配给已阻塞进程,使之转为就绪以继续运行。
死锁的检测与解除措施,有可能使系统获得较好的资源利用率和吞吐量(死锁几率不一定很高),但在实现上难度也最大。