孙钟秀 操作系统PPT ch3-33信号量与PV操作w.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:70 大小:4.1MB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

孙钟秀 操作系统PPT ch3-33信号量与PV操作w.ppt

孙钟秀操作系统PPTch3-33信号量与PV操作w.ppt

预览

免费试读已结束,剩余 60 页请下载文档后查看

15 金币

下载此文档

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

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

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

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

信号量与PV操作主讲教师:王慧娇1同步和同步机制生产者--消费者问题表述生产者-消费者问题算法描述(1)生产者-消费者问题算法描述(2)processconsumer(void){while(true){//无限循环if(counter==0)//缓冲区空,消费者睡眠sleep(consumer);nextc=buffer[out];//取一个产品到nextcout=(out+1)%k;//指针推进counter--;//取走一个产品,计数减1if(counter==k-1)//缓冲满了,取走一件产品并唤wakeup(producer);//醒生产者{consumetheiteminnextc};//消耗产品}}生产者和消费者进程对counter的交替执行会使其结果不唯一生产者和消费者进程的交替执行会导致进程永远等待虽然上面的生产者程序和消费者程序在分别看时都是正确的,而且两者在顺序执行时其结果也会是正确的,但若并发执行时就会出现差错,问题就在于这两个进程共享变量counter。生产者对它做加1操作,消费者对它做减1操作,这两个操作在用机器语言实现时,常可用下面的形式描述:假设counter的当前值是5。如果生产者进程先执行左列的三条机器语言语句,然后消费者进程再执行右列的三条语句,则最后共享变量counter的值仍为5;反之,如果让消费者进程先执行右列的三条语句,然后再让生产者进程执行左列的三条语句,则counter值也还是5,但是,如果按下述顺序执行:register1:=counter;(register1=5)register1:=register1+1;(register1=6)register2:=counter;(register2=5)register2:=register2-1;(register2=4)counter:=register1;(counter=6)counter:=register2;(counter=4)出现不正确的结果原因分析2信号量与PV操作信号量:一种软件资源一个进程在某一特殊点上被迫停止执行直到接收到一个对应的特殊变量值,这种特殊变量就是信号量(semaphore),复杂的进程合作需求都可以通过适当的信号结构得到满足。原语:内核中执行时不可被中断的过程P操作原语和V操作原语(wait()和signal()、up()和down())信号量方法的基本原则信号量分类整型信号量一般信号量(1)一般信号量(2)一般信号量(3)信号量的三种操作推论二元信号量(1)typedefstructbinary_semaphore{intvalue;//value取值0or1structpcb*list;};voidBP(binary_semaphore&s){if(s.value==1)s.value=0;elseW(s.list);}voidBV(binary_semaphore&s){if(s.listisempty())s.value=1;elseR(s.list);}3.信号量实现互斥互斥的实现VarA:ARRAY[1..m]OFinteger;mutex:semaphore;mutex:=1;cobeginprocessPivarXi:integer;beginL1:按旅客定票要求找到A[j];P(mutex)Xi:=A[j];ifXi>=1thenbeginXi:=Xi-1;A[j]:=Xi;V(mutex);输出一张票;end;elsebeginV(mutex);输出票已售完;end;gotoL1;end;VarA:ARRAY[1..m]OFinteger;s:ARRAY[1..m]OFsemaphore;s[j]:=1;cobeginprocessPivarXi:integer;beginL1:按旅客定票要求找到A[j];P(s[j])Xi:=A[j];ifXi>=1thenbeginXi:=Xi-1;A[j]:=Xi;V(s[j]);输出一张票;end;elsebeginV(s[j]);输出票已售完;end;gotoL1;end;coend;4.哲学家吃通心面问题(1)哲学家吃通心面问题(2)哲学家吃通心面问题(3)上述解法可能出现永远等待,有若干种办法可避免死锁:•至多允许四个哲学家同时吃;•奇数号先取左手边的叉子,偶数号先取右手边的叉子;•每个哲学家取到手边的两把叉子才吃,否则一把叉子也不取。至多允许四个哲学家同时吃;5.生产者--消费者问题