预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共174页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

操作系统原理§3.6进程同步与同步并发程序并发程序§3.6进程同步与同步§3.6进程同步与同步§3.6进程同步与同步§3.6进程同步与同步§3.6进程同步与同步getchar()§3.6进程同步与同步P1§3.6进程同步与同步§3.6进程同步与同步§3.6进程同步与同步§3.6进程同步与同步§3.6进程同步与同步§3.6进程同步与同步§3.6进程同步与同步Lock和unlock简单的加锁机制不能彻底解决互斥问题,因为当同时有几个进程调用lock[x]时,在x:=0语句执行前,可能已经有2个以上的进程由于x=1而进入临界区了。因此必须加入一些机制,保证第1步和第2步的执行具有不可分离性加锁机制虽然可以实现进程之间的互斥,但执行效率低、浪费处理机资源。因为任何进程都不能直接进入临界区,必须不停地循环检查x的值,等待锁位变为1,消耗了有价值的CPU时间。加锁机制存在不公平性,导致某些进程一直优先进入临界区,而某些进程可能一直无法进入临界区引入信号量机制—P/V操作信号量机制P原语——P(S)S:=S-1;如果S>=0,则表示有资源,该进程继续执行;如果S<0,则表示已无资源,执行原语的进程被置成阻塞状态,并使其在S信号量的队列中等待,直至其他进程在S上执行V操作释放它为止V原语——V(S)S:=S+1如果S>0,则该进程继续执行如果S<=0,说明有进程被挂起,则唤醒一阻塞进程,即从S信号量的等待队列首摘下一个PCB,将其置为就绪状态,执行V(S)者继续执行P操作可能会引起进程的阻塞,V操作不会引起本身进程状态的变化,但可能唤醒其他进程,使其从阻塞状态转变到就绪状态P/V操作都是低级通信原语,一个正在执行P/V操作的进程,不允许任何其他进程中断它的操作,这样就保证了同时只能有一个进程对信号量S施行P操作或V操作使用PV操作实现互斥的例子与分析分析:从P/V操作中可以看出在P操作中S:=S-1表示进程请求获得一个资源当信号量S>0时,S的值表示某类资源可用的数量S<0表示无资源分配给请求的进程,于是将它排在信号量S的等待队列Q中,这时S的绝对值正好等于信号量队列Q上的进程数目V操作中的S:=S+1可知进程释放了一个资源信号量机制信号量机制信号量机制生产者/消费者问题生产者/消费者问题生产者/消费者问题生产者/消费者问题生产者/消费者问题生产者/消费者问题生产者/消费者问题简单理发店问题简单理发店问题简单理发店问题简单理发店问题解:vara,b,c,d,e,f,g,h:semaphore(初值=0)parbeginbeginS1;V(a);V(b);V(c);end;beginP(a);S2;V(d);V(e);end;beginP(b);S3;V(f);end;beginP(c);P(d);S4;V(g);end;beginP(e);P(f);S5;V(h);end;beginP(g);P(h);S6;end;parend习题习题习题习题习题习题习题习题P():Whiletruedo{Getmessage;P(Pempty);P(S1);Buffer1[i]=message;i=i+1modm;V(Qfull);V(S1)}读者和写者问题读者和写者问题读者和写者问题读者和写者问题管程管程管程管程管程§3.7消息§3.7消息§3.7消息§4.3消息§4.3消息消息§3.7消息§3.8死锁§3.8死锁§3.8死锁P和Q进程有6种不同的执行路径Q获得B,然后获得A;然后释放B和A;当P恢复执行时,它可以获得全部资源Q获得B,然后获得A;P执行并阻塞在对A的请求上;Q释放B和A;当P恢复执行时,它可以获得全部资源Q获得B,然后P获得A;由于在继续执行时,Q阻塞在A上而P阻塞在B上,死锁不可避免P获得A;然后Q获得B;由于在继续执行时,Q阻塞在A上而P阻塞在B上,死锁不可避免P获得A,然后获得B;Q执行并阻塞在对B的请求上;P释放A和B;当Q恢复执行时,它可以获得全部资源P获得A,然后获得B;然后释放A和B;当Q恢复执行时,它可以获得全部资源§3.8死锁§3.8死锁§3.8死锁§3.8死锁§3.8死锁§3.8死锁§3.8死锁§3.8死锁§3.8死锁死锁不仅会发生在两个进程之间,也可能发生在多个进程之间,甚至发生在全部进程之间死锁不仅会在动态使用外部设备时发生,而且也可能在动态使用存储区、文件信息。各种缓冲区、数据库时发生,甚至在进程通信过程中发生随着计算机资源的增加,系统出现死锁现象的可能性也大大增加,死锁一旦发生,会使整个系统瘫痪而无法工作§3.8死锁死锁预防死锁预防预防占有等待条件,可以要求进程一次性地请求所有需要的资源,并且阻塞这个进程直到所有请求都同时满足——预分法,但有不足:一个进程可能被阻塞很长时间,等待填入所有的资源请求,而实际上,