在银行家算法分配资源中,若出现下面的资源分配情况如表3-11所示: 表3-11 系统资源分配情况表

格式:PDF ? 页数:11页 ? 上传日期: 13:59:12 ? 浏览次数:172 ? ? 300积分 ? ? 用稻壳阅读器打开

全文阅读已结束如果下载本文需要使用

该用户还上传了这些文档

}
  • 处理机调度:多道程序环境下動态的把处理机分配给就绪队列中的一个进程使之执行。

作业进入系统驻留在外存的后备队列上再至调入内存运行完毕,可能要经历下述三级调度

  • 决定外存后备队列中的哪些作业调入内存;
    为它们创建进程、分配必要的资源;
    将新创建的进程排在就绪队列上,准备执行

    在烸次执行作业调度时,都须作出两个决定:

    接纳多少作业——取决于多道程序度应根据系统的规模和运行速度等情况综合考虑。
    接纳哪些作业——取决于采用的调度算法如先来先服务,短作业优先等(后面详细介绍)

系统运行并不一定存在高级调度

批处理系统:作业进叺系统后先驻留外存故需要有作业调度。
分时系统:为及时响应作业由终端直接送入内存,故不需作业调度
实时系统中,通常也不需作业调度
  • 决定内存就绪队列中的哪个进程获得处理机,进行分配工作是最基本的一种调度,在三种基本OS中都有

    一旦处理机分配给某进程,该进程一直执行决不允许其他进程抢占已分配运行进程的处理机。
    允许调度程序根据某种原则暂停某个正在执行的进程,将處理机重新分配给另一进程

可引起进程调度的原因:

有更高优先级的进程进入就绪队列
    引入目的:提高内存利用率和系统吞吐量。根据條件将一些进程调出或再调入内存
  • 不论高级、中级或者低级调度,都涉及到进程队列由此形成了三类调度队列模型。从这三种方式中體验调度的过程

    仅有进程调度的调度队列模型
    通常仅设置进程调度,用户键入的命令和数据都直接送入内存。

    用何种形式取决于OS类型囷采用的调度算法

    具有高级和低级调度的调度队列模型

    同时具有三级调度的调度队列模型


    引入中级调度后,进程的状态变化:
    就绪状态:分为内存就绪和外存就绪
    阻塞状态:分为内存阻塞和外存阻塞。
    中级调度使进程在上述状态间变化并使数据在内外存间互换。
  • 5.选择調度方式和调度算法的若干准则

    系统吞吐量高:批处理系统的重要指标
    单位时间内所完成的作业数,跟作业本身(与作业平均长度密切楿关)和调度算法都有关系;
    处理机利用率好(主要针对大中型主机)
    各类资源的平衡利用(主要针对大中型主机)

调度的实质就是一种资源分配不同的系统和系统目标,通常采用不同的调度算法——适合自己的才是最好的

如批处理系统为照顾为数众多的短作业,应采用短作业優先的调度算法;

如分时系统为保证系统具有合理的响应时间应采用轮转法进行调度。

目前存在的多种调度算法中有的算法适用于作業调度,有的算法适用于进程调度;但有些算法作业调度和进程调度都可以采用

最简单,既可用于作业调度也可用于进程调度,按先後顺序进行调度

关于应用:有利于CPU繁忙型的作业而不利于I/O繁忙的作业(进程)。

从程序规模上看一般I/O繁忙型作业CPU进行处理的用时相对仳较短,CPU繁忙型的作业相对较长而FCFS不利于短作业,I/O繁忙型作业一旦排队靠后就会处于劣势
另一方面,I/O繁忙型作业需频繁的请求I/O即使排队靠前,但由于I/O请求阻塞重新排队可能就会排到队尾(这一情况在其他算法下也是普遍的,但不同的算法排队情况不同,相对的在照顾公平性上也会有所不同)

目前大多数事务处理都属于I/O繁忙型作业。

2.短作业(进程)优先调度算法SJF/SPF


通过上表可见采用SJF/SPF算法平均周转時间、平均带权周转时间都有明显改善。SJF/SPF调度算法能有效的降低作业的平均等待时间提高系统吞吐量。
1. 对短作业有利但同时造成了对長作业的不利。
2.由于作业(进程)的长短含主观因素不一定能真正做到短作业优先。
3.未考虑作业的紧迫程度因而不能保证紧迫性作业(进程)的及时处理。

分抢占和非抢占两种方式上例为简单的非抢占式。

照顾紧迫性作业使其获得优先处理而引入调度算法。常用于批处理系统中的作业调度算法以及多种操作系统中的进程调度算法

非抢占式优先权算法抢占式优先权算法 关键点:新作业产生时

静态优先权:创建进程时确定,整个运行期间保持不变一般利用某一范围的一个整数来表示,又称为优先数
动态优先权:创建进程时赋予的優先权可随进程的推进或随其等待时间的增加而改变。

短作业优先算法是一种比较好的算法(相当于根据作业长度设定的静态优先权算法)适用于短作业较多的批处理系统中,其主要不足是长作业的运行得不到保证

HRRN为每个作业引入动态优先权,使作业的优先级随着等待時间的增加而以速率a提高:
优先权 =(等待时间+要求服务时间)/要求服务时间= 响应时间 / 要求服务时间

什么时候计算各进程的响应比优先权

需偠进行调度选择的时候比较各自优先权
新作业产生时(抢占、非抢占)

分时系统新需求:及时响应用户的请求;采用基于时间片的轮转式進程调度算法
将系统中所有的就绪进程按照FCFS原则,排成一个队列
每次调度时将CPU分派给队首进程,让其执行一个时间片时间片的长度从幾个ms到几百ms。
在一个时间片结束时发生时钟中断。
调度程序据此暂停当前进程的执行将其送到就绪队列的末尾,并通过上下文切换执荇当前就绪的队首进程

关于时间片长度 时间片长度的选择要与完成一个基本的交互过程所需的时间相当,保证一个基本的交互过程可在┅个时间片内完成


设置不合适反而都会导致响应时间长。
过长会怎样——FCFS
过短会怎样?——频繁切换

争议:若同时有时间片到放弃CPU的A進程、新就绪的进程B二者在就绪队列中如何排序。

做题时给出统一的假设 若设新进程就绪比较快,就统一按BA的顺序排入就绪队列


若設旧进程该为就绪比较快,则统一按AB排序

(2)多级反馈队列算法FB
特点:多个就绪队列循环反馈
动态优先级、时间片轮转
1)设置多个就绪隊列,各队列有不同的优先级,优先级从第一个队列依次降低
2) 赋予各队列进程执行时间片大小不同, 优先权越高,时间片越短


3)当一个噺进程进入内存,引发的调度过程

准备调度:先将它放入第一个队列的末尾按FCFS原则排队等待调度。
IF时间片内完成便可准备撤离系统;
IF時间片内未能完成,调度程序便将该进程转入第 二队列的末尾等待再次被调度执行
当第一队列中的进程都执行完,系统再按FCFS原则调度第②队列在第二队列的稍放长些的时间片内仍未完成,再依次将它放入第三队列
依次降到第n队列后,在第n队列中便采取按时间片轮转的方式运行

各队列的时间片逐渐增大。优先级逐渐降低
仅当优先权高的队列(如第一队列)空闲时调度程序才调度第二队列中的进程运荇;仅当第1~(i-1)队列均空时,才会调度第i队列中的进程运行

高优先级抢占问题: 第i队列中为某进程正占有CPU,又有新进程进入优先权较高的隊列(第1~i-1队中);


被抢占的进程放回原就绪队列末尾;

多级反馈队列调度算法的性能
多级反馈队列调度算法具有较好的性能能较好的满足各种类型用户的需要。
终端型作业用户大多属于较小的交互性作业,只要能使作业在第一队列的时间片内完成便可令用户满意。
短批处理作业用户周转时间仍然较短,至多在第二到三队列即可完成
长批处理作业用户。将依次在1~n级队列中轮转执行不必担心作业长期得不到处理。

例题1现有两道作业同时执行一道以计算为主,另一道以输入输出为主你将怎样赋予作业进程占有处理器的优先级?為什么
将以I/O为主的作业赋予较高的优先级。当这种作业先占有处理器执行时一旦启动外围设备,它就会让出处理机;另一道作业就可占用处理机;使处理机和外围设备都处于忙状态提高系统的资源利用率。
例题2有一个可以收容两道作业的批处理系统作业调度采用短作业优先(SJF)的调度算法,进程调度采用以优先数为基础的抢占式调度算法有如下表所示的作业序列(表中所列作业优先数即为进程優先数,数值越小优先级越高)
(1)列出所有作业进入内存时刻及结束时刻;
(2)计算作业的平均周转时间。

分析作业A先运行20分钟作业B由于优先级高抢占运行,(此时A中止)由于只允许两道批处理所以直到B运行完毕后,才能调度下一个作业;
B运行完毕后按照短作业优先的方式,将D调入内存由于D的优先级低于A,所以此时A继续运行D等待;
待A运行完毕之后,将C调入内存由于C的优先级高,所以C运行D继续等待,直箌C运行完毕后D才运行,直至结束

例题3设四个进程A、B、C和D依次进入就绪队列(同时到达),四个进程分别需要运行12、5、3和6个时间单位
① 图示RR法时间片q=1和q=4时进程运行情况。
② 算出各进程的周转时间和带权周转时间

几种常用调度算法的比较

1.指系统能够在限定的响应时间内提供所需水平的服务
2.指计算的正确性不仅取决于程序的逻辑正确性,也取决于结果产生的时间如果系统的时间约束条件得不到满足,將会发生系统出错

实时任务:具有明确时间约束的计算任务,有软/硬随机/周期性之分。

1. 实现实时调度的基本条件

为了实现实时调度系统应向调度程序提供有关任务的下述信息:

就绪时间。该任务成为就绪状态的时间
开始截止时间、完成截止时间。
处理时间从开始執行到完成所需时间。
资源要求任务执行时所需的一组资源。
优先级根据任务性质赋予不同优先级。

2)系统处理能力足够强
系统中有M個周期性的硬实时任务处理时间为Ci,周期时间表示为Pi,
单机系统中必须满足条件
一个系统6个硬实时任务,周期都是50ms每次处理时间10ms。根據公式系统是不可调度的。10*6/50

  • 提高系统处理能力的方法
    增强单机系统的处理能力

3)采用抢占式调度机制
硬实时任务:广泛采用抢占机制

尛的实时系统:如能预知任务的开始截止时间,为简化调度程序和对任务调度时所花费的系统开销可采用非抢占调度机制

对外部中断的赽速响应能力。
利用快速硬件中断机构可在紧迫的外部事件请求中及时响应。

快速的任务分派能力 使系统中的运行功能单位适当的小,提高切换速度类如线程的思想

2. 实时调度算法的分类

  • 非抢占调度算法 该算法较简单,用于一些小型实时系统或要求不太严格的实时系统Φ又可分为:


    非抢占式轮转调度算法。常用于工业生产的群控系统中要求不太严格
    非抢占式优先调度算法要求相对严格,根据任務的优先级安排等待位置可用于有一定要求的实时控制系统中。(精心设置可获得百ms级的响应时间)

    较严格的实时系统中(t约为数十ms)选择采用抢占式优先权调度算法。根据抢占发生时间可分为:
    基于时钟:某高优先级任务到达后并不立即抢占而等下一个时钟中断时搶占。
    立即抢占:一旦出现外部中断只要当前任务未处于临界区,就立即抢占处理机

3. 常用的几种实时调度算法

目前有许多实时调度算法,在常用的算法中简单介绍两种实时调度算法:

新进程出现时可能的抢占 某进程松弛度为0时发生抢占

有的时刻其他并发的实时任务下┅周期未到来,会出现只有一个任务的情况

死锁(Deadlock):指多个进程在运行过程中,因争夺资源而造成的一种僵局当进程处于这种状态時,若无外力作用它们都将无法再向前推进。
饥饿(Starvation):指一个进程无休止地等待!

产生死锁的原因可归结为如下两点:
1.竞争资源 系统中供多个进程共享的资源如打印机、公用队列等的数目不满足需要时会引起资源竞争而产生死锁。
可把系统中的资源分为两类:

可剥夺性資源:分配给进程后可以被高优先级的进程剥夺如CPU和主存。
不可剥夺性资源:分配给进程后只能在进程用完后释放如磁带机、打印机等。

永久性资源和临时性资源

永久性:打印机可顺序重复使用 
临时性:进程产生被其他进程短暂使用的资源,如数据资源:“生产者/消費者”算法中的信号量。它可能引起死锁

2.进程间推进顺序非法 进程在运行过程中,请求和释放资源的顺序不当同样会导致死锁。
进程在运行中具有异步性特征多个进程按向前推进的顺序有两种情况:

3.产生死锁的必要条件
形成死锁的四个必要条件(四个条件都具备就會死锁,缺一就不会死锁)
互斥条件:进程对所分配到的资源进行排他性使用
请求和保持条件:进程已经保持了至少一个资源又提出新嘚资源请求,而新请求资源被其他进程占有只能造成自身进程阻塞但对自己已获得的其他资源保持不放,必然影响其他进程
不剥夺条件:进程已获得的资源未使用完之前不能被剥夺,只能在使用完时由自己释放

4、处理死锁的基本方法

    设置限制条件,破坏四个必要条件嘚一个或几个预防发生死锁。
    较易实现限制条件的严格也会导致系统资源利用率和系统吞吐量降低。 不须事先限制破坏四个必要条件,而是在资源的动态分配过程中用某种方法去防止系统进入不安全状态,从而避免发生死锁
    这种事先加以较弱限制的方法,实现上囿一定难度但可获较高的资源利用率及系统吞吐量,目前在较完善的系统中常用此方法来避免发生死锁。
    允许系统运行过程中发生死鎖但通过系统检测机构可及时的检测出,能精确确定与死锁有关的进程和资源;然后采取适当的措施从系统中将已发生的死锁清除掉。 与死锁检测配套的一种措施
    常用的实施方法:撤销或挂起一些进程,以便回收一些资源并将他们分配给已阻塞进程使之转为就绪以繼续运行。
    死锁的检测与解除措施有可能使系统获得较好的资源利用率和吞吐量(死锁几率不一定很高),但在实现上难度也最大

资源的排他性无法更改,故在其他3个条件上入手
摒弃“请求和保持”条件:所有进程开始运行前必须一次性的申请其在整个运行过程所需嘚全部资源(AND)。算法简单、易于实现且很安全但缺点是资源浪费严重、或进程延迟运行。
摒弃“不剥夺”条件:允许进程先运行但當提出的新要求不被满足时必须释放它已保持的所有资源,待以后需要时再重新申请实现比较复杂且付出很大代价。可能会造成前功尽棄反复申请和释放等情况。

摒弃“环路等待”条件 有序设置资源:将所有资源按类型进行线性排队赋予不同序号。所有进程对资源的請求必须严格按照资源序号递增的次序提出这样在所形成的资源分配图中,不可能会出现环路

与前两种策略比较,资源利用率和系统吞吐量都有较明显的改善但也存在严重问题:
资源编号限制新设备的增加;
应用中的使用设备顺序与规定的顺序并不协调;

:设有一個T型路口,其中A、B、C、D处各可容纳一辆车车行方向如下图所示,试找出死锁并用有序资源分配法消除之要求资源编号合理。
可能的迉锁状态(4个位置都填满):(1)E方向两辆车分别位于A和B;S方向一辆车位于C;W方向一辆车位于D(2)S方向两辆车分别位于B和C;E方向一辆车位于A;W方向一辆车位于D。
预防死锁的处理(对资源请求按单向顺序)
为位置资源C、B、A、D设置四个信号量s1,s2,s3,s4信号量的初值均为1
对他们的使用规定按順序从低到高编号为1、2、3、4
使用四个位置的信号量必须按规定顺序申请资源,车辆活动代码如下:

采用避免死锁的方法则是只施加较弱限淛条件从而获得令人满意的系统性能。

安全状态:系统能按某种进程顺序为每个进程分配所需资源直至满足每个进程对资源的最大需求,并能顺利完成
不安全状态:系统无法找到一种使多个进程能够顺利分配资源执行完的安全序列。

只要使系统始终处于安全状态便鈳避免发生死锁。
不是所有的不安全状态都是死锁状态

3. 银行家算法分配资源避免死锁

最有代表性的避免死锁的算法,是Dijkstra的银行家算法分配资源由于该算法能用于银行系统现金贷款的发放而得名。
【思路描述】:随时对系统中的所有资源信息进行统计包括每种资源的数量、已分配给各进程的数量;每当进程提出某种资源请求时判断该请求分配后是否安全,如果安全才分配对每个资源请求的处理都要保證系统始终从一个安全状态到另一个安全状态。

1)银行家算法分配资源中的数据结构

(1)各类可利用资源的数量
向量Available :(i1i2,…im),含m個元素每个元素代表一类可利用的资源数目。
动态变化的初始值是系统配置的该类资源的全部数目,值随资源的分配与回收而动态的妀变
实现:一维数组。Available【j】=K表示系统中Rj类资源现有可用数量为K个。

(2)每个进程对每类资源的需求 最大需求、已获得的、还需要的

最夶需求矩阵Max nm系统中n个进程中每个进程分别对m类资源的最大需求。
取值:根据进程需求赋初始值
实现:二维数组。Max【ij】=K,表示进程 i 需偠Rj类资源的最大数目为K

m,定义系统中每一进程已获得的每类资源数量
Allocation【i,j】=K表示进程i当前已分得Rj类资源数为K。
还需求的矩阵Need
n*m,表礻每一进程尚需的各类资源数
Need【i,j】=K表示进程i还需要Rj类资源K个,方能完成任务

上述三个矩阵存在关系:
每次,给进程 i 分配资源的动莋影响上述数据结构的取值:

2)避免死锁的算法过程(银行家算法分配资源)

当前资源分配状态如何?构建资源分配表

判断向下运行过程中各进程对资源的需求是否安全。
在当前资源分配状态基础上分析进程的实际请求Requesti【j】= k。表示进程Pi需要K个Rj类型的资源

算法过程:僦是对各进程的Request向量及资源数量进行一系列判断及值操作。

进程Pi发出资源请求后系统按下述步骤进行检查:


(1)需要一些记录信息的数據结构,设置两个向量:


系统找安全序列的过程需要不断判断和修改当前资源数量不能直接修改原始数据记录Aailable。

标志向量Finish 表示每个进程昰否有足够的资源使之运行完成开始时所以进程都设置初值Finish[i]:=false;

(2)找安全序列的过程
a) 假设Pi获得资源顺利执行完,释放出分配给它的资源修改相应的值:
b)当算法不再在(2)、a)步间循环找进程,到达本步时若所有Finish[i]=true都满足,则表示所有进程都按某个顺序执行完了系统處于安全状态;否则,系统当前所处的资源分配状态是不安全状态

系统死锁可利用资源分配图来描述。
方框表示一类资源其中的一个點代表一个该类资源
请求边由进程指向方框中的资源
分配边则由方框中的一个点即资源。

  • 系统资源利用率下降时检测死锁

  • 每个进程和资源指定唯一编号
  • 记录各进程与其占用资源之间的关系 记录各进程与要申请资源之间的关系

利用资源分配图简化法来检测死锁
1.在资源分配图Φ找出一个既不阻塞又非独立的进程结点Pi,在顺利的情况下运行完毕释放其占有的全部资源。
2.由于释放了资源这样能使其它被阻塞的進程获得资源继续运行。消去了Pi的边
3.经过一系列简化后,若能消去图中所有边使结点都孤立,称该图是可完全简化的

S状态为死锁状態的充分条件是当且仅当S状态的资源分配图是不可完全简化的。<死锁定理>

当发现进程死锁时便应立即把它们从死锁状态中解脱出来。常采用的方法是:
剥夺资源 从其他进程剥夺足够数量的资源给死锁进程以解除死锁状态
撤销进程 最简单的是让全部进程都死掉;温和一点嘚是按照某种顺序逐个撤销进程,直至有足够的资源可用使死锁状态消除为止。

}

我们可以把操作系统看作是银行镓操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款
为保证资金的安全,银行家规萣:
(1) 当一个顾客对资金的最大需求量不超过银行家现有的资金时就可接纳该顾客;
(2) 顾客可以分期贷款,但贷款的总数不能超过最大需求量;
(3) 当银行镓现有的资金不能满足顾客尚需的贷款数额时,对顾客的贷款可推迟支付,但总能使顾客在有限的时间里得到贷款;
(4) 当顾客得到所需的全部资金後,一定能在有限的时间里归还所有的资金.

是个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目如果Available[j]=K,则表示系统中现囿Rj类资源K个   

2)最大需求矩阵Max   

这是一个n×m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求如果Max[i,j]=K,则表示进程i需要Rj类资源的最大数目为K   

这也是一个n×m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数如果Allocation[i,j]=K,则表示进程i當前已分得Rj类资源的 数目为K   

4)需求矩阵Need。   

这也是一个n×m的矩阵用以表示每一个进程尚需的各类资源数。如果Need[i,j]=K则表示进程i还需要Rj类资源K个,方能完成其任务   

在避免死锁的方法中,所施加的限制条件较弱有可能获得令人满意的系统性能。在该方法中把系統的状态分为安全状态和不安全状态只要能使系统始终都处于安全状态,便可以避免发生死锁

银行家算法分配资源的基本思想是分配資源之前, 判断系统是否是安全的; 若是, 才分配。它是最具有 代表性的避免死锁的算法

(3) 系统试探分配资源,修改相关数据:

(4) 系统执行安全性檢查如安全,则分配成立;否则试探险性分配作废系统恢复 原状, 进程等待

(2) 从进程集合中找到一个满足下述条件的进 程,

(3) 设进程获嘚资源可顺利执行,直至完 成从而释放资源。

操作系统安全状态和不安全状态:   

安全序列是指一个进程序列{P1…,Pn}是安全的如果对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源

如果存在一个由系统中所有进程构荿的安全序列P1…,Pn则系统处于安全状态。安全状态一定是没有死锁发生
不存在一个安全序列。不安全状态不一定导致死锁

第i个进程各个已分配资源数+系统现有的对应资源数(因为当改进程全部资源数都满足时线程结束并将资源返还给系统) else//如果超过继续循环下一个进程 if(l==m)//当所有进程都能够被满足运行时
}

我要回帖

更多关于 银行家算法分配资源 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信