一、处理机调度的基本概念
作业进入系统驻留在外存的后备队列上,再至调入内存运行完毕,可能要经历下述三级调度:
①高级调度
②中级调度
③低级调度
1、高级调度
1)又称作业调度或长程调度,接纳调度,主要在早期批处理阶段,处理在外存上的作业。
决定外存后备队列中的哪些作业调入内存;
为它们创建进程、分配必要的资源;
将新创建的进程排在就绪队列上,准备执行。
管理的方面比较多
2)作业调度决定的细节
在每次执行作业调度时,都须作出两个决定:
①接纳多少作业——取决于多道程序度。应根据系统的规模和运行速度等情况综合考虑。
②接纳哪些作业——取决于采用的调度算法。如先来先服务,短作业优先等。
2、低级调度
也称为进程调度、微观调度或短程调度,决定内存就绪队列中的哪个进程获得处理机,进行分配工作。是最基本的一种调度,在三种基本OS中都有。
3、中级调度
又称交换调度或中程调度
引入目的:提高内存利用率和系统吞吐量。根据条件将一些进程调出或再调入内存。
4、三级调度比较
5、可引起进程调度的原因:
①进程运行结束
②进入阻塞状态
③时间片用完
④有更高优先级的进程进入就绪队列
二、 调度算法
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…
三、产生死锁的原因和必要条件
1、死锁:指多个进程在运行过程中,因争夺资源而造成的一种僵局。当进程处于这种状态时,若无外力作用,它们都将无法再向前推进。
2、产生死锁的原因可归结为如下两点:
①竞争资源:系统中供多个进程共享的资源如打印机、公用队列等的数目不满足需要时,会引起资源竞争而产生死锁。
②进程间推进顺序非法:进程在运行过程中,请求和释放资源的顺序不当,同样会导致死锁。
3、形成死锁的四个必要条件(四个条件都具备就会死锁,缺一就不会死锁)
①互斥条件:进程对所分配到的资源进行排他性使用
②请求和保持条件:进程已经保持了至少一个资源,又提出新的资源请求,而新请求资源被其他进程占有只能造成自身进程阻塞,但对自己已获得的其他资源保持不放,必然影响其他进程。
③不剥夺条件:进程已获得的资源未使用完之前不能被剥夺,只能在使用完时由自己释放。
④环路等待条件
破坏这4个条件即是处理死锁的方法
4、处理死锁的基本方法
事先预防:
①预防死锁
②避免死锁
事后处理:
③检测死锁
④解除死锁
四、预防死锁的方法
1、预防死锁
①摒弃“请求和保持”条件
②摒弃“不剥夺”条件
③摒弃“环路等待”条件
2、避免死锁
上述方法限制条件都太强;造成一定的应用不便。采用避免死锁的方法则是只施加较弱限制条件,从而获得令人满意的系统性能。
安全状态:系统能按某种进程顺序为每个进程分配所需资源,直至满足每个进程对资源的最大需求,并能顺利完成。
不安全状态:系统无法找到一种使多个进程能够顺利分配资源执行完的安全序列。
五、死锁的检测与解除
1、死锁的检测
检测时机:
①当进程等待时检测死锁
②定时检测
③系统资源利用率下降时检测死锁
2、死锁定理
利用资源分配图简化法来检测死锁。
简化方法如下:
①在资源分配图中找出一个既不阻塞又非独立的进程结点Pi,在顺利的情况下运行完毕,释放其占有的全部资源。
②由于释放了资源,这样能使其它被阻塞的进程获得资源继续运行。消去了Pi的边。
③经过一系列简化后,若能消去图中所有边,使结点都孤立,称该图是可完全简化的。
S状态为死锁状态的充分条件是当且仅当S状态的资源分配图是不可完全简化的。
3、死锁的解除
当发现进程死锁时,便应立即把它们从死锁状态中解脱出来。常采用的方法是:
①剥夺资源:从其他进程剥夺足够数量的资源给死锁进程以解除死锁状态。
②撤销进程:最简单的是让全部进程都死掉;温和一点的是按照某种顺序逐个撤销进程,直至有足够的资源可用,使死锁状态消除为止。