计算机操作系统教程 课件第3章-进程同步_第1页
计算机操作系统教程 课件第3章-进程同步_第2页
计算机操作系统教程 课件第3章-进程同步_第3页
计算机操作系统教程 课件第3章-进程同步_第4页
计算机操作系统教程 课件第3章-进程同步_第5页
已阅读5页,还剩100页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机操作系统ComputerOperatingSystems第三章

进程同步第二章进程管理132进程同步死锁管程4经典的进程同步问题3.1进程同步3.1.1程序的并发执行3.1进程同步3.1.1程序的并发执行在该例中存在下述前趋关系:

Ii→Ci,Ii→Ii+1,Ci→Pi,Ci→Ci+1,Pi→Pi+1而Ii+1和Ci及Pi-1是重迭的,亦即在Pi-1和Ci以及Ii+1之间,可以并发执行。对于具有下述四条语句的程序段:

S1:a∶=x+2

S2:b∶=y+4

S3:c∶=a+b

S4:d∶=c+b并发进程之间的两种关系:相互独立:进程之间没有任何关联关系,仅有CPU竞争关系;相互关联:进程之间存在着某种关联关系(直接或间接),需要相互通信。3.1进程同步【例子】两个进程,读-修改-写count初值为1.进程1 进程2tmp1=count; tmp2=count;

tmp1++;tmp2=tmp2+2;

count=tmp1;count=tmp2;

请问:如果在这些进程执行之前,count变量的值为1,那么它最后的结果是多少?进程1 进程2tmp1=count;(=1)

interrupt...

tmp2=count;(=1)

tmp2=tmp2+2;(=3)

count=tmp2;(=3)

tmp1++;(=2)

count=tmp1;(=2)情形1情形2进程1 进程2tmp2=count;(=1)

interrupt...

tmp1=count;(=1)

tmp1++;(=2)

count=tmp1;(=2)

tmp2=tmp2+2;(=3)

count=tmp2;(=3)

情形3进程1 进程2tmp1=count;(=1)

tmp1++;(=2)

count=tmp1;(=2)

tmp2=count;(=2)

tmp2=tmp2+2;(=4)

count=tmp2;(=4)

3.1进程同步3.1.1程序的并发执行间断性2)失去封闭性3)不可再现性竞争状态(racecondition):

两个或多个进程对同一共享数据同时进行读写操作,而最后的结果是不可预测的,它取决于各个进程具体运行情况。3.1进程同步3.1.1程序的并发执行怎么解决?3.1进程同步3.1.2进程的互斥

对共享内存或共享文件的访问,可能会导致竞争状态的出现。把需要互斥访问的共享资源称为“临界资源”,把访问临界资源的那段程序称为“临界区”.竞争状态(racecondition):两个或多个进程对同一共享数据同时进行读写操作,而最后的结果是不可预测的,它取决于各个进程具体运行情况。解决之道:在同一时刻,只允许一个进程访问该共享数据,即如果当前已有一个进程正在使用该数据,那么其他进程暂时不能访问。这就是互斥的概念。上述例子有何问题?

两个进程,在各自临界区中需要对某个共享资源进行访问。非临界区;…临界区;…非临界区;进程P1非临界区;…临界区;…非临界区;进程P23.1.2进程的互斥3.1进程同步临界资源3.1.2进程的互斥3.1进程同步进程互斥是进程之间的间接制约关系。

当一个进程进入临界区使用临界资源时,另一个进程必须等待。只有当使用临界资源的进程退出临界区后,这个进程才会解除阻塞状态。进程互斥的产生原因进程宏观上并发执行,依靠时钟中断来实现微观上轮流执行;访问共享资源。3.1.2进程的互斥3.1.2进程的互斥3.1进程同步可把一个访问临界资源的循环进程描述如下:repeat

criticalsection;

remaindersection;

untilfalse;entrysectionexitsection任何两个进程都不能同时进入临界区;不能事先假定CPU的个数和运行速度;当一个进程运行在它的临界区外面时,

不能妨碍其他的进程进入临界区;任何一个进程进入临界区的要求应该在

有限时间内得到满足。3.1.2进程的互斥3.1.2进程的互斥3.1进程同步应遵循的规则空闲让进。(2)忙则等待。(3)有限等待。(4)让权等待。

P、V原语包含有进程的阻塞和唤醒机制,因此

在进程等待进入临界区时不会浪费CPU时间;Wait(P)原语:申请一个空闲资源(把信号量减1),若成功,则退出;若失败,则该进程被阻塞;Signal(V)原语:释放一个被占用的资源(把信号量加1),若发现有被阻塞的进程,则选择一个唤醒之。Value=2Value=1Value=0Value=1Value=0Value=23.1.3信号量3.1.3整数型信号量Wait(S):whileS≤0dono-op

S

∶=S-1;

Signal(S):S∶=S+1;

信号量S是一个整数,代表可用资源数。Wait(P)原语:申请一个资源,Signal(V)原语:释放一个资源。

用信号量实现互斥semaphoreS=1;ParbeginProcess1:BeginRepeateWait(S);Criticalsection;Signal(S);Untilfalse;End

Process2:BeginRepeate

Wait(S);Criticalsection;

Signal(S);Untilfalse;EndParend.利用信号量来实现进程互斥intcount; //共享变量(临界资源)semaphoremutex;//互斥信号量,初始化为??非临界区Wait(mutex);临界区Signal(mutex);非临界区P1非临界区Wait(mutex);临界区Signal(mutex);非临界区P2非临界区Wait(mutex);临界区Signal(mutex);非临界区P33.1进程同步进程间的同步是指多个进程中发生的事件存在某种时序关系,因此在各个进程之间必须协同合作,相互配合,使各个进程按一定的速度执行,以共同完成某一项任务。同步:合作。 互斥:竞争。如何实现A先执行,然后B执行?A;V(S);进程P1P(S);

B;进程P2配对先后S初始值为0….A(先);….进程P1信号量S初始值为??….B(后);….进程P2while(计算未完成){

得到一个计算结果;

将数据送到缓冲区;}Computewhile(打印未完成){

从缓冲区中取一数据;

打印该数据;}Print3.1.4进程同步两合作进程共享一个缓冲区,工作流程如图:计算下一数据从buf

取数据数据送buf打印图:两进程共享单缓冲区工作流程ABAB3.1.4进程同步

计算进程A计算数据并将结果放入缓冲区buf中去,打印进程则从缓冲区buf中取出数据来打印,如图3.12。图3.12:计算进程和打印进程使用单缓冲区情况

缓冲区打印进程计算进程BA计算下一个数据Wait(SA)数据送入缓冲区Signal(SB)Wait(SB)Signal(SA)从缓冲区取出数据打印该数据SA=1SB=0图3.13:单缓冲区打印数据

因资源个数为1,所以在进程同步的同时也已实现互斥,故不设互斥信号量,于是合作进程A,B间的同步可描述如图3.13:

如果将缓冲区空时看作一种资源SA,而将缓冲区满时看作另一种资源SB.则对A进程需要SA,释放SB.而对B进程需要SB,释放SA.3.1.5记录型信号量Wait(S):whileS≤0dono-op

S∶=S-1;

Signal(S):S∶=S+1;

整数型信号量的P、V操作,含有循序执行空操作浪费CPU资源。信号量结构体类型的定义typedefstruct

{intvalue; //

计数变量

ListL//listofprocess;

}semaphore;3.1.5记录型信号量Wait原语:申请一个资源semaphoreS;ProcedureWait(S)beginS.value=S.value-1;If(S.value<0)thenblock(S.L);endSignal原语:释放一个资源semaphoreS;ProcedureSignal(S)beginS.value=S.value+1;If(S.value<=0)thenwakeup(S.L);end入口sem=sem-1S<0?调用阻塞进程入等待队列转进程调度是返回(a)P原语操作功能入口sem=sem+1S≤0?是唤醒等待队列中的一个进程返回或转进程调度否返回(b)V原语操作功能图3-5P、V操作的流程图3.1.5记录型信号量否semaphoreSR1=1,SR2=1;ParbeginP1:BeginRepeateWait(SR1);……..aWait(SR2);……..bP1进程的临界区;Signal(SR2);Signal(SR1);Untilfalse;EndP2:BeginRepeateWait(SR2);…….cWait(SR1);…….dP2进程的临界区;Signal(SR1);Signal(SR2);Untilfalse;EndParend.3.1.6集合型信号量

semaphoreS1,S2,…,Sn;ProcedureSwait(S1,d1,S2,d2,…,Sn,dn)beginIfS1>=d1andS2>=d2and…andSn>=dnThenFori=1tonDoSi=Si-di;NextiElseblock(L);把进程送入系统的因等待资源而阻塞的

进程队列Endifend3.1.6集合型信号量

ProcedureSsignal(S1,d1,S2,d2,…,Sn,dn)beginFori=1tonDoSi=Si+di;NextiIf(L不空)ThenWakeup(l

L);唤醒L中满足条件的一个进程EndifendsemaphoreSa=1,Sb=1;ParbeginP1:BeginRepeateSwait(Sa,1,Sb,1);

P1进程的临界区;Ssignal(Sa,1,Sb,1);Untilfalse;EndP2:BeginRepeateSwait(Sa,1,Sb,1);

P2进程的临界区;Ssignal(Sa,1,Sb,1);Untilfalse;EndParend.39例题1

设系统中有两个进程P1、P2,P1进程负责计算数据,将结果放入缓冲区Buf,P2进程从缓冲区Buf中取数据输出。试写出两个进程的同步算法。40例题1

semaphorebe=1,bf=0;ParbeginP1:BeginRepeate

计算数据Data;Wait(be);Data=>Buf;Signal(bf);Untilfalse;EndP2:BeginRepeateWait(bf);

取Data;Signal(be);Untilfalse;EndParend.41例题2

42例题2

semaphorea=0,b=0,c=0,d=0,e=0,f=0,g=0;ParbeginBeginS1;Signal(a);Signal(b);EndBeginWait(a);S2;Signal(c);Signal(d);EndBeginWait(b);S3;Signal(e);EndBeginWait(c);S4;Signal(f);EndBeginWait(d);S5;Signal(g);EndBeginWait(e);Wait(f);Wait(g);S6;EndParend.3.2经典的进程同步问题3.2.1生产者消费者问题

两个进程(生产者和消费者)共享一个公有的、固定大小的缓冲区,生产者不断地制造产品,并把它放入缓冲区,而消费者不断地把产品取出来,并且使用它。要求这两个进程相互协调,正确地完成各自的工作。12345678生产者生产—消费者问题消费方向生产方向消费者3.2经典的进程同步问题3.2.1生产者消费者问题

3.2经典的进程同步问题3.2.1生产者消费者问题

问题分析对于生产者进程:制造一个产品,当要送入缓冲区

时,要检查缓冲区是否有空位,若是,才可将产品

送入缓冲区,并在必要时通知消费者;否则等待;对于消费者进程:当它去取产品时,先要检查缓冲

区中是否有产品可取,若有,则取走一个,并在必

要时通知生产者;否则等待。这种相互等待,并互通信息就是典型的进程同步。同时,缓冲区是个临界资源,因此,各个进程在

使用缓冲区的时候,还有一个互斥的问题。3.2.1生产者消费者问题

semaphoreempty=n,full=0;itembuffer[0,…,n-1];integerin=0,out=0;parbeginproceducer:beginrepeatitem=produce_item();wait(empty);buffer(in)=item;in=(in+1)modn;signal(full);untilfalse;endconsumer:beginrepeatwait(full);item=buffer(out);out=(out+1)modn;signal(empty);consumertheitem;untilfalse;endparend49生产者-消费者问题semaphoreempty=n,full=0;itembuffer[0,…,n-1];integerin=0,out=0;parbeginproceducer:beginrepeatitem=produce_item();wait(empty);buffer(in)=item;in=(in+1)modn;signal(full);untilfalse;endsemaphoremutex=1;

signal(mutex);

wait(mutex);50生产者-消费者问题consumer:beginrepeatwait(full);item=buffer(out);out=(out+1)modn;signal(empty);consumertheitem;untilfalse;endparend

wait(mutex);

signal(mutex);3.2.2读者写者问题

3.2.2读者写者问题

(1)

任意多个读进程可以同时读这个文件;

(2)

一次只有一个写进程可以往文件中写;

(3)

如果一个写进程正在进行操作,禁止任何读进程度文件。3.2.2读者写者问题

写者进程读者进程写者进程互斥互斥读者进程互斥不互斥54semaphorewrt=1;integerreadcount=0;parbegin

parend

Writer:begin

repeatwait(wrt);

performwriteoperation;

signal(wrt);untilfalse;endReader:begin

repeatifreadcount=0thenwait(wrt);readcount++;

performreadoperation;Readcount--;ifreadcount=0thensignal(wrt);untilfalse;end55读者-写者问题Reader:beginrepeat

ifreadcount=0thenwait(wrt);readcount++;

performreadoperation;

Readcount--;ifreadcount=0then

signal(wrt);untilfalse;end

wait(mutex);

signal(mutex);

wait(mutex);

signal(mutex);semaphoremutex=1;3.2.3哲学家问题

semaphorechopstick[0…4];beginfor(i=0to4)chopstick[i]=1;nextiendparbeginrepeat think;wait(chopstick[i]); wait(chopstick[(i+1)mod5]); eat;signal(chopstick[i]); signal(chopstick[(i+1)mod5]);untilfalse;parend

可采取以下几种解决方法:

(1)至多只允许有四位哲学家同时去拿左边的筷子,最终能保证至少有一位哲学家能够进餐,并在用毕时能释放出他用过的两只筷子,从而使更多的哲学家能够进餐。

(2)仅当哲学家的左、右两只筷子均可用时,才允许他拿起筷子进餐。

(3)规定奇数号哲学家先拿他左边的筷子,然后再去拿右边的筷子;而偶数号哲学家则相反。按此规定,将是1、2号哲学家竞争1号筷子;3、4号哲学家竞争3号筷子。即五位哲学家都先竞争奇数号筷子,获得后,再去竞争偶数号筷子,最后总会有一位哲学家能获得两只筷子而进餐。3.2.3哲学家问题

semaphorechopstick[0…4];beginfor(i=0to4)chopstick[i]=1;nextiendparbeginrepeat

think;Swait(chopstick[i],1,chopstick[(i+1)mod5],1);

eat;Ssignal(chopstick[i],1,chopstick[(i+1)mod5],1);untilfalse;parend3.3死锁3.3.1死锁的基本概念

先看例题

假设系统中有进程P1、进程P2,有资源R1、资源R2,进程P1、P2都需要使用资源R1、资源R2。进程P1、P2的同步算法semaphoreSR1=1,SR2=1;ParbeginP1:BeginRepeateWait(SR1);……..aWait(SR2);……..bP1进程的临界区;Signal(SR2);Signal(SR1);Untilfalse;EndP2:BeginRepeateWait(SR2);…….cWait(SR1);…….dP2进程的临界区;Signal(SR1);Signal(SR2);Untilfalse;EndParend.【例】过桥问题交通规则:车辆靠右行驶!3.3死锁3.3.1死锁的基本概念

3.3死锁3.3.1死锁的基本概念

死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力推动,它们都将无法推进下去,此时称系统处于死锁状态或者说系统产生了死锁。3.3死锁3.3.2死锁的产生的原因

1)资源不够,资源的数量不是足够多,不能同时满足所有进程提出的资源申请,这就造成了资源的竞争,而且资源的使用不允许剥夺。2)进程的推进不当,进程的推进次序影响系统对资源的使用。比如,上述的P1、P2进程,如果让P1进程申请R1资源,再申请R2资源,然后P2申请R2,可能这时P2暂时因得不到资源而阻塞,但P1进程需要的资源都已满足,P1进程会使用资源结束,释放资源并唤醒P2进程。这样的推进方式就不会死锁了。进程推进次序

663.1.2资源(resources)

资源可以分为两大类:可抢占的(preemptable)

和不可抢占的(nonpreemptable)。

可抢占的资源:当一个进程正在使用这种类型

的资源时,可以把它拿走而不会对该进程造成

任何不良的影响。例如:CPU、内存。不可抢占的资源:当一个进程正在使用这种类

型的资源时,如果强行把它拿走,将会导致该

进程运行失败。例如:光盘刻录机。死锁主要由不可抢占资源引起。3.3死锁3.3.3产生死锁的必要条件

互斥条件:在任何时刻,每一个资源最多只能被

一个进程所使用;请求和保持条件:进程在占用若干个资源的同时

又可以请求新的资源;不可抢占条件:进程已经占用的资源,不会被强

制性拿走,而必须由该进程主动释放;环路等待条件:存在一条由两个或多个进程所组

成的环路链,其中每一个进程都在等待环路链中

下一个进程所占用的资源。3.3死锁3.3.4银行家算法

怎样能避免死锁呢??3.3.4银行家算法安全状态所谓安全状态,是指系统能按某种进程顺序(P1,P2,…,Pn)(称〈P1,P2,…,Pn〉序列为安全序列),来为每个进程Pi分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可顺利地完成。如果系统能找到这样一个安全序列,则称系统处于安全状态。如果系统无法找到这样一个安全序列,则称系统处于不安全状态。3.3.4银行家算法示例:

系统中有三个进程P1、P2和P3,共有12台磁带机。进程P1总共要求10台磁带机,P2和P3分别要求4台和9台。假设在T0时刻,进程P1、P2和P3已分别获得5台、2台和2台磁带机,尚有3台空闲未分配。现在的状态是安全状态吗?进程最大需求已分配可用P1P2P31049522371银行家算法

一个银行家,手里有100万元的资金,他看中三个投资项目,这三个投资项目所需资金分别是60万、30万、70万。这三个项目的总投资160万元,三个项目的启动资金分别是20万、20万、30万。项目号需求总资金已获得资金还需要资金银行家剩余资金12360307020203040104030当前的资金投入是安全的72银行家算法

在当前状态下如果项目1提出申请资金20万,银行家是否批准呢?项目号需求总资金已获得资金还需要资金银行家剩余资金12360307020203040104030当前的资金投入也是安全的,可以批准40201073银行家算法

这时项目3提出5万元的资金要求,银行家是否同意呢?项目号需求总资金已获得资金还需要资金银行家剩余资金12360307040203020104010资金状态变成不安全状态,不予批准!!353553.3.4银行家算法

银行家的做法就是判断系统的安全性,动态地决定资源的分配。

银行家算法是一种代表性的避免死锁的算法。它允许进程动态地申请资源,系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则不分配。75银行家算法1.银行家算法中的数据结构

(1)可利用资源向量Available。这是一个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态地改变。如果Available[j]=K,则表示系统中现有Rj类资源K个。

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

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

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

2.银行家算法

设Requesti是进程Pi的请求向量,如果Requesti[j]=K,表示进程Pi需要K个Rj类型的资源。当Pi发出资源请求后,系统按下述步骤进行检查:

(1)如果Requesti[j]≤Need[i,j],便转向步骤2;否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。

(2)如果Requesti[j]≤Available[j],便转向步骤(3);否则,表示尚无足够资源,Pi须等待。

(3)系统试探着把资源分配给进程Pi,并修改下面数据结构中的数值:

Available[j]∶=Available[j]-Requesti[j];Allocation[i,j]∶=Allocation[i,j]+Requesti[j];Need[i,j]∶=Need[i,j]-Requesti[j];

(4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。若安全,才正式将资源分配给进程Pi,以完成本次分配;否则,将本次的试探分配作废,恢复原来的资源分配状态,让进程Pi等待。

假定系统中有五个进程{P0,P1,P2,P3,P4}和三类资源{A,B,C},各种资源的数量分别为10、5、7,在T0时刻的资源分配情况如图所示。银行家算法举例资源情况进程MaxAllocationNeedAvailableABCABCABCABCP0852110742233P1322200122

P2802301501

P3223211012

P4433002431

系统中存在一个安全序列(P1,P3,P4,P2,P0),所以它是安全的银行家算法举例系统中存在一个安全序列(P1,P3,P4,P2,P0),所以它是安全的资源情况进程WorkNeedAllocationWork+Allocation

FinishABCABCABCABCP1233122200433trueP3433012211644trueP4644431002646trueP2646501301947trueP09477231101057true

P1发出请求向量Request1(1,0,2)银行家算法举例资源情况进程MaxAllocationNeedAvailableABCABCABCABCP0852110742233P1322200122

P2802301501

P3223211012

P4433002431

302020131银行家算法举例系统中还存在安全序列(P1,P3,P4,P2,P0),所以它是安全的资源情况进程WorkNeedAllocationWork+Allocation

FinishABCABCABCABCP1233122200433trueP3433012211644trueP4644431002646trueP2646501301947trueP09477231101057true

P4发出请求向量Request4(1,2,0)银行家算法举例资源情况进程MaxAllocationNeedAvailableABCABCABCABCP0852110742131P1322302020

P2802301501

P3223211012

P4433002431

122311011系统中不存在存在安全序列,是不安全的,不予分配!!3.安全性算法(1)设置两个向量:①工作向量Work:它表示系统可提供给进程继续运行所需的各类资源数目,它含有m个元素,在执行安全算法开始时,Work∶=Available;②Finish:它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finish[i]∶=false;当有足够资源分配给进程时,再令Finish[i]∶=true。

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

①Finish[i]=false;②Need[i,j]≤Work[j];

若找到,执行步骤(3),否则,执行步骤(4)。

(3)当进程Pi获得资源后,可顺利执行,直至完成,

并释放出分配给它的资源,故应执行:

Work[j]:=Work[i]+Allocation[i,j];Finish[i]:=true;

gotostep2;(4)如果所有进程的Finish[i]=true都满足,则表示系统处于安全状态;否则,系统处于不安全状态。86死锁的检测与解除1.资源分配图(ResourceAllocationGraph)1)一组进程结点P={p1,p2,…,pn}和一组资源结点R={r1,r2,…,rn},N是节点的集合,N=PUR。即:N={p1,p2,…,pn}U{r1,r2,…,rn}。2)E是有向边的集合,e∈E,e连接着P中的一个结点和R中的一个结点,e={pi,rj}是资源请求边,由进程pi指向资源rj,表示进程pi请求一个单位的rj资源。e={rj,pi}是资源分配边,由资源rj指向进程pi,它表示把一个单位的资源rj分配给进程pi。

87进程:资源(方框内的圆点表示资源个数):进程P正占用R类型的一个资源:

进程P请求R类型的资源未果,被阻塞:P••PRR••••88死锁的检测与解除P1P2R1R289死锁的检测与解除2.资源分配图化简P1P2R1R290资源分配图示例死锁一种类型的资源有多个91有无死锁?死锁无死锁92死锁的检测与解除3.死锁定理

如果资源分配图是可完全化简的,则系统是安全的,如果资源分配图是不可化简的,则系统处于不安全状态,会发生死锁。93死锁的检测

(1)可用资源向量Available,表示了m类资源中每一类资源的可用数目。

(2)把不占用资源的进程(向量Allocation∶=0)记入L表中,即Li∪L。

(3)从进程集合中找到一个Requesti≤Work的进程,做如下处理:①将其资源分配图简化,释放出资源,增加工作向量Work∶=Work+Allocationi。②将它记入L表中。

(4)若不能把所有进程都记入L表中,便表明系统状态S的资源分配图是不可完全简化的。该系统状态将发生死锁。94死锁的检测Work:=Available;L:={Li|Allocationi=0∩Requesti=0}forallLi∈LdobeginforallRequesti≤WorkdobeginWork:=Work+Allocationi;Li∪L;endenddeadlock:=¬(L={p1,p2,…,pn});95死锁解除

1)剥夺法恢复

将某些资源从其它进程强占过来分配给另一些进程。要求强占不影响原进程恢复后的执行。与资源的属性有关,难实现。2)撤销进程

这是常用的解除死锁的方法,从系统中撤消某些进程,释放资源以解除死锁。要求保证系统的数据等的一致性,难于判断。3)回退法恢复

系统执行过程中设置若干断点,并保存现场。采用回滚方式释放资源以解除死锁。要求保护的现场不能频繁覆盖。963.4

管程1.管程的定义

管程由三部分组成:

①局部于管程的共享变量说明;

②对该数据结构进行操作的一组过程;

③对局

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论