ImageVerifierCode 换一换
格式:DOCX , 页数:55 ,大小:33.15KB ,
资源ID:9018137      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9018137.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统第3章进程的同步与通信习题与解答.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

操作系统第3章进程的同步与通信习题与解答.docx

1、操作系统第3章进程的同步与通信习题与解答第3章 进程的同步与通信习题与解答3.2 例题解析例3.2.1 多道程序系统程序的执行失去了封闭性和再现性,因此多道程序的执行不需要这些特性,这种说法是否正确 ?解 这种说法不正确。可以想象,如果一个程序在多道程序系统中,在相同的输入的情况下,多次执行所得结果是不同的,有谁还敢使用这个程序?因此,多道程序的执行也需要封闭性和再现性,只不过单道程序系统的封闭性和再现性是先天固有的,多道程序系统的程序执行要想获得封闭性和再现性,需通过程序员的精心设计才能得到。所使用的方法就是同步和互斥的方法。例3.2.2 多个进程对信号量S进行了5次 P操作,2次V操作后,

2、现在信号量的值是 -3,与信号量S相关的处于阻塞状态的进程有几个?信号量的初值是多少? 解 (1) 因为S的当前值是-3,因此因为S处于阻塞状态的进程有3个;(2) 因为每进行一次P(S)操作,S的值都减1,每执行1次V操作S的值加1,故信号量的初值为-3+5-2=0;例3.2.3 如下锁的实现方法存在什么缺点?如何改进? LOCK(X) UNLOCK(X) do while X=1 ; X=0; X=1 解 存在的缺点是:当锁是关闭时,采用的是循环等待的方法,这样的等待还是要占用处理机的时间,应该采用阻塞等待的方法。 改进的锁实现如下: LOCK(X) UNLOCK(X) if X.valu

3、e=1 if not empty(X.L) insert( *, X.L); P=remove(X.L); Block (*) Wakeup(P) else X.Value=1 else X.Value=0 这里X.value是锁的值,X.L是存放由于锁X而阻塞的进程的队列。insert( *, X.L)将当前进程的进程号插入到X.L,remove(X.L)是从X.L中移出一个进程号。例3.2.4 使用多个进程计算Y=F1(X)+F2 (X).解 (1) 确定并发和顺序操作在这个问题中,F1(X)和F2 (X)的计算是可以并行处理的,因此F1(X)和F2 (X)可以分别出现在两个进程中。(2)

4、 确定互斥或同步的规则在F1(X)+F2 (X)中,必须在F1(X)和F2(X)计算完毕,才能进行加法运算,因此本问题是同步问题。(3) 同步的操作流程进程main 创立进程p1来计算F1(X); 创立进程p2来计算F2(X); F1(X)计算是否完成?没有,等待; F2(X)计算是否完成?没有,等待; 进行加法运算。进程p1y1= F1(X); 设置F1(X)计算完成标志; 进程p2 y1= F2(X); 设置F2(X)计算完成标志。 (4) 确定信号量的个数和含义根据同步规则以及操作流程确定信号量的个数是2个,S1和S2:S1含义是F1(X)计算是否完成; S2含义是F2(X)计算是否完成

5、。 (5) 确定信号量的初值S1=0;S2=0。 (6) 确定P、V操作的位置上面处是一个P操作,P(S1);上面处是一个P操作,P(S2);上面处是一个V操作,V(S1);上面处是一个V操作,V(S2)。解法1Main ( )Public y, y1, y2,. P1, P2Semaphore S1,S2 S1=0;S2=0;P1=Creat(N-F1, F1,x,);P2=Creat(N-F2, F2, x,);P(S1);P(S2);y=y1+y2;Procedure F1(x)y1= 计算1;V(S1);Procedure F2(x)y2=计算2;V(S2)解法2Main ( )Pub

6、lic y, y1, y2,. P1,xSemaphore S1 input(x);S1=0;P1=Creat(N-F1, F1,x,);Y2=F2(x);P(S1);y=y1+y2;Procedure F1(x)y1= 计算1;V(S1)采用2个进程和1个信号量来实现Y=F1(X)+F2 (X)的时候,采用的方法是父进程创立子进程,F1(X)在子进程中计算,F2 (X)在父进程中计算,因此F1(X)和F2(X)计算仍然是并发进行的。S1信号量的含义为F1(X)是否完成。改进的方法比原来的方法节约一个进程和一个信号量,但并发操作的程度并没有降低。例3.2.5 生产者消费者问题演变。情况1 一个

7、buffer,一个生产者,一个消费者,生产者只生产一个东西,消费者只进行一次消费,即:生产者只进行一次putdata操作,消费者只进行一次getdata操作。 解 这是一个同步问题,生产者和消费者分别是2个并发的进程。(1)操作规则如果buffer为空,则消费者只能等待。(2)操作流程 putdata; 设置Buffer有数据标志 V(S) 判断buffer是否有产品,没有则等待; getdata; (3) 信号量设置1个信号量full,full表示buffer是否有数据,初值为0。(4) P、V操作实现var full:semaphore:=0; buffer: array 1 of ite

8、m; begin parbegin producer: begin putdata; V(full); end consumer:begin P(full); getdata; end parend end情况2 一个buffer,一个生产者,一个消费者,生产者不断地进行putdata操作,消费者不断地进行getdata操作,即:生产者不断地生产,消费者不断地消费(1) 操作规则只有buffer为空时才能进行putdata操作;只有buffer有数据时才能进行putdata操作。(2) 操作流程 repeat判断buffer是否为空,不空则等待; putdata ; 设置buffer有数据的标

9、志; until falserepeat判断buffer是否有数据,没有数据则等待; getdata; 设置buffer为空标志;until false (3) 信号量 设置2个信号量full和empty。full表示buffer是否有数据。因为进程在初始状态时,buffer 中没有数据,故初值为0,变化范围-11。 empty表示buffer是否为空。因为进程在初始状态时,buffer为空,故初值为0初值为1,变化范围-11。(4) P、V操作实现 var full:semaphore:=0; emptyl:semaphore:=1; buffer: array 1 of item; beg

10、in parbegin producer: begin repeat P(empty); putdata; V(full); until false end consumer:begin repeat P(full); getdata; V(empty); until false. end parend end情况3 一个buffer,多个生产者,多个消费者,多个生产者和消费者都在不断地存取buffer,即生产者不断地进行putdata操作,消费者不断地进行getdata操作。(1) 操作规则只有buffer为空时才能进行putdata操作;只有buffer有数据时才能进行putdata操作。

11、这时buffer变成了临界资源,不允许多个进程同时操作buffer,即不允许多个消费者同时进行gedata,不允许多个生产者同时进行putdata操作。(2) 操作流程 repeat判断buffer是否为空,不则等待; 是否可操作buffer;putdata; 设置buffer可操作标志; 设置buffer有数据的标志; until false repeat判断buffer是否有数据,没有则等待; 是否可操作buffer;getdata ;设置buffer可操作标志; 设置buffer为空标志;until false (3) 信号量 设置3个信号量full、empty和B-M。full表示bu

12、ffer是否有数据,初值为0; empty表示buffer是否为空,初值为1; B-M 表示 buffer是否可操作,初值为1。由于buffer只有一个,full和empty可以保证对buffer的正确操作,故B-M 是多余的,可以省略。(4) P、V操作实现 repeat repeat P(empty); P(full); P(B-M); P(B-M); putdata; getdata; V(B-M); V(B-M); V(full); V(empty); until false. until false 情况4 多个生产者,多个消费者,N个buffer,多次循环存取buffer,即,即多

13、个生产者不断地进行putdata操作,多个消费者不断地进行getdata操作。(1) 操作规则只有buffer有空间才能进行putdata操作;只有buffer有数据才能进行putdata操作;这时buffer变成了临界资源,不允许多个消费者和生产者同时对同一个buffer 进行gedata和putdata操作。(2) 操作流程 repeat判断buffer是否有空间,没有则等待; 是否可操作buffer;putdata; 设置buffer可操作标志; 设置buffer有数据的标志; until false repeat判断buffer是否有数据,没有则等待; 是否可操作buffer;getd

14、ata; 设置buffer可操作标志; 设置buffer有空间标志;until false (3) 信号量 full表示buffer是否有数据,初值为0; empty表示buffer是否为空,初值为N;B-M 表示 buffer是否可操作,初值为1。(4) P、V操作实现 repeat repeat P(empty); P(full); P(B-M); P(B-M); putdata; getdata; V(B-M); V(B-M); V(full); V(empty); until false until false (5) 改进的P、V操作实现 在上述的实现中,putdata和getdat

15、a操作都在临界区中,因此多个进程对多个buffer的操作是不能并发进行的,进程间并行操作的程度很低。实际上只要保证多个进程同时操作不同buffer就可以实现对整个buffer的并行操作。因此,只要保证为不同的进程分配不同buffer,putdata和getdata操作是可以同时进行。这样互斥不是发生在对buffer的存取操作上,而是发生在对buffer的分配上,这个时间与存取buffer的时间相比是较短的,因此减少了进程处于临界区的时间。这里引入个函数:getE_buffer(),返回值是空的buffer号;getD_buffer(),返回值是有数据的buffer号。getE_buffer()

16、和getD_buffer()通过将buffer转换成循环队列的方法来实现对buffer的分配。buffer设有Pbuff,Pdata两个指针,分别指向空闲buffer和有数据buffer 的头,每进行一次getE_buffer()和getD_buffer(),Pbuff和Pdata两个指针分别向后移动一个位置。 GetE_buffer( ) c=Pbuff Pbuff=(Pbuff+1)MOD N; Return( c) getD_data( ) c=Pdata; Pdata=(pdata+1)MOD N; Return(c) 改进的程序描述如下: var mutex.empty,full:s

17、emaphore:=1,n,0; buffer: array 0,n-1 of item; Pbuff,Pdata: integer:=0,0; begin parbegin producer: begin repeat P(empty); P(B_M); in:=getE_buffer(); V(B_M) putdata(in); V(full); until false; end consumer:begin repeat P(full); P(B_M); out:=getD_buffer(); V(B_M); Getdata(out); V(empty); until false end

18、 parend end例3.2.6 设公共汽车上,司机和售票员的活动分别为:司机的活动为启动车辆,正常行车,到站停车;售票员的活动为关车门,售票,开车门。试问:(1) 在汽车不断地到站、停车、行驶过程中,司机和售票员的活动是同步关系还是互斥关系?(2) 用信号量和P、V操作实现他们间的协调操作。解(1) 确定并发和顺序操作在这个问题中,司机与售票员间是并行操作的,司机和售票员本身的操作是顺序进行的。因此司机是一个进程,售票员是一个进程,它们之间是同步关系。(2) 确定同步的规则根据一般常识,司机和售票员在车上的操作规则如下:1) 售票员操作的规则是只有司机停车后,售票员才能开门让乘客上下车;2

19、) 司机操作的规则是只有售票员关门后,司机才能启动开始行驶汽车。可见,售票员关车门后,要向司机发开车信号,司机接到开车信号后才能启动车辆。在汽车正常行驶过程中售票员售票,到站时司机停车,售票员在车停后开车门,让乘客上下车。因此司机启动车辆的动作必须与售票员的动作取得同步;售票员开车门的动作也必须同司机停车取得同步。(3)进程的操作流程 do while T关车门;设立车门已关标志;售票;是否停车?没停则等待;开车门;上下乘客; enddo do while T是否关门?没关则等待; 启动车辆;正常行车;到站停车;设立车停标志; enddo (4) 确定信号量的个数和含义根据同步规则以及操作流程

20、确定信号量的个数是2个,S1和S2。S1的含义是否关门;S2的含义是否停车。(5) 确定信号量的初值S1=0;S2=1。(6) 确定P、V操作的位置司机操作中,是否关门?没关则等待,这是一个P操作,P(S1);司机操作中,设立停车标志,这是一个V操作,V(S2);售票员操作中,是否停车?没停则等待,这是一个P操作,P(S2);售票员操作中,设立关门标志,这是一个V 操作,V(S1)。(7) P、V操作实现 int S1=0;int S2=1;main()cobegindriver(); busman(); coenddriver() do while T P(S1);启动车辆;正常行车;到站停

21、车;V(S2); busserver () do while T 关车门;V(S1);售票;P(S2);开车门;上下乘客;例3.2.7 在OS中引入管程的目的是什么?解 在OS中引入管程的目的是为了更简便、更可靠地解决进程之间的同步、互斥问题。在未引入管程之间,进程间的同步、互斥问题是由程序员处理的。例如,在临界区的前后插入P、V操作。但是,由程序员处理同步、互斥问题有可能引入种种人为的错误。管程主要是管理对共享数据的操作和使用,即把对共享数据互斥使用的控制这一任务从程序员身上,交由编译程序去处理,这样既方便了编程,又不会产生人为的同步、互斥上的错误。例3.2.8 说明管程中条件变量的含义及作

22、用。解 管程中的条件变量(类型为Condition)是供调用管程中外部过程的进程执行Wait和Signal操作将自己挂起和解挂的变量。可通过与信号量的比较来认识条件变量:(1) 信号量要赋初值而条件变量不赋初值,它只是一个队首指针;(2) 在信号量上执行P操作的进程不一定会被阻塞,而在条件变量上执行Wait操作的进程肯定被挂起;(3) 在信号量上的V操作将导致信号量值加1,若增加后的值小于等于0,则要唤醒在信号量上等待的进程,但唤醒者不受什么影响;而在条件变量上的Signal操作却有两种处理方式:P等待,直到Q离开管程,或等待另一条件;Q等待,直到P离开管程,或等待另一条件。P、Q是两个进程。

23、例3.2.9 如果信号量的初值是,现在信号量的值是 -,那么系统中的相关进程至少执行了几个(S)操作? 与信号量S相关的处于阻塞状态的进程有几个?如果要使信号量S的值大于0,应该进行怎样的操作? 解 (1) 因为每执行一次P操作S的值减1,5-(-5)=10,在这期间有可能有进程执行V操作,使S的值加1,所以至少执行了10 次P(S);(2) 5个;(3) 6个V(S) 或 5个以上。例3.2.10 如下图所示,有多个PUT操作同时向BUFF1放数据,有一个MOVE操作不断地将BUFF1的数据移到Buff2,有多个GET操作不断地从Buff2中将数据取走。BUFF1的容量为m,BUFF2的容量

24、是n, PUT、 MOVE、 GET每次操作一个数据,在操作的过程中要保证数据不丢失。试用、原语协调PUT、 MOVE的操作,并说明每个信号量的含义和初值。 图 4.2 进程操作图解(1) 确定并发的操作 本问题是把2个消费者和生产者问题综合在一起。多个PUT操作与一个MOVE操作并发进行,多个GET操作与一个MOVE操作并发进行。因此本题涉及三类进程:PUT类进程,有多个;GET类进程,有多个;MOVE类进程,有1个。(2) 操作规则1) 只有buff1有空间才能进行PUT操作;2) 只有buff1有数据,buff2有空间才能进行MOVE操作;3) 只有buff2有数据才能进行GET操作;4

25、) 不允许多个进程同时操作buff1;5) 不允许多个进程同时操作buff2。(3) 操作流程 repeat判断buff1是否有空间,没有则等待; 是否可操作buff1;PUT; 设置buff1可操作标志; 设置buff1有数据的标志; until false repeat判断buff1是否有数据,没有则等待;判断buff2是否有空间,没有则等待; 是否可操作buff1;是否可操作buff2;MOVE; 设置buff1可操作标志; 设置buff2可操作标志; 设置buff1有空间标志; 设置buff2有数据标志; until false repeat判断buff2是否有数据,没有则等待; 是否

26、可操作buff2;GET;设置buff1可操作标志; 设置buff1有空间标志;until false (4) 信号量 设置6个信号量full1、empty1、B-M1、full2、empty2、B-M2,它们的含义和初值如下:1) full1表示buff1是否有数据,初值为0;2) empty1表示buff1有空间,初值为m;3) B-M1表示buff1是否可操作,初值为1;4) Full2表示buff2是否有数据,初值为0;5) Empty2表示buff2有空间,初值为n;6) B-M2表示buff2是否可操作,初值为1;(5) P、V操作实现 repeatP(empty1); /*判断b

27、uff1是否有空间,没有则等待 */ P(B-M1); /*是否可操作buff1*/PUT; V(B-M1); /*设置buff1可操作标志 */ V(full1); /*设置buff1有数据的标志 */ until false repeatP(full1); /*判断buff1是否有数据,没有则等待*/P(empty2); /*判断buff2是否有空间,没有则等待*/ P(B-M1); /*是否可操作buff1 */P(B-M2); /*是否可操作buff2 */MOVE; V(B-M1); /*设置buff1可操作标志*/ V(B-M2); /*设置buff2可操作标志*/ V(empty

28、1); /*设置buff1有空间标志*/ V(full2); /*设置buff2有数据标志*/ until false repeatP(empty2); /*判断buff2是否有空间,没有则等待 */ P(B-M2); /*是否可操作buff2*/GET; V(B-M2); /*设置buff2可操作标志 */ V(full2); /*设置buff2有数据的标志 */ until false 例3.2.11 一售票厅只能容纳300人,当少于300人时,可以进入;否则,需在外等候。若将每一个购票者作为一个进程,请用P、V操作编程,并写出信号量的初值。解 购票者进程 P(S); 进入售票厅; 购票; 退出售票厅; V(S); 信号量的初值 S=300例3.2.12 设A、B为两个并发进程,它们共享一个临界资源,其执行临界区的算法框图如下图所示。试判断该算法是否有错?请说明理由。如果有错,请改正。S1、S1的初值为0,CSA、CSB为临界区。 A进程 B进程 图 4.3 进程操作图分析 咋一看, 好像是A进程开始未执行P操作,便直接进入临界区,以为问题出在这里。从图中可分析出A、B两进程的执行思路:A进程对临界资源操作结束后,将其

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1