计算机操作系统 第三章 处理机调度与死锁知识总结

3.1 处理机调度的层次和调度算法的目标

在多道程序系统中,调度的实质是一种资源分配。处理机调度算法是指根据处理机分配策略所规定的处理机分配算法。

3.11 处理机调度的层次

1.高级调度(High Level Scheduling)
高级调度又称长程调度或作业调度,它的调度对象是作业。它的运行周期较长,大约几分钟一次,因此把它称为长程调度。
2.低级调度(Low Level Scheduling)
低级调度又称为进程调度或短程调度,其所调度的对象是进程(或内核级线程)。它的运行频率最高。
3.中级调度(Intermediate Scheduling)
中级调度又称为内存调度,引入中级调度的主要目的是提高内存利用率和系统吞吐量。

3.12 处理机调度算法的目标

1.处理机调度算法的共同目标
(1)资源利用率。
CPU的利用率=CPU有效工作时间/(CPU有效工作时间+CPU空闲等待时间)
(2)公平性。使诸进程都获得合理的CPU时间,不会发生进程饥饿现象。
(3)平衡性。
(4)策略强制执行。
2.批处理系统的目标
(1)平均周转时间短。
带权周转时间W=作业的周转时间T/系统为它提供服务的时间Ts
(2)系统吞吐量高。
(3)处理机利用率高。
3.分时系统的目标
(1)响应时间快。
(2)均衡性。
4.实时系统的目标
(1)截止时间的保证。
(2)可预测性。

3.2 作业与作业调度

3.21 批处理系统中的作业

1.作业和作业步
(1)作业:作业是一个比程序更广泛的概念,它不仅包含了通常的程序和数据,而且还应配有一份作业说明书。
(2)作业步:在作业运行期间,每个作业都必须经过若干个相对独立又相互关联的顺序加工步骤才能得到结果,我们把其中的每一个加工步骤称为一个作业步。
2.作业控制块(Job Control Block,JCB)
每个作业都设置了一个作业调度块JCB,它是作业在系统中存在的标志,其中保存了系统对作业进行管理和调度所需的全部信息。
3.作业运行的三个阶段和三种状态
(1)收容阶段:操作员把用户提交的作业通过某种输入方式或SPOOLing系统输入到硬盘上,再为该作业建立JCB,并把它放入作业后备队列中。此时作业的状态为“后备状态”。
(2)运行阶段:当作业被作业调度选中后,便为它分配必要的资源和建立进程,并将它放入就绪队列。一个作业从第一次进入就绪状态开始,直到它运行结束前,都处于“运行状态”。
(3)完成阶段:当作业运行完成、或发生异常状况而提前结束时,作业便进入完成阶段,相应的作业状态为“完成状态”。

3.22 作业调度的主要任务

作业调度的主要任务是:根据JCB中的信息,检查系统中的资源能否满足作业对资源的需求,以及按照一定的调度算法,从外存的后备队列中选取某些作业调入内存,并为它们创建进程、分配必要的资源。然后再将新创建的进程排在就绪队列上等待调度。在每次执行作业调度时,都需作出两个决定:接纳多少个作业、接纳哪些作业。

3.23 先来先服务(FCFS)和短作业优先(SJF)调度算法

1.先来先服务(first-come first-served,FCFS)调度算法
FCFS是最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。
2.短作业优先(short job first,SJF)的调度算法
由于在实际情况中,短作业(进程)占有很大比例,为了能使他们能比长作业优先执行,产生了短作业优先调度算法。
缺点:
(1)必须预知作业的运行时间。
(2)对长作业非常不利,长作业的周转时间会明显增长。该算法完全忽视作业的等待时间,可能使作业等待时间过长,出现饥饿现象。
(3)人——机无法实现交互。
(4)完全未考虑作业的紧迫程度,不能保证紧迫性作业能得到及时处理。

3.24 优先级调度算法和高响应比优先调度算法

1.优先级调度算法(priority-scheduling algorithm,PSA)
在优先级调度算法中,基于作业的紧迫程度,由外部赋予作业相应的优先级,调度算法根据该优先级进行调度。
2.高响应比优先调度算法(Highest Response Ratio Next,HRRN)
优先权Rp=(等待时间+要求服务时间)/要求服务时间=响应时间/要求服务时间
(1)如果作业的等待时间相同,则要求服务的时间愈短,其优先权俞高,有利于短作业;
(2)当要求服务的时间相同时,作业的优先权又决定与其等待时间;
(3)对长作业的优先级,可以随等待时间的增加而提高,当其等待时间足够长时,也可获得处理机。

3.3 进程调度

进程调度是OS中必不可少的一种调度,也是对系统性能影响最大的一种处理机调度。

3.31 进程调度的任务、机制和方式

1.进程调度的任务
(1)保存处理机的现场信息。
(2)按某种算法选取进程。
(3)把处理器分配给进程。
2.进程调度机制
排队器、分派器、上下文切换器。
3.进程调度方式
(1)非抢占方式。
引起进程调度的因素可归结为:
正在执行的进程运行完毕,或因发生某事件而使其无法继续运行;
正在执行中的进程因提出I/O请求而暂停执行;
在进程通信或同步过程中,执行了某种原语操作,如Block原语。
该调度方式的优点有:实现简单,系统开销少,适用于大多数的批处理系统。缺点是它不能用于分时系统和大多数实时系统。
(2)抢占方式。
“抢占”不是一种任意性行为,必须遵循一定的原则:优先权原则、短进程优先原则、时间片原则。

3.32 轮转调度算法

在分时系统中,最简单也较常用的是基于时间片的轮转(round robin,RR)调度算法。
1.轮转法的基本原理
在轮转法中,系统根据FCFS策略,将所有的就绪进程排成一个就绪队列,并可设置每隔一定时间内即产生一次中断,激活系统中的进程调度程序,完成一次调度,将CPU分配给队首进程,令其执行。当该进程的时间片耗尽或运行完毕时,系统再次将CPU分配给新的队首进程(或新到达的紧迫进程)。由此可保证就绪队列中的所有进程在一个确定的时间段内,都能够获得一次CPU执行。
2.进程切换时机
(1)若一个时间片尚未用完,正在运行的进程便已经完成,就立即激活调度程序,将它从就绪队列中删除,再调度就绪队列中队首的进程运行,并启动一个新的时间片;
(2)在一个时间片用完时,计时器中断处理程序被激活。如果进程尚未运行完毕,调度程序将把它送往就绪队列的末尾。
3.时间片大小的确定
一个较为可取的时间片大小是略大于一次典型的交互所需要的时间。

3.33 优先级调度算法

1.优先级调度算法的类型
(1)非抢占式优先级调度算法。
(2)抢占式优先级调度算法。该算法常用于对实时性要求较高的系统中。
2.优先级的类型
(1)静态优先级。
静态优先级是在创建进程时确定的,在进程的整个运行期间保持不变。确定进程优先级大小的依据有:
进程类型,通常系统进程(如接收进程、对换进程)高于一般用户进程;
进程对资源的需求,对资源要求少的进程应赋予较高的优先级;
用户要求,根据进程的紧迫程度及用户所付费用的多少确定优先级。
静态优先级法简单易行,系统开销少,但不够精确,可能会出现优先级低的进程长期没有被调度的情况。
(2)动态优先级。
可以规定在就绪队列中的进程随其等待时间的增长,使其优先级相应提高。
当采用抢占式调度方式时,若再规定当前进程的优先级随运行时间的推移而下降,则可防止一个长作业长期地垄断处理机。

3.34 多队列调度算法

多队列调度算法由于设置多个就绪队列,因此对每个就绪队列就可以实施不同的调度算法,因此,系统针对不同用户进程的需求,很容易提供多种调度策略。

3.35 多级反馈队列(multileved feedback queue)调度算法

调度机制
(1)设置多个就绪队列;
(2)每个队列都采用FCFS算法;
(3)按队列优先级调度。

3.36 基于公平原则的调度算法

1.保证调度算法
(1)跟踪计算每个进程自创建以来已经执行的处理时间。
(2)计算每个进程应获得的处理机时间,即自创建以来的时间除以n。
(3)计算进程获得处理机时间的比率,即进程实际执行的处理时间和应获得的处理机时间之比。
(4)比较各进程获得处理机时间的比率。
(5)调度程序应选择比率最小的进程将处理机分配给它,并让该进程一直运行,直到超过最接近它的进程比率为止。
2.公平分享调度算法

3.4 实时调度

3.41 实现实时调度的基本条件

1.提供必要的信息
(1)就绪时间,是指某任务成为就绪状态的起始时间,在周期任务的情况下,它是事先预知的一串时间序列。
(2)开始截止时间和完成截止时间,对于典型的实时应用,只需知道开始截止时间或者完成截止时间。
(3)处理时间。
(4)资源要求。
(5)优先级,如果某任务的开始截止时间错过,势必引起故障,则应为该任务赋予“绝对”优先级,如果某开始截止时间的错过,对任务的继续运行无重大影响,则可为其赋予“相对”优先级,供调度程序参考。
2.系统处理能力强
提高系统处理能力的途径:
(1)采用单处理机系统,但需增强其处理能力,以显著地减少对每一个任务的处理时间;
(2)采用多处理机系统。
3.采用抢占式调度机制
4.具有快速切换机制
(1)对中断的快速响应能力,要求系统具有快速硬件中断机构,还应使进制中断的时间间隔尽量短,以免耽误时机;
(2)快速的任务分派能力,应使每个运行功能单位适当的小,以减少任务切换的时间开销。

3.42 实时调度算法的分类

根据实时任务性质,可将实施调度的算法分为硬实时调度算法和软实时调度算法;
按调度方式,则可分为非抢占调度算法和抢占调度算法。
1.非抢占式调度算法
(1)非抢占式轮转调度算法。由一台计算机控制若干个相同的(或类似的)对象,为每一个被控对象建立一个实时任务,并将它们排成一个轮转队列。
(2)非抢占式优先调度算法。如果系统中还含有少数具有一定要求的实时任务,则系统为这些任务赋予了较高的优先级。
2.抢占式调度算法
(1)基于时钟中断的抢占式优先级调度算法。在某实时任务到达后,如果它的优先级高于当前任务的优先级,这时并不立即抢占当前任务的处理机,而是等到时钟中断发生时,调度程序才剥夺当前任务的执行,将处理机分配给新到的高优先级任务。
(2)立即抢占的优先级调度算法。要求操作系统具有快速响应外部事件中断的能力。一旦出现外部中断,只要当前任务未处于临界区,便能立即剥夺当前任务的执行,把处理机分配给请求中断的紧迫任务。

3.43 最早截止时间优先EDF(Earliest Deadline First)算法

该算法根据任务的截止时间确定任务的优先级,任务的截止时间愈早,其优先级愈高,具有最早截止时间的任务排在队列的队首。该算法既可用于抢占式调度方式中,也可用于非抢占式调度方式中。

3.44 最低松弛度优先LLF(Least Laxity First)算法

该算法在确定任务的优先级时,根据的是任务的紧急(或松弛)程度。任务紧急程度愈高,赋予该任务的优先级就愈高,以使之优先执行。

3.45 优先级倒置(priority inversion problem)

1.优先级倒置的形成
优先级倒置,指高优先级进程(或线程)被低优先级进程(或线程)延迟或阻塞。
2.优先级倒置的解决方法
采用动态优先级继承方法

3.5 死锁概述

3.51 资源问题

可以引起死锁的资源主要是,需要采用互斥访问方法的、不可以被抢占的资源,即临界资源。如打印机、数据文件、队列、信号量等。
1.可重用性资源和消耗性资源
(1)可重用性资源。
每一个可重用性资源中的单元只能分配给一个进程使用,不允许多个进程共享。
进程在使用可重用性资源时,须按照这样的顺序:请求资源,如果请求资源失败,请求进程将会被阻塞或循环等待;使用资源,进程对资源进行操作;释放资源,当进程使用完后自己释放资源。
系统中每一类可重用性资源中的单元数目是相对固定的,进程在运行期间既不能创建也不能删除它。
(2)可消耗性资源
每一类可消耗性资源的单元数目在进程运行期间是可以不断变化的。
进程在运行过程中可以不断创造可消耗性资源的单元,将它们放入该资源类的缓冲区中,以增加该资源类的单元数目。
进程在运行过程中,可以请求若干个可消耗性资源单元,用于进程自己的消耗,不再将它们返回给该资源类中。
可消耗性资源通常是由生产者进程创建,由消费者进程消耗。最典型的可消耗性资源就是用于进程间通信的消息等。
2.可抢占性资源和不可抢占性资源
(1)可抢占性资源。
某进程在获得这类资源后,该资源可以再被其它进程或系统抢占。CPU和主存均属于可抢占性资源,这类资源是不会引起死锁的。
(2)不可抢占性资源
一旦系统把某资源分配给该进程后,就不能将它强行收回,只能在进程用完后自行释放。磁带机、打印机、刻录机等都属于不可抢占性资源。

3.52 计算机系统中的死锁

1.竞争不可抢占性资源引起死锁
2.竞争可消耗型资源引起死锁
3.进程推进顺序不当引起死锁
(1)进程推进顺序合法。
(2)进程推进顺序非法。

3.53 死锁的定义、必要条件和处理方法

1.思索的定义
如果一组进程中的每一个进程都在等待仅由该组进程中的其它进程才能引发的事件,那么该组进程是死锁的(Deadlock)。
2.产生死锁的必要条件
(1)互斥条件。进程对所分配到的资源进行排它性使用。
(2)请求和保持条件。进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程被阻塞,但对自己获得的资源保持不放。
(3)不可抢占条件。进程已获得的资源在未使用完之前不能被抢占,只能在进程使用完时由自己释放。
(4)循环等待条件。在发生死锁时,必然存在一个进程——资源的循环链,即进程集合(P0,P1,P2,…,Pn)中的P0正在等待一个P1占用的资源,P1正在等待P2占用的资源,…,Pn正在等待已被P0占用的资源。
3.处理死锁的方法
(1)预防死锁。
(2)避免死锁。
(3)检测死锁。
(4)解除死锁。

3.6 预防死锁

3.61 破坏“请求和保持”条件

1.第一种协议
系统在分配资源时,只要有一种资源不能满足进程的要求,即使其它所需的各类资源都空闲也不分配给该进程,而让该进程等待。
第一种协议的优点是简单、易行且安全。缺点是资源被严重浪费,严重地恶化了资源的利用率、使进程经常会发生饥饿现象。
2.第二种协议
允许一个进程只获得运行初期所需的资源后,便开始运行。进程运行过程中再逐步释放已分配给自己的、且已用毕的全部资源,然后再请求新的所需资源。
该协议是对第一种协议的改进,不仅提高设备的利用率,还可以减少进程发生饥饿的概率。

3.62 破坏“不可抢占”条件

该方法实现起来比较复杂,且需付出很大的代价。

3.63 破坏“循环等待”条件

对系统所有资源类型进行线性排序,并赋予不同的序号。规定每个进程必须按序号递增的顺序请求资源。如果需要多个同类资源单元,则必须一起请求。
该策略与前两种策略相比,其资源利用率和系统吞吐量都有较明显的改善,但也存在下述问题:
(1)为系统中各类资源所规定的序号必须相对稳定,这就限制了新类型设备的增加;
(2)尽管在为资源的类型分配序号时,已经考虑到大多数作业在实际使用这些资源时的顺序,但也经常会发生这种情况:作业使用各类资源的顺序与系统规定的顺序不同,造成对资源的浪费;
(3)为方便用户,系统对用户在编程时所施加的限制条件应尽量少,然而这种规定次序申请资源的方法必然会限制用户简单、自主地编程。

3.7 避免死锁

3.71 系统安全状态

当系统处于安全状态时,可避免发生死锁;当系统处于不安全状态时,则可能进入到死锁状态。
1.安全状态
所谓安全状态,是指系统能按某种进程推进顺序(P1,P2,…,Pn)为每个进程Pi分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可顺利地完成。此时称(P1,P2,…,Pn)为安全序列。如果系统无法找到这样一个安全序列,则称系统处于不安全状态。
2.由安全状态向不安全状态的转换
如果不按照安全序列分配资源,则系统可能会由安全状态进入不安全状态。

3.72 利用银行家算法避免死锁

每一个新进程在进入系统时,它必须申明在运行过程中,可能需要每种资源类型的最大单元数目,其数目不应超过系统所拥有的资源总量。当进程请求一组资源时,系统必须首先确定是否有足够的资源分配给该进程。若有,再进一步计算在将这些资源分配给进程后,是否会使系统处于不安全状态。如果不会,才将资源分配给它,否则让进程等待。

3.8 死锁的检测与解除

死锁检测算法:用于检测系统状态,以确定系统中是否发生了死锁。
死锁解除算法:当认定系统中已发生了死锁,用于将系统从死锁状态中解脱出来。

3.81 死锁的检测

保存有关资源的请求和分配信息;提供一种算法,它利用这些信息来检测系统是否已进入死锁状态。
1.资源分配图(Resource Allocation Graph)
在这里插入图片描述
链接: link.
2.死锁定理
S为死锁状态的充分条件是:当且仅当S状态的资源分配图是不可完全简化的。简化方法见链接。
链接: link.

3.82 死锁的解除

最简单的处理措施就是立即通知操作员,请操作员以人工方式处理死锁。
另一种措施是利用死锁解除算法,把死锁从死锁状态中解脱出来。常采用的两种方法是:
(1)抢占资源。从一个或多个进程中抢占足够数量的资源,分配给死锁进程,以解除死锁状态。
(2)终止(或撤销)进程。终止(或撤销)系统中的一个或多个死锁进程,直至打破循环环路,使系统从死锁状态解脱出来。
1.终止进程的方法
(1)终止所有死锁进程。
这是最简单的方法,但所付出的代价可能会很大。
(2)逐个终止进程。
在选择被终止进程时应考虑的若干因素:
进程的优先级大小;
进程已执行了多少时间,还需要多少时间方能完成?
进程在运行中已经使用资源的多少,以后还需要多少资源?
进程的性质是交互式的还是批处理式的?
2.付出代价最小的死锁解除算法

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值