第三章 处理机调度与死锁.docx
《第三章 处理机调度与死锁.docx》由会员分享,可在线阅读,更多相关《第三章 处理机调度与死锁.docx(34页珍藏版)》请在冰豆网上搜索。
第三章处理机调度与死锁
第三章处理机调度与死锁
3.1处理机调度的基本概念
在多道程序系统中,一个作业被提交后,必须经过处理机调度后,方能因获得处理机而执行。
对于批量型作业而言,通常需要经历作业调度(高级调度)和进程调度(低级调度)两个调度过程后,方能获得处理机;
对于终端型作业,则通常只须经过进程调度。
在较完善的操作系统中,往往还设置了中级调度(交换调度)。
对于上述的每一级调度,又都可采用不同的调度方式和调度算法。
3.1.1分级调度
一个作业,从进入系统并驻留在外存的后备队列上开始,直至作业运行完毕,可能要经历高级调度(HighScheduling)、中级调度(Intermediate-LevelScheduling)和低级调度(LowLevelScheduling)。
1.高级调度
高级调度又称为作业调度或长程调度(Long-TermScheduling),用于决定把外存上处于后备队列中的那些作业调入内存,并为它们创建进程、分配必要的资源,然后,再将新创建的进程排在就绪队列上,准备执行。
因此,有时也把作业调度称为接纳调度(Admissionscheduling)。
在每次执行作业调度时,都须做出以下两个决定:
1)接纳多少个作业(取决于多道程序度)?
2)接纳哪些作业(根据不同的算法来确定)?
在分时与实时系统中无作业的概念
在批处理系统中,作业进入系统后,是先驻留在外存上的,因此需要有作业调度的过程,以便将它们分批地装入内存。
然而在分时系统中,为了做到及时响应,用户通过键盘输入的命令或数据等,都是被直接送入内存的,因而无须再配置作业调度机制。
类似地,在实时系统中,通常也不需要作业调度。
2.低级调度
通常也把低级调度称为进程调度或短程调度(Short-TermScheduling),用来决定就绪队列中的哪个进程应获得处理机,然后再由分派程序(Dispatcher)执行把处理机分配给该进程的具体操作。
进程调度是最基本的一种调度,在三种类型的OS中,都必须配置这级调度。
进程调度可采用下述两种调度方式:
非抢占方式(Non-preemptiveMode);抢占方式(preemptiveMode)
1)非抢占方式
采用这种调度方式时,一旦某个进程得到处理后,便让它一直执行,直到进程完成或发生某个事件被阻塞,才允许把处理机分配给其它进程,决不允许某进程抢占已经分配出去的处理机。
在采用非抢占调度方式时,可能引起进程调度的因素可归结为这样几个:
①执行;②执行中的进程因提出I/O请求而暂停执行;③在进程通信或同步过程中执行了某种原语操作,如P操作(wait操作)、block原语、wakeup原语等。
这种调度方式的优点是实现简单、系统开销小,适用于大多数的批处理系统环境。
但它难以满足紧急任务的要求,因而可能造成难以预料的后果。
在要求比较严格的实时系统中,不宜采用这种调度方式。
2)抢占方式
这种调度方式,允许调度程序根据某种原则,去暂停某个正在执行的进程,将已分配给该进程的处理机重新分配给另一进程。
抢占的原则有:
(1)优先权原则。
通常是对一些重要的和紧急的作业,赋予较高的优先权。
并允许优先权高的新到进程抢占当前进程的处理机。
(2)短作业(进程)优先原则。
短作业(进程)可以抢占当前较长作业(进程)的处理机。
(3)时间片原则。
各进程按时间片运行,当一个时间片用完后,便停止该进程的执行而重新进行调度。
3.中级调度
中级调度又称中程调度(Medium-TermScheduling)。
引入主要目的是为了提高内存利用率和系统吞吐量。
为此,应使那些暂时不能运行的进程不再占用宝贵的内存资源,而将它们调至外存上去等待,把此时的进程状态称为就绪驻外存状态或挂起状态。
当这些进程重又具备运行条件、且内存又稍有空闲时,由中级调度来决定把外存上的哪些又具备运行条件的就绪进程专重新调入内存,并修改其状态为就绪状态,挂在就绪队列上等待进程调度。
中级调度实际上就是存储器管理中的对换功能,因此中级调度又被称为交换(Swap)调度。
3.1.2调度队列模型
当OS对作业和进程调度时,都必须按一定的规则将作业或进程排列,形成队列。
用于调度的队列模型有:
仅有进程调度的队列模型;具有高级和低级调度的队列模型;同时具有三级调度的队列模型
1.仅有进程调度的队列模型
分时系统中,进程执行时,可能出现以下三种情况:
①任务在给定的时间片内已经完成,该进程便在释放处理机后进入完成状态;
②任务在本次分得的时间片内未完成,OS便将该任务再放入就绪队列的末尾;
③进程因为某事件而被阻塞后,被OS放入阻塞队列。
2.具有高级和低级调度的队列模型
在批处理系统中,不仅需要进程调度,而且还需有作业调度。
它与上一模型的主要区别在于如下两个方面:
(1)就绪队列的形式。
(2)设置多个阻塞队列。
3.同时具有三级调度的调度队列模型
3.1.3选择调度方式和算法的若干准则
在一个OS的设计中,应如何选择调度方式和算法,在很大程度上取决于OS的种类和目标。
调度方式和算法的选择准则,有面向用户的,有面向系统的。
调度方式和算法的选择将直接影响系统的性能。
1.面向用户的准则
(1)周转时间短
周转时间:
是指从作业被提交给系统开始,到作业完成为止的这段时间间隔。
由四部分时间组成:
作业在外存后备队列上等待(作业)调度的时间,进程在就绪队列上等待进程调度的时间,进程在CPU上执行的时间,以及进程等待I/O操作完成的时间。
每个用户都希望自己的作业周转时间最短。
平均周转时间、平均带权周转时间
设系统中每个作业的周转时间为Ti,系统提供服务时间为Ts,则:
平均周转时间为:
带权周转时间为:
W=T/Ts
平均带权周转时间为:
(2)响应时间快
响应时间:
是从用户通过键盘提交一个请求开始,直至系统首次产生响应为止的时间,或者说,直到屏幕上显示出结果为止的一段时间间隔。
包括三部分时间:
从键盘输入的请求信息传送到处理机的时间,处理机对请求信息进行处理的时间,以及将所形成的响应信息回送到终端显示器的时间。
常把响应时间的长短用来评价分时系统的性能。
(3)截止时间的保证
截止时间:
是指某任务必须开始执行的最迟时间,或必须完成的最迟时间。
对于严格的实时系统,其调度方式和调度算法必须能保证这一点,否则将可能造成难以预料的后果。
所以这是评价实时系统性能的重要指标,更是选择实时调度算法的重要准则。
(4)优先权准则
在批处理、分时和实时系统中选择调度算法时,都可遵循优先权准则,以便让某些紧急的作业能得到及时处理。
在要求较严格的场合,往往还须选择抢占式调度方式,才能保证紧急作业得到及时处理。
2.面向系统的准则
(1)系统吞吐量高。
(2)处理机利用率好。
(3)各类资源的平衡利用。
(1)系统吞吐量高
系统吞吐量:
是在给定时间段内系统完成作业的数量。
或在单位时间内系统所完成的作业数。
这是用于评价批处理系统性能的另一个重要指标,是选择批处理作业调度的重要准则。
(2)处理机利用率好
大、中型多用户系统,由于CPU价格十分昂贵,致使处理机的利用率成为衡量系统性能的十分重要的指标。
调度方式和算法对处理机的利用率,起着十分重要的作用。
在调度时应使处理机尽量的忙,充分利用CPU资源。
(3)各类资源的平衡利用
在大、中型系统中,不仅要使处理机的利用率高,而且还应能有效地利用其它各类资源,如内存、外存和I/O设备等。
选择适当的调度方式和算法,能够保持系统中各类资源都处于忙碌状态。
但对于微型机和某些实时系统,该准则并不重要。
3.2调度算法
在OS中调度的实质是一种资源分配。
调度算法是指:
根据系统的资源分配策略所规定的资源分配算法。
对于不同的系统和系统目标,通常采用不同的调度算法。
目前存在的多种调度算法中,有的适用于作业调度,有的适用于进程调度,但也有些既可用于作业调度,也可用于进程调度。
先来先服务短作业(进程)优先调度算法类
高优先权优先调度算法类
基于时间片的轮转调度算法类
3.2.1先来先服务和短作业(进程)优先调度算法
先来先服务(FCFS:
FirstComeFirstServe)
短作业(进程)优先(ShortestJob/ProcessFirst)
1.先来先服务调度算法
FCFS调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。
当在作业调度中采用FCFS算法时,每次调度都是从后备作业队列中,选择一个或多个最先进入该队列的作业,并执行之。
在进程调度中采用FCFS算法时,则每次调度是从就绪队列中,选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。
该算法比较有利于长作业(进程),而不利于短作业(进程)。
FCFS调度算法调度示例
下表列出了A、B、C、D四个作业分别到达系统的时间、要求服务的时间,请计算开始执行的时间及各自的完成时间,并计算出各自的周转时间和带权周转时间。
从上例可以看出,短作业C的带权周转时间竟高达100,这是不能容忍的;而长作业D的带权周转时间仅为1.99。
据此可知,FCFS调度算法有利于CPU繁忙型的作业,而不利于I/O繁忙型的作业(进程)。
CPU繁忙型作业,是指该类作业需要大量的CPU时间进行计算,而很少请求I/O。
通常的科学计算便属于CPU繁忙型作业。
I/O繁忙型作业,是指CPU进行处理时,需频繁地请求I/O。
目前的大多数事务处理都属于I/O繁忙型作业。
2.短作业(进程)优先调度算法
短作业(进程)优先调度算法SJF/SPF,是指对短作业或短进程优先调度的算法。
它们可以分别用于作业调度和进程调度。
短作业优先的调度算法,是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。
而短进程优先调度算法,则是从就绪队列中选出一估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时,再重新调度。
FCFS和SJ(P)F的比较示例
如图所示,有五个进程A、B、C、D、E,它们到达的时间分别是0、1、2、3和4。
要求分别按FCFS和SJF算法,计算表中要求的值,并对FCFS和SJF进行比较。
由比较可以看出:
采用SJF算法后,不论是平均周转时间还是平均带权周转时间,都有较明显的改善,尤其是对短作业D,其周转时间由原来的11降为3;而平均带权周转时间是从5.5降到1.5。
这说明SJF调度算法能有效地降低作业的平均等待时间,提高系统吞吐量。
SJ(P)F调度算法存在的缺点
(1)该算法对长作业不利。
更严重的是,如果有一长作业(进程)进入系统的后备队列(就绪队列),由于调度程序总是优先调度那些(即使是后进来的)短作业(进程),将导致长作业(进程)长期不被调度。
(2)该算法完全未考虑作业的紧迫程度,因而不能保证紧迫性作业(进程)会被及时处理。
(3)由于作业(进程)的长短只是根据用户所提供的估计执行时间而定的,而用户又可能会有意或无意地缩短其作业的估计运行时间,致使该算法不一定能真正做到短作业优先。
3.2.2高优先权优先调度算法
1.优先权调度算法的类型
1)非抢占式优先权算法
系统一旦把处理机分配给就绪队列中优先权最高的进程后,该进程便一直执行下去,直至完成;或因发生某事件使该进程放弃处理机时,系统方可再将处理机重新分配给另一优先权最高的进程。
此算法主要用于批处理系统中;也可用于某些对实时性要求不严的实时系统中。
2)抢占式优先权调度算法
系统同样是把处理机分配给优先权最高的进程,使之执行。
但在其执行期间,只要又出现了另一个其优先权更高的进程,进程调度程序就立即停止当前进程的执行,重新将处理机分配给新到的优先权最高的进程。
此算法,能更好地满足紧迫作业的要求,故而常用于要求比较严格的实时系统中,以及对性能要求较高的批处理和分时系统中。
2.优先权的类型
1)静态优先权:
静态优先权是在创建进程时确定的,且在进程的整个运行期间保持不变。
确定进程优先权的依据有三:
(1)进程类型。
(2)进程对资源的需求。
(3)用户要求。
2)动态优先权:
是指在创建进程时所赋予的优先权,是可以随进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能。
采用动态优先权可防止长作业长期地垄断处理机。
3.最高响应比优先调度算法
FCFS方式只考虑每个作业的等待时间而未考虑执行时间的长短,而SJF方式只考虑执行时间而未考虑等待时间的长短。
因此,这两种调度算法在某些极端情况下会带来某些不便。
最高响应比优先调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行,它是对FCFS方式和SJF方式的一种综合平衡。
响应比的定义
优先权(响应比)可描述为:
又可表示为:
最高响应比优先性能分析
(1)如果作业的等待时间相同,则要求服务的时间愈短,其优先权愈高,因而该算法有利于短作业。
(2)当要求服务的时间相同时,作业的优先权决定于其等待时间,等待时间愈长,其优先权愈高,因而它实现的是先来先服务。
(3)对于长作业,作业的优先级可以随等待时间的增加而提高,当其等待时间足够长时,其优先级便可升到很高,从而也可获得处理机。
该算法既照顾了短作业,又考虑了作业到达的先后次序,不会使长作业长期得不到服务。
该算法实现了一种较好的折衷。
在进行调度之前,须先做响应比的计算,会增加系统开销。
3.2.3基于时间片的轮转调度算法
1.时间片轮转法
在时间片轮转法中,系统将所有的就绪进程按先来先服务的原则,排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。
时间片的大小从几ms到几百ms。
当执行的时间片用完时,调度程序停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。
2.多级反馈队列轮转调度算法
多级反馈队列轮转调度算法根据不同情况,设置不同的就绪队列。
当一个进程在执行完它的时间片之后,或从睡眠中被唤醒以及被创建之后,将进入不同的就绪队列。
每个队列按FCFS原则排列,各队列之间的进程享有不同的优先级,但同一队列内优先级相同。
多级反馈队列调度算法的实施过程
(1)应设置多个就绪队列,并为各个队列赋予不同的优先级。
(2)当一个新进程进入内存后,首先将它放入第一队列的末尾,按FCFS原则排队等待调度。
(3)当前一队列空闲时,则调度下一队队列中的进程运行;如果处理机正在第i队列中为某进程服务时,又有新进程进入优先权较高的队列(第1~(i-1)中的任何一个队列),则此时新进程将抢占正在运行进程的处理机,即由调度程序把正在运行的进程放回到第i队列的末尾,把处理机分配给新到的高优先权进程。
3.多级反馈队列调度算法的性能
多级反馈队列调度算法具有较好的性能,能较好地满足各种类型用户的需要。
(1)终端型作业用户。
(2)短批处理作业用户。
(3)长批处理作业用户。
3.3实时调度
由于在实时系统中都存在着若干个实时进程或任务,它们用来反应或控制某个(些)外部事件,往往带有某种程度的紧迫性,因而对实时系统中的调度提出了某些特殊要求。
前面所介绍的多种调度算法,并不能很好地满足实时系统对调度的要求,为此,需要引入一种新的调度,即实时调度。
3.3.1实现实时调度的基本条件
1.必要的控制信息
(1)就绪时间。
(2)开始截止时间和完成截止时间。
(3)处理时间。
(4)资源要求。
(5)优先级。
2.系统处理能力强
在实时系统中,通常都有着多个实时任务。
若处理机的处理能力不够强,则有可能因处理机忙不过来而使某些实时任务不能得到及时处理,从而导致发生难以预料的后果。
设系统中有m个周期性的硬实时任务,它们的处理时间为Ci,周期时间为Pi,则在单CPU下,必须满足下面的限制条件:
在多CPU系统中(若处理机个数为N),限制条件为:
3.采用抢占式调度机制
当一个优先权更高的任务到达时,允许将当前任务暂时挂起,而令高优先权任务立即投入运行,这样便可满足该硬实时任务对截止时间的要求。
对于一些小的实时系统,如果能预知任务的开始截止时间,则对实时任务的调度可采用非抢占调度机制,以简化调度程序和对任务调度时所花费的系统开销。
4.具有快速切换机制
(1)对外部中断的快速响应能力。
为使在紧迫的外部事件请求中断时系统能及时响应,要求系统具有快速硬件中断机构,还应使禁止中断的时间间隔尽量短,以免耽误时机(其它紧迫任务)。
(2)快速的任务分派能力。
在完成任务调度后,便应进行任务切换。
3.3.2实时调度算法的分类
1.非抢占式调度算法
(1)非抢占式轮转调度算法。
该算法常用于工业生产的群控系统中,由一台计算机控制若干个相同的(或类似的)对象,为每一个被控对象建立一个实时任务,并将它们排成一个轮转队列。
这种调度算法可用于要求不太严格的实时控制系统中。
(2)非抢占式优先调度算法。
如果在实时系统中存在着要求较为严格(响应时间为数百毫秒)的任务,则可采用非抢占式优先调度算法,为这些任务赋予较高的优先级。
当这些实时任务到达时,把它们安排在就绪队列的队首,等待当前任务自我终止或运行完成后,才能被调度执行。
这种调度算法可用于有一定要求的实时控制系统中。
2.抢占式调度算法
(1)基于时钟中断的抢占式优先权调度算法。
(2)立即抢占(ImmediatePreemption)的优先权调度算法。
实时调度
3.3.3常用的几种实时调度算法
目前已有许多用于实时系统的调度算法,其中有的算法仅适用于抢占式或非抢占式调度,而有的算法则既适用于非抢占式,也适用于抢占式调度方式。
在常用的几种算法中,它们都是基于任务的优先权,并根据确定优先级方法的不同而又形成不同的实时调度算法。
1.最早截止时间优先算法
该算法是根据任务的截止时间来确定任务的优先级。
截止时间愈早,其优先级愈高。
该算法要求在系统中保持一个实时任务就绪队列,该队列按各任务截止时间的早晚排序。
调度程序在选择任务时,总是选择就绪队列中的第一个任务。
最早截止时间优先算法,既可用于抢占式调度,也可用于非抢占式调度方式中。
最早截止时间优先算法调度示例
如图,有四个非周期任务,它们按编号顺序先后到达。
截止时间要求也如图所示(假设分别为3,5,7,8)。
则调度顺序为1,3,4,2。
2.最低松弛度优先算法
松弛度=任务必须完成的时间-任务本身的运行时间-当前时间
该算法是根据任务紧急(或松弛)的程度,来确定任务的优先级。
任务的紧急程度愈高,为该任务所赋予的优先级就愈高,以使之优先执行。
在实现该算法时要求系统中有一个按松弛度排序的实时任务就绪队列,松弛度最低的任务排在队列最前面,调度程序总是选择就绪队列中的队首任务执行。
该算法主要用于可抢占调度方式中。
最低松弛度优先算法调度示例
设在一个实时系统中有两个周期性实时任务A和B,A要求每20ms执行一次,执行时间为10ms;B只要求每50ms执行一次,执行时间为25ms。
试最低松弛度优先算法调度A、B的执行。
图中的A1,A2,…,B1,B2,…分别为A、B每次必须完成时间点。
由图可分别计算出A、B分别在各时间点的松驰度。
t=0:
A1s=20-10=10;B1s=50-25=25,调度A1
t=10:
A2s=40-10-10=20,B1s=50-25-10=10,调度B1
t=30:
A2s=40-10-30=0;B1s=50-5-30=15,调度A2抢占B1
t=40:
A3s=60-10-40=40;B1s=50-5-40=5,调度B1重执行
t=45:
A3s=60-10-45=5;B2s=100-25-45=30,调度A3
t=55:
A仍未进入下一周期,B已进入,调度B2执行
t=70:
A4s=80-10-70=0;B2s=100-10-70=20,调度A4抢占B2
至此一个周期结束,下与此同,周期变化
4.7多处理机系统中的调度
提高计算机系统性能的主要途径有两条:
一是提高构成计算机的元器件的运行速度,特别是处理器芯片的速度;
二是改进计算机系统的体系结构,特别是在系统中引入多个处理器或多台计算机,以实现对信息的高度并行处理,达到提高系统吞吐量和可靠性的目的。
4.7.1多处理器系统的类型
4.7.2进程分配方式
4.7.3进程(线程)调度方式
4.7.1多处理器系统的类型
1.紧密耦合MPS和松弛耦合MPS
2.对称多处理器系统和非对称多处理器系统
1.紧密耦合MPS和松弛耦合MPS
(1)紧密耦合(TightlyCoupled)MPS。
这通常是通过高速总线或高速交叉开关,来实现多个处理器之间的互连的。
它们共享主存储器系统和I/0设备,并要求将主存储器划分为若干个能独立访问的存储器模块,以便多个处理机能同时对主存进行访问。
系统中的所有资源和进程,都由操作系统实施统一的控制和管理。
(2)松散耦合(LooselyCoupled)MPS。
在松散耦合MPS中,通常是通过通道或通信线路,来实现多台计算机之间的互连。
每台计算机都有自己的存储器和I/0设备,并配置了OS来管理本地资源和在本地运行的进程。
因此,每一台计算机都能独立地工作,必要时可通过通信线路与其它计算机交换信息,以及协调它们之间的工作。
2.对称和非对称多处理器系统
(1)对称多处理器系统SMPS(SymmetricMultiprocessorSystem)。
在系统中所包含的各处理器单元,在功能和结构上都是相同的,当前的绝大多数MPS都属于SMP系统。
例如,IBM公司的SR/6000ModelF50,便是利用4片PowerPC处理器构成的。
(2)非对称多处理器系统。
在系统中有多种类型的处理单元,它们的功能和结构各不相同,其中只有一个主处理器,有多个从处理器。
4.7.2进程分配方式
在多处理器系统中,进程的调度与系统结构有关。
在同构型系统中,由于所有的处理器都是相同的,因而可将进程分配到任一处理器上运行;
对于非对称多处理器系统,则对任一进程而言,都只能把它分配到某一适合于其运行的处理机上去执行。
1.SMP中的进程分配方式
在SMP系统中,所有的处理器都是相同的,因而可把所有的处理器作为一个处理器池(Processorpool),由调度程序或基于处理器的请求,将任何一个进程分配给池中的任何一个处理器去处理。
在进行进程分配时,可采用以下两种方式之一。
1)静态分配(StaticAssigenment)方式
2)动态分配(DynamicAssigenment)方式
1)静态分配方式
是指一个进程从开始执行直至其完成,都被固定地分配到一个处理器上去执行。
此时,须为每一处理器设置一专用的就绪队列,该队列中的诸进程先后都是被分配到该处理器上执行。
在进程阻塞后再次就绪时,也仍被挂在这个就绪队列中,因而下次它仍在此处理器上执行。
这种方式与单处理机环境下的进程调度一样。
优点是进程调度的开销小;
缺点是会使各处理器的忙闲不均。
系统中可能有些处理机的就绪队列很快就变成空队列,使处理器处于空闲状态,而另一些处理器则可能一直忙碌。
2)动态分配方式
在系统中仅设置一个公共的就绪队列,系统中的所有就绪进程都被放在该队列中。
分配进程时,可将进