黄老师 发表于 2013-8-22 07:36:44

大工13春《操作系统概论》辅导资料十四

大工13春《操作系统概论》辅导资料十四
主    题:第七章死锁(第3节)
学习时间:2013年7月1日-7月7日
内    容:
第七章死锁
这周我们将学习第六章中的第3节,下面整理出的理念框架供同学们学习。
第三节   死锁的预防
预防是采用某种策略,限制并发进程对资源的请求,使系统在任何时刻都不满足死锁的必要条件。
破坏“不可剥夺”条件
允许进程动态申请资源的前提下规定:
一个进程在申请新资源的要求不能立即得到满足时,便处于等待状态,而一个处于等待状态的进程的全部资源可以被剥夺这些资源隐式地释放了,被剥夺资源重新加入资源表中仅当该进程重新获得它原有的资源以及得到新申请的资源时,才重新启动执行
实施方案
若一个进程已经占用了某些资源,又要申请一个新资源,在申请新资源时,不能立即得到满足,在变为等待状态之前,该进程必须释放已有的资源。
若一个进程申请某些资源,首先系统应检查这些资源是否可用,如果可用,就分配;否则,系统检查这些资源是否分配给另外某个等待进程。若是,则系统将剥夺所需资源,分配给这个进程。若资源没有被等待进程占有,该进程等待,在其等待过程中,其资源可能被剥夺。
一、预先静态分配法(破坏“请求和保持”条件)
不允许进程在占用资源的同时又去申请新的资源。
每个进程必须开始执行前就申请它所需的全部资源,仅当系统满足时且将资源一次性分配给进程后,该进程才开始执行,进程事先并不知道自己将需要哪些资源,需要多少资源(否则,银行家算法就能用);这种方法难以保证资源的使用效率;仅当进程没有占用资源时,才允许它申请资源,如果进程已经占用了某些资源而又要再申请资源,则它应先归还所占用的资源再申请新资源,仍会使进程处于等待。
二、有序资源使用法(破坏“循环等待”条件)
将系统中所有资源顺序编号,原则是较为紧张、稀少的编号较大进程申请资源时,必须严格按照资源编号的顺序进行,否则系统不予分配即一个进程只有得到编号小的资源,才能申请编号大的资源。例如10个资源R1、R2、…、R10,进程P在申请R1、R3、R6后,不能再申请R6之前的资源。释放资源时,按照编号递减的次序提出要求。
可以证明:如果按照以上的规则进行资源的申请和分配,那么在资源分配图中不可能出现环路,即不可能出现死锁。
例如:进程PA,使用资源的顺序是R1,R2;
进程PB,使用资源的顺序是R2,R1;
若采用动态分配有可能形成环路条件,造成死锁。
采用有序资源分配法:R1的编号为1,R2的编号为2;
PA:申请次序应是:R1,R2
PB:申请次序应是:R1,R2
这样就破坏了环路条件,避免了死锁的发生。
三、补充
1、死锁的避免
死锁的避免不同于死锁的防止,死锁的防止是采用某种分配策略后,系统就不会产生死锁,这好比是你打过了某种预防针,再也不会得那种病。而死锁的避免是没有打预防针,但是通过其他办法,避免得病。因此有“安全状态”的说法,对应的,当然也有不安全状态。就像人都有得病的可能,不必任何病都打预防针。只要注意防病,仍然可以安全健康的生活。
1)、安全状态:如果操作系统能保证所有的进程在有限的时间内得到需要的全部资源,则称系统处于“安全状态”。
2)、区分死锁的避免与死锁的防止:当采用了防止死锁的资源分配策略后,系统中就不会形成死锁。但是可以防止死锁的资源分配策略中,有的只适用于对某些资源的分配,有的会影响资源的使用效率。这时可用使用死锁的避免。
死锁的避免是解决死锁的另一种方法,它不同于死锁的防止。在系统中不采用防止死锁的资源分配策略,而是估计到可能有死锁发生时避免死锁的发生。
3)、银行算法是怎样避免死锁的:
    银行家算法是这样的:
a)当一个用户对资金的最大的需求量不超过银行家现有的资金时就可以接纳该用户。
b)用户可以分期贷款,但贷款的总数不能超过最大需求量。
c)当银行家现有的资金不能满足用户的尚需贷款时,对用户的贷款可推迟支付,但总能使用户在有限的时间里得到贷款。
d)当用户得到所需的全部资金后,一定能在有限的时间里归还所有资金。
我们把操作系统看作是银行家,操作系统管理的资源相当于是银行家管理的资金,则银行家算法就是:
a)当一个进程首次申请资源时,测试该进程对资源的最大的需求量,如果不超过系统现存资源时就可以按他的当前申请量为其分配资源。 否则推迟分配。
b)进程执行中继续申请资源时,测试该进程占用资源和本次申请资源总数有没有超过最大需求量。超过就不分配,没超过则再测试现存资源是否满足进程还需要的最大资源量,满足则按当前申请量分配,否则也推迟分配。
总之,银行家算法要保证分配资源时系统现存资源一定能满足至少一个进程所需的全部资源。这样就可以保证所有进程都能在有限时间内得到需要的全部资源。这就是安全状态。
2、死锁的检测
就是既不打预防针,也不去避免得病,而是经常去体检,如果发现有病了就治疗。这是一种事后解决的办法,也算是解决死锁问题的一条途径。但这毕竟要付出较大代价.
   1、什么是死锁的检测:对资源的申请和分配不加限制,只要有剩余的资源就可把资源分配给申请者。这样可能会出现死锁,系统定时运行一个“死锁检测程序”,如果检测到死锁发生,则必须先解除死锁再继续工作。
2、怎样实现死锁的检测:a)、每个资源当用中只有一个资源
b)、资源类中含有若干个资源。
3、死锁的解除:一般采用两种方式来解除死锁,一种是终止一个或几个进程的执行以破坏循环等待;另一种是从涉及死锁的进程中抢夺资源。
检测死锁和解除死锁都要付出很大代价。所以用死锁检测的方法解决死锁问题只适用于不经常发生死锁的系统中。
选择题
1、防止死锁的方法,通常是打破四个必要条件之一,但一般不采用破坏( )条件。
A、占有并等待
B、互斥
C、不抢夺
D、循环等待
2、产生系统死锁的原因可能是由于()。
A、进程释放资源      
B、一个进程进入死循环   
C、多个进程竞争,资源出现循环等待   
D、多个进程竞争共享型设备
3、若系统中有五台绘图仪,有多个进程均需要使用两台,规定每个进程一次仅允许申请一台,则至多允许()个进程参与竞争,而不会发生死锁。
A、5
B、2
C、3
D、4
4、操作系统讨论的死锁是与()有关。
A、某个进程申请的资源不存在      
B、进程并发执行的进度和资源分配的策略      
C、进程并发执行的速度       
D、某个进程申请的资源数多于系统的资源数
5、死锁与安全状态的关系是()。
A、死锁状态有可能是安全状态
B、安全状态也可能是死锁状态
C、不安全状态必定产生死锁
D、死锁状态一定是不安全状态
参考答案
1-5BCDBD
页: [1]
查看完整版本: 大工13春《操作系统概论》辅导资料十四