收藏 分享(赏)

4.7 进程同步习题1.ppt

上传人:gnk289057 文档编号:8288981 上传时间:2019-06-18 格式:PPT 页数:65 大小:234.50KB
下载 相关 举报
4.7 进程同步习题1.ppt_第1页
第1页 / 共65页
4.7 进程同步习题1.ppt_第2页
第2页 / 共65页
4.7 进程同步习题1.ppt_第3页
第3页 / 共65页
4.7 进程同步习题1.ppt_第4页
第4页 / 共65页
4.7 进程同步习题1.ppt_第5页
第5页 / 共65页
点击查看更多>>
资源描述

1、第4章 进程同步习题,【例】当两个进程合作完成一个任务,在并发执行中,一个进程要等待其合作伙伴发来消息,或者建立某个条件后再向前执行,这种制约性合作关系被称为进程( )。 A 调度 B 执行 C 同步 D 互斥 【答案】C,【例】信号量被定义为一个整型变量,其初始值是() A 0 B 无任何闲置 C 负整数 D 非负数 【解答】D,【例】信号量被定义为一个整型变量,其初始值是( )。 A 0 B 无任何限制 C 负整数 D 非负数 【答案】D,【例】并发进程间的关系可以是_的,也可以是有_的 【答案】无关,交往,【例】在用PV操作实现同步时,一定要根据具体的问题来定义_和调用_ 【答案】信号量

2、;P操作或V操作,【例】进程的同步和互斥反映了进程间()和()的关系 【解答】直接制约 间接制约 【解析】进程的同步是指异步环境下的并发进程因直接制约而互相发送消息,进行相互合作,相互等待,使得各进程按一定的速度执行的过程 进程的互斥是由并发进程同时共享公有资源而造成的对并发进程执行速度的间接制约,【例】同步信号量的初值一般为1 【解答】错误 互斥信号量的初值一般为1; 同步信号量的初值应视具体情况而定,【例】生产者和消费者问题是一个既有同步又有互斥的问题。 【答案】对,【例】单道程序系统中程序的执行也需要同步和互斥。 【解答】错 单道程序系统不具有并发性,因此不需要同步和互斥。,【例】由于P

3、V操作描述同步,互斥等问题的能力不足,所以有必要引入其他的通信原语或机制,如Send,Receive或Monitor等() 【分析】整型信号量是进程同步工具。在长期广泛的应用中,信号量机制得到了很大的发展,它是从整型信号量发展,经记录型信号量,发展为”信号量集“机制。但并不是因为PV操作的描述能力不足,进程通信工具来说效率低,同时在实现过程中增加了编程的复杂性,不注意会造成死锁。所以为了更容易用户的实现,引入管程和高级进程通信机制 错,PV操作充分描述同步互斥等问题,【例】为什么说互斥也是一种同步? 【解答】互斥指的是某种资源一次只允许一个进程使用,即你在使用的时候我不能使用;我在使用的时候你

4、不能使用。这就是一种协调,一种步伐上的一致,因此也就是一种同步。 但是,为了求解实际问题,将“同步”和“互斥”加以区别是有好处的,因为两种问题的求解方法是不同的。,【例】进程之间存在哪些相互制约关系?各是什么原因引起的?下列活动分别属于哪些制约关系?1 若干同学去图书馆借书2 两队举行篮球比赛3 流水线生产的各道工序4 商品生产和消费,【解答】 进程间存在两种相互制约关系:直接制约关系(即同步问题)和间接制约关系(即互斥问题)。同步问题是存在逻辑关系的进程之间相互等待所发生的制约关系,互斥问题是相互无逻辑关系的进程间竞争相同资源所发生的制约关系。 1 属于互斥关系。因为书的个数是有限的,一本书

5、只能借给一个同学。 2 属于互斥关系。篮球只有一个,两队都要争夺 3 属于同步关系。各道工序的开始都依赖前道工序的完成。 4 属于同步关系,商品没有生产出来,消费者无法进行,商品未消费完,生产者也无需进行。,【例】使用多道进程计算Y=F1(X)+F2(X) 【分析】 1 确定并发和顺序操作 F1(X)和F2(X)的计算可以并行处理,可以出现在两个进程中 2 确定互斥或同步 F1(X)+F2(X)必须在F1(X)和F2(X)计算完毕,才能进行加法计算,因此为同步问题,3 同步的操作流程 进程main创建进程p1,来计算F1(X) (1)创建进程p2,来计算F2(X) (2)F1(X)计算是否完成

6、?没有,等待F2(X)计算是否完成?没有,等待进行加法运算 进程p1y1=F1(X)设置F1(X)计算完成标志 (3) 进程p2y1=F2(X) (4)设置F2(X)计算完成标志,4 确定信号量的个数和含义根据上面的同步规则和操作流程确定信号量的个数是2,S1,S2S1:F1(X)计算是否完成S2:F2(X)计算是否完成 5 确定信号量的初值因为开始F1(X),F(X)都没有完成,信号量为:S1=0S2=0 6 (1)P(S1)(2)P(S2)(3)V(S1)(4)V(S2),【例】一个buffer,一个生产者,一个消费者,生产者只生产一个东西,消费者只进行一次消费,即:生产者只进行一次put

7、data操作,消费者只进行一次getdata操作。,【解答】 设置信号量full,表示buffer是否有数据,初值为0 生产者 消费者putdata P(full)V(full) getdata,【例】一个buffer,一个生产者,一个消费者,生产者不断进行putdata操作,消费者不断进行getdata操作,即生产者不断生产,消费者不断消费。 【解答】buffer为空时,才能进行putdata操作,只有buffer有数据时,才能进行getdata操作 信号量full:是否有数据初值为0empty:是否为空,初值为1,生产者: repeatP(empty)putdataV(full),消费者:

8、 repeatP(full)getdataV(empty),【例】一个buffer,多个生产者,多个消费者,多个生产者和消费者都在不断地存取buffer,即生产者不断地进行putdata操作,消费者不断进行getdata操作。 【解答】 只有buffer为空时能进行putdata操作,只有buffer有数据时能进行putdata操作。不允许多个进程同时操作buffer,即不允许多个消费者同时进行getdata,不允许多个生产者进行putdata操作 信号量full:buffer是否有数据,初值为0empty:buffer是否为空,初值为1mutex:buffer是否可操作,初值为1,生产者i

9、repeatP(empty)P(mutex)putdataV(mutex)V(full),消费者i repeatP(full)P(mutex)getdataV(mutex)V(empty),【例】多个生产者,多个消费者,N个buffer,多次循环存取buffer,即多个生产者不断进行putdata操作,多个消费者不断进行getdata操作 【解答】 只有buffer有空间时才能进行putdata操作 只有buffer有数据时才能进行getdata操作 不允许多个消费者和多个生产者同时操作 信号量full:表示buffer是否有数据,初值为0empty:表示buffer是否为空,初值为nmute

10、x:表示buffer是否可操作,初值为1,生产者irepeatP(empty)P(mutex)putdataV(mutex)V(full),消费者jrepeatP(full)P(mutex)putdataV(mutex)V(empty),【改进】putdata和getdata操作都在临界区中,因此多个进程对多个buffer的操作不能并行进行的,进程间并行操作的程度很低。实际上只要保证多个进程同时操作不同buffer就可以实现对整个buffer的并行操作。getEBuffer()返回空的buffer号getEBuffer()return (pbuffer+1)mod n getDBuffer()

11、返回有数据的buffer号getDBuffer()return (pdata+1)mod n,semaphore mutex,empty,full=1,n,0integer pbuff,pdata=0,0生产者i 消费者jrepeat repeatP(empty) P(full)P(mutex) P(mutex)in=getEBuffer() out=getDBuffer()V(mutex) V(mutex)putdata(in) getdata(out)V(full) V(empty),【练习】如下是生产者消费者问题的一种写法 1 写出Producer进程和Consumer进程各自的临界区

12、2 给出解决临界区互斥问题的一种方法,var counter:0nbuffer:array1n-1 of itemproducerl1:produce an item in nextp;buffin:=nextp;in:=(in+1)mod n;counter:=counter+1;go to l1,consumerl2:while conter=0 do no-opnextc=bufferoutout:=(out+1) mod ncounter=counter-1consumer the item in nextcgoto l2,【解答】临界资源可以是硬件资源,也可以是软件资源,如变量。本题

13、生产者和消费者都共享变量counter,因此应将此变量作为临界资源,否则并发进程执行时,可能发生不可再现性,不同次执行会得到不同的执行结果 1 Producer进程的临界区为buffin=nextp;in =(in+1) mod n;counter=conter+1; Consumer进程的临界区为while counter=0 do no-opnextc=bufferoutout=(out+1) mod ncount=count-1,2 解决临界区互斥问题的一种方法是设置一个信号量S,S的初值为1,在每个临界区前面执行P(S)操作,在每个临界之后执行V(S)操作,【练习】如图,有多个PUT操

14、作同时向Buff1放数据,有一个MOVE操作不断地将Buff1的数据移到Buff2,有多个GET操作不断地从Buff2中将数据取走。Buff1的容量是m,Buff2的容量是n,PUT,MOVE,GET每次操作一个数据,在操作的过程中要保证数据不丢失。试用P,V原语协调PUT,MOVE操作,并说明每个信号量的含义和初值。,Buff1,Buff2,MOVE,PUT,GET,【解答】三类进程:多个PUT类进程,一个MOVE类进程,多个GET类进程 操作规则 1 只有buff1有空间才能进行PUT操作 2 只有buff1有数据,buff2有空间才能进行MOVE操作 3 只有buff2有数据才能进行GE

15、T操作 4 不允许多个进程同时操作buff1 5 不允许多个进程同时操作buff2,操作流程repeat判断buff1是否有空间,没有则等待是否可操作buff1PUT设置buff1可操作标志设置buff1有数据的标志until false,repeat判断buff1是否有数据,没有则等待判断buff2是否有空间,没有则等待是否可操作buff1是否可操作buff2MOVE设置buff1可操作标志设置buff2可操作标志设置buff1有空间标志设置buff2有空间标志,repeat判断buff2是否有数据,没有则等待是否可操作buff2GET设置buff1可操作标志设置buff1有空间标志,4 信

16、号量设置6个信号量full1:buff1是否有数据,初值为0empty1:buff1有空间,初值为mmutex1:buff1是否可操作,初值为1full2:buff2是否有数据,初值为0empty2:buff2有空间,初值为nmutex2:buff2是否可操作,初值为1,5 PV操作实现repeatp(empty1);/判断buff1是否有空间,没有则等待p(mutex1);/是否可操作buff1PUT;v(mutex1);/设置buff1可操作标志v(full);/设置buff1有数据标志,repeatP(full1);判断buff1是否有数据,没有则等待P(empty2);/判断buff2

17、是否有空间,没有则等待P(mutex1);/是否可操作buff1P(mutex2);/是否可操作buff2MOVE;V(mutex1);/设置buff1可操作标志V(mutex2);/设置buff2可操作标志V(empty1);/设置buff1有空间标志V(full2);/设置buff2有数据标志,repeatP(empty2);/判断buff2是否有空间,没有则等待P(mutex2);/是否可操作buff2GETV(mutex2);/设置buff2可操作标记V(full2);/设置buff2有数据标记,【例】现有4个进程R1,R2,W1,W2。它们共享可以存放一个数据的缓冲器B。进程R1每次

18、把磁盘上读出的一个数据存到缓冲器B中,供进程W1打印输出;进程R2每次从键盘上读一个数据存放到缓冲器B,供W2打印输出。当一个进程把数据存放到缓冲器后,在该数据还没有打印输出之前不准任何进程再向缓冲器中存数据。当一个进程已把缓冲器中的数据打印输出后,在缓冲器中还没有存入新数据之前不准任何进程再从缓冲器中取数打印。问怎样用PV操作使这4个进程并发执行时能相互协作地工作?,R1,R2,W1,W2,【解答】4个进程互斥,R1,W1同步,R2,W2同步mutex:表示能否把数据存如缓冲器,初始化时缓冲器为空,故初值为1S1:进程R1是否已向缓冲器存入一个数据,初值为0S2:进程R2是否已向缓冲器存入一

19、个数据,初值为0,semaphore mutex,s1,s2s=1;s2=0;s2=0;process R1beginL1:从磁盘上读数据送x1;P(mutex);B=x1;V(s1);goto L1end;,process W1beginL3:P(s1);y=B;V(mutex);打印ygoto L3end;,process R2beginL2:从键盘上读数据送x2;P(mutex);B=x2;V(s2);goto L2end;,process W2beginL4:P(s2);z=B;V(mutex);打印z;goto L4end;,【例】假定有3个进程R,W1,W2共享一个缓冲器,而B中每

20、次只能存放一个数,当缓冲器中无数时,进程R可将M输入设备上读入的数存放到缓存器B中,若存放到缓存器中的是奇数,则允许进程W1将其取出打印;若存放到缓冲器中的是偶数,则允许进程W2将取出打印。同时规定:进程R必须等缓冲器中的数被取出打印后才能再存放一个数;进程W1或W2对每次存入缓冲器中的数只能打印一次;W1和W2都不能从空的缓冲器中取数。写出这3个并发进程能正确工作的程序。,【分析】把进程R看作是生产者,把进程W1和W2看作是消费者。现在有一个生产者(进程R)能生产不同的产品(读入奇数或偶数),把生产的产品存放在缓冲器B中,供不同的消费者(进程W1和进程W2)取用。可以看出,当进程R读入的是整

21、数,则要把有奇数的消息发送给进程W1;当进程R读入的是偶数,则要把有偶数的消息发送给W2,在进程W1或进程W2从缓冲器中取出数后,应把缓冲器中又可有一个数的消息告诉进程R,于是,可以定义如下3个信号量: mutex表示是否可以把数存入缓冲器,由于缓冲器中每次只能放一个数,所以其初值取为”1“ SO:表示缓冲器中是否有奇数,初值为”0“,表示无奇数 SE:表示缓冲器是否偶数,初值为0,表示无偶数,【解答】 B:integer;S,SO,SE semaphore; S=1;SO=0;SE=0;,Process RX:integer;L1:从输入设备读一个数X=读入的数P(mutex)B=Xif B

22、=偶数 then V(SO)else V(SE)goto L1,Process W1Y:integer;L2:P(SO);Y=BV(mutex);打印Y中数goto L2,Process W2Z:integer;L3:P(SE);Z=BV(mutex);打印Z中数goto L3,【例】进程P1使用缓冲区buffer向进程P2,P3,P4发送消息,要求每当P1向buffer中发消息时,只有当P2,P3,P4进程都读取这条消息后才可再向buffer中发送消息。利用PV原语描述进程的动作序列,P1,buffer,P2,P3,P4,【解答】设置信号量初值S1=S2=S3=0,S=3 进程P1 进程P2

23、 进程P3 进程P4 P(S) P(S1) P(S2) P(S3) P(S) 读消息 读消息 读消息 P(S) V(S) V(S) V(S) 发送消息 Buffer V(S1) V(S2) V(S3),【例】当进程X和进程Y共享某个资源r,进程并发执行时的程序如下: semaphore=1 Process X Process YL1:P(S) L2:P(S)使用资源r 使用资源rV(S) V(S)goto L1 goto L2,请回答: 1 两个进程并发执行时,能否保证互斥使用资源?为什么? 2 若要使两个进程交替使用资源,仍使用PV操作来进行管理,写出应定义的信号量机器初值 3 修改上述程序

24、,使两个进程能交替使用资源r,【解答】 1 能保证互斥使用资源。因为在两个进程中,“使用资源r”都是作为临界区,由P(S)和V(S)操作保证互斥执行,S的初值定义为1,符合要求。 2 要使两个进程交替使用资源,仅仅保证互斥使用是不够的,必须要两个进程相互等待互相通知。为此,必须定义新的信号量。定义两个私有信号量S1和S2。假定进程X先使用资源,那么进程X的私有信号量S1的初值定义为1,进程Y的私有信号量S2的初值为0.轮流使用可以保证互斥,因此信号量S可以不要。,3 两个进程可以改为 semaphore S1=1 semaphore S2=0 Process X Process YL1:P(s

25、1) L2:P(S2)使用资源r 使用资源rV(S2) V(S1)goto L1 goto L2,【例】桌上有一空盘,只允许存放一个水果。爸爸可向盘中苹果,也可向盘中放橘子。儿子专等吃盘中的橘子,女儿专等吃盘中的苹果。规定当盘中空时一次只能放如一只水果供吃者取用,请用PV原语实现爸爸,儿子,女儿三个并发进程的同步。,【解答】 设置3个信号量 mutex:表示盘子是否为空,初值为1 SO:盘中是否有橘子,初值为0 SA:盘中是否有苹果,初值为0,father进程 L1:P(mutex)将水果放入盘中if(是橘子)V(SO)elseV(SA)goto L1,son进程 L2:P(SO)取橘子V(m

26、utex)吃橘子goto L2,daughter进程 L3:P(SA)取苹果V(mutex)吃苹果goto L3,【例】桌上有一只盘子,爸爸每次只能放如一只苹果,妈妈专门向盘中放橘子,一个儿子专等盘子中的橘子,一个女儿专等吃盘子中的苹果,只要盘子空则爸爸或妈妈可向盘中放一只水果,仅当盘中有自己需要的水果时,儿子或女儿可从中取出。把爸爸,妈妈,儿子,女儿看作4个进程,用PV操作进行管理使4个进程能正确并发执行,mutex:是否允许向盘子中存放水果,初值为1sp:盘中是否有苹果,初值为0so:盘中是否有橘子,初值为0,mutex,sp,so:semaphores=1;sp=0;so=0;proce

27、ss fatherL1:have an apple;P(mutex);put an apple;V(sp);goto L1,process daughterL4:P(sp);get an apple;V(mutex);eat an apple;goto L4,process motherL2:have an orange;P(mutex);put an orange;V(so);goto L2,process sonL3:P(so);get an orange;V(mutex);eat an orange;goto L3,补充:读者-写者问题,读者-写者(reader writer)问题也是一

28、个经典的并发程序设计。 有两组并发进程:读者和写者,共享文件F。要求 1 允许多个读者同时对文件执行读操作 2 只允许一个写者对文件执行写操作 3 任何写者在完成写操作前不允许其他读者或写者工作 4 写者在执行写操作前,应让已有的写者和读者全部退出,int readcount=0;/对读进程记数semaphore writeblock=1;/是否允许写的信号量semaphore mutex=1;/对计数器readcount操作的互斥信号量,process reader_iP(mutex);readcount+;if(readcount=1)P(writeblock);V(mutex);读文件P(mutex);readcount-;if(readcount=0)V(writeblock);V(mutex);,process writer_jP(writeblock);写文件V(writeblock);,读者优先:当存在读者时,写者将被延迟,只要有一个读者活跃,随后而来的读者都将被允许访问文件,导致写者长时间等待,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报