当前位置:网站首页 > 云计算与后端部署 > 正文

操作系统课后题答案第五版(操作系统答案第五版答案)



1、中有色部分)A B B 有等待时间段为180rns 至200ms 间(见图中有色部分)调度执行时间ITns ,多道运行方式(非抢占式):Job2 : I1 ( 20ms )、CPU ( 20ms )、I2 ( 40 ms )B :计算(40 )、I/O( 20 )、计算(10 )c :计算(10 )、I/O ( 30 )、计算(20 )答:分别画出单道和多道运行的时间图( 1 )单道运行时间关系图答:画出三个作业并发执行的时间图:( l )最早结束的程序为B ,最后结束的程序为C 。A ,再执行B ,求出总的CPU 利用率为多少?答:程序A 执行了40 秒,其中CPU 用了25 秒。程序B 执

2、行了40 秒,其中CPU 用了15 80 化 40 CPU 利用率为40/80=50 。9、在某计算机系统中,时钟中断处理程序每次执行的时间为2ms(包括进程切换开销)。若时钟中断频率为60HZ ,试问CPU用于时钟中断处理的时间比率为多少? l/ = 花 =1.下列指令中哪些只能在核心态运行?(l)读时钟日期;(2)访管指令;(3)设时钟日期;(4)加载PSW;(5)置特殊寄存器:(6)改变存储器映象图;(7)启动I/O指令。答:( 3 ) , ( 4 ) , ( 5 ) , ( 6 ) , ( 7 ) .2 I/O繁忙型作业忙于CPU 同样原因一个进程等待CPU 就能被优先调度,故不会饥饿

3、。3 并发进程之间有什么样的相互制约关系?下列日常生活中的活动是属哪种制工序。互斥问题(2)、(4)为同步问题。4 理器不断地在进程之间交替的情况下,重新计算进程优先数的时间从何而来?进程的账上。5 若后备作业队列中等待运行的同时有三个作业J1 、J2、J3 ,已知它们各自的运行时间为a 、b、c,且满足a b c,试证明采用短作业优先算法调度能获得最小平均作业周转时间。答:采用短作业优先算法调度时,三个作业的总周转时间为:Tl = = a + ( a +b ) + ( a + b + c ) = 3a + 2b + c 若不按短作业优先算法调度,不失一般性,设调度次序为:J2 、J1 、J3

4、 。则三个作业的总周转时间为:T2=b(ba ) (ba + c ) = 3b + 2a + c 答:( l ) FCFS 调度算法答:该计算机有一个专用硬件寄存器,它始终存放指向当前运行进程的PCB 的指针。当系统中发生了一个事件,如FO 便可把运行进程的上下文保存到专用硬件寄存器指针指向的PCB 中保护起来,然后,CPU 转向中断向量表,找到设备中断处理程序入口,让专用硬件寄存器指针指向(设备)中断服务例程,于是,便可启动中断服务例程工作。14 设计一条机器指令和一种与信号量机制不同的算法,使得并发进程对共享变量的使用不会出现与时间有关的错误。解:( l )设计机器指令。设计一条如下的”测

5、试、比较和交换”三地址指令,提供了一种硬件互斥解决方案:B2该指令的功能如下:l ) C 为一个共享变量,由地址2 、即变址(B2 ) + D2 给出,(2 )(Rl )与(C )比较,(3 )如果(Rl ) = ( C )则(R3)C ,并置条件码为00 ,如果(R1 )(c )则(C )Rl ,并置条件码为01 .( 2 )编写进程访问共享变量的程序。对每个访问共享变量C 的进程,编写访问共享变量的程序段为:Rl 的值传送到R3 R3 操作(不是直接操作C )。R3 加1减1C 代表的共享资源(假定每次一个)。R( condition = 01 )loop2 ;条件码01 ,转向循环loo

6、p2 ;否则离开临界区。( 3 )程序执行说明。的共享变量。此方案认为造成共享变量C 值错误的原因在于:一个进程(Pl )在改变C 2 C 却不知道,造成了c 值结果不正确。如果有办法使本进程口1 )能知道C 值是否改变,改变的话在继承改变了的C 值的基础上,再作自己的改变操作,则就不会导致共享变量C C 值时,先把C 的值保护在Rl 中,然后,通过R3来改变共享变量C 的值。当要把新的值(即R3 内的值)送C之前,先要判断一下在本进程(P1 )工作期间是否有别的进程口2 )插进来也改变了C 的值(并发进程P1 的执行完全会造成这种情况),方法是:将扭1 )中被保护的C 的原来值,与C 的当前

7、C C(即(R3 ) 一C) ;若不相等,说明C 值在工作期间被改变过,则应该继承C 的 )一Rl )并且返回到loop2 处重新对C值计数,以此保证C值的共享变量C 值的操作的这段时间,也就是执行进程, I 晦界区”这段程序的时间。此外,在进程进入临界区之前,应等待直到C 为非。(即有资源可用)为止。( 4 )举例。假定系统中有静态分配资源磁带机共3 台,被N 个进程共享,由共享变量C 来3 P1 和P2均申请使用磁带机,执行临界区程序。进程Pl 执行临界区程序( C )R1 ;因(C)=3 ,故(R1) = 3 。loop2: ( Rl )R3 因(R1 ) = 3 ,故(R3 )当前也3

8、 。decrease R3 :申请使用磁带机,做减1 操作,故(R3 )=2.TC & S 执行”测试、比较和交换,, TC & S 指令。如果R1=(C )则(R3 )C,即(C)=2 ,并置条件码为”00, 跳出临界区程序,去使用磁带机。如果(Rl) (C) C ,说明进程P2 抢先申请了磁带机,所以,C 与保护在R1 中的值不一样了(C 的值必小于Rl 的值),应以C 的当前值为准,执行(C ) Rl ( R1 此时变为2 ) ,并置条件码为”01 ,转向foopZ 。于是伍1 ) = 2 ,跟着(R3 卜2。接着卿)减1 后应l 了。再执行TC & S 时,由于伍1 卜(C ) = 2

9、 ,会使C 变为1。r ( conditio 二01) loop2 ;算法进行调度,哪一种算法性能较好?请完成下表:完成时间 周转时带权周间 转时间12310 : 0010 : 1010 : 252 : 001 : 000 : 25平均作业周转时间=平均作业带权周转时间W =可见 HRRF 比 FIFO 要好( 1 )列出所有作业进入内存时间及结束时间。( 2 )计算平均周转时间。作业调度采用FCFS 策略,优先分配主存低地址区且不准移动已在主存的作业,在主存中的各作业平分CPU 时间现求:( l)作业被调度的先后次序?( 2)全部作业运行结束的时间?(3 )作业平均周转时间为多少?(4 )最

10、大作业周转时间为多少?l )作业调度选择的作业次序为:作业1 、作业3 、作业4、作业2 和作业5.( 2 )全部作业运行结束的时间9 : 30 。( 3 )周转时间:作业1 为30分钟、作业2 为55分钟、作业3 为40分钟、作业4为40分钟和作业5 为55分钟。( 4 )平均作业周转时间44 分钟。( 5 )最大作业周转时间为55 分钟。:oo 作业1到达,占有资源并调入主存运行。8 : 20 作业2和3同时到达,但作业2 因分不到打印机,只能在后备队列等待。作业3 资源满足,可进主存运行,并与作业1 平分CPU 时间。8 : 30作业1在8: 30结束,释放磁带与打印机。但作业2 仍不能

11、执行,因不能移动而没有30KB 的空闲区,继续等待。作业4 在8: 30到达,并进入主存执行,与作业3 分享CPU8 : 35 作业5到达,因分不到磁带/打印机,只能在后备队列等待。9 : 00 作业3运行结束,释放磁带机。此时作业2 的主存及打印机均可满足,投入运行。作业5 到达时间晚,只能等待。9 : 10 作业4运行结束,作业5 因分不到打印机,只能在后备队列继续等待。9:15巧作业2 运行结束,作业5 投入运行。9 : 30 作业全部执行结束。上题中,若允许移动己在主存中的作业,其他条件不变,现求:( l ) FIFO 算法选中作业执行的次序及作业平均周转时间?(2)SJF 算法选中作

12、业执行的次序及作业平均周转时间?1、 有三个并发进程:R 负责从输入设备读入信息块,M 负责对信息块加工处理;P 负责打印输出信息块。今提供;l )一个缓冲区,可放置K 个信息块;2 )二个缓冲区,每个可放置K 个信息块;试用信号量和P 、V 操作写出三个进程正确工作的流程。答:1 ) var B : array 0 , k-1 of item ;sread : semaPhore : = k ;smanage : semaPhore : = 0 ;swrite : semaphore : = 0 ;rptr : integer : = O ;mptr : integer : = O ;wpt

13、r :integer : = 0 ;x : itemcobeginprocess reader ; process manager ; process writer ;begin begin beginLI : read a message intox ; L2 : P ( smanage ) ; L3 : P ( swnte ) ;P ( sread ) ; x:=Bmptr; x:=Bswrite;Brptr:=x; mptr:=(mptr+1) mod k; wptr:=(wptr+1) mod k;Rptr:=(rptr+1) mod k; manage the message in

14、x; V(sread);V(smanage); Bmptr:=x; print the message in x;Goto L1; V(swrite); goto L3;End; goto L2; end;End;coend2 ) var A , B :array 0 , k -l of item ;sPut1 : semaphore:=k;SPut2: semaPhore:=k;sget1 : semaPhore : = 0 ;sget2 : semaphore : = 0 ;put1 :integer :=O ;put2:integer : = 0 ;get1 :integer :=O ;

15、get2 : integer : = O ;cobeginprocess reader ; processn manager; process Writer ;begin begin beginLl : read a message into x ; L2 : P ( sgetl ) ; L3 : P ( sgetZ ) ;P ( SPut1 ) ; x : = A get1 ; x : = B get2;A put1:=x ; get1 :(get1+1 ) mod k ; get2:=(get2 + l ) mod k ;Put1:=(put1+1) mod k; V(sput1); V(

16、sput2);V(sget1); manage the message into x; print the message in x;Goto L1; P(sput2); goto L3;Put2:=(put2+1) mod k;V(sget2);Goto L2;End;Coend2 设有n个进程共享一个互斥段,如果:( 1 )每次只允许一个进程进入互斥段;( 2 )每次最多允许m 个进程(m 簇n)同时进入互斥段。试问:所采用的信号量初值是否相同?信号量值的变化范围如何?答:所采用的互斥信号量初值不同。1 )互斥信号量初值为1 ,变化范围为-nl , 1 。当没有进程进入互斥段时,信号量值为

17、1 ;当有1 个进程进入互斥段但没有进程等待进入互斥段时,信号量值为O ;当有1 个进程进入互斥段且有一个进程等待进入互斥段时,信号量值为-1 ;最多可能有n -1 个进程等待进入互斥段,故此时信号量的值应为-(n - 1 )也就是-n+1 。2 )互斥信号量初值为m ,变化范围为-nm , m 。当没有进程进入互斥段时,信号量值为m ;当有1 个进程进入互斥段但没有进程等待进入互斥段时,信号量值为m - 1 :当有m 个进程进入互斥段且没有一个进程等待进入互斥段时,信号量值为0 :当有m 个进程进入互斥段且有一个进程等待进入互斥段时,信号量值为一l ;最多可能有n - m 个进程等待进入互斥

18、段,故此时信号量的值应为-(n-m)也就是-n+m.3 有两个优先级相同的进程P1和P2,各自执行的操作如下,信号量S1和S2初值均为0。试问Pl 、P2 并发执行后,x 、y 、z的值各为多少?P1: P2:Begin beginY:=1; x:=1;Y:=y+3; x:=x+5;V(S1); P(S1);Z:=Y+1; X:X+Y;P(s2); V(S2);Y:=z+y; z:=z+x;End end答:现对进程语句进行编号,以方便描述P1 : P2 :begin beginy : = 1 ; x :=1 ; y :=y+3 ; x :x+5 ; V(S1); P(S1);Z:Y+1 ;

19、x :XY ;P(s2); V(S2);Y:=z+y; z:=Z+X;End end 、和 是不相交语句,可以任何次序交错执行,而结果是唯一的。接着无论系统如何调度进程并发执行,当执行到语句 时,可以得到x = 10 , y =4 。按Bernstein 条件,语句的执行结果不受语句 的影响,故语句执行后得到z = 5 。最后,语句 和 并发执行,这时得到了两种结果为:语句 先执行:x =10 , y =9 , z= 150语句 先执行:x =10 , y =19 , z =15此外,还有第三种情况,语句被推迟,直至语句后再执行,于是依次执行以下三个语句:7 :二z+ X :z : = y +

20、 1 ;y : Z十y;这时z的值只可能是y 1=5 ,故y=ZY=5 + 4=9,而x = 10 。第三种情况为:x = 10 ,Y=9 , Z = 5 。4 表目,包括座号、姓名,读者离开时要注销登记信息;假如阅览室共有100 个座位。试用:l )信号量和P 、V 操作;2 )管程,来实现用户进程的同步算法。答:1 )使用信号量和P 、v 操作:var name :array l 100of A ;A = recordnumber :integer ;name:string ;endfor i : = 1 to 100 do A i .number :i;A i .name :null;m

21、utex , seatcount : semaphore ;i : integer ;mutex : = l ; seatcount : = 100 ;cobeginprocess readeri ( var readename:string ) (i=1 , 2 )P ( seatcount ) ;P (mutex ) ;for i : = 1 to 100 do i+if A i .namenull then A i .name:readername;reader get the seat number=i;/*AI.numberV ( mutex )进入阅览室,座位号i ,座下读书;P

22、( mutex ) ;Ainame:null ;V (mutex ) ;V(seatcount);离开阅览室;coend2 )使用管程操作:TYPE readbook=monitorVAR R: condition ;I,seatcount :integer;name:array l:100 of string ;DEFINE rcadercome, readerleave ;USE check , wait , signal , release ;Procedure readercome ( readername )begincheck ( IM ) ;if seatcount100 wai

23、t ( R,IM )seatcount : = seatcount + 1 ;for i=1 to 100 do i+if namei =null then namei:= readername;get the seat number = i ;release ( IM ) ;endprocedure readerleave ( readername )begincheck ( IM ) ;seatcount-;for i = 1 to 1 00 do i+if namei readername then namei:null;release ( IM ) ;endbeginseatcount

24、 : = 1OO ; name:null ;endcobeginprocess readeri ( i = 1 , 2 )beginreadercome ( readername);read the book ;readerleave ( readername);leave the readroom;endcoend.5. 在一个盒子里,混装了数量相等的黑白围棋子 现在用自动分拣系统把黑子、白子分开,设分拣系统有二个进程P1 和P2,其中P1 拣黑子。规定了一子时,必须让另一个进程去拣试写出两进程P1 和P2能并发正确执行的程序。答1:实质上是两个进程的同步问题,设信号量s1和s2分别表示可拣

25、白子和黑子,不失一般性,若令先拣白子。var S1 , S2 : semaphore;S1 : = l; S2 :=0;cobeginprocess P1beginrepeatP( S1 ) ;拣白子V ( S2 ) ;until false ;endprocess P2beginrepeatP ( S2 ) ;拣黑子V (S1 ) ;until false ;endcoend .答2:TYPE pickup-chess = MONITORVAR flag : boolean ;S-black , s-white : codition ;DEFINE pickup-black , pickup

26、-white ;USE wait,signal , check , release ;procedure pickup-black ;begincheck(IM ) ;if flag then wait(s-black,IM ) ;flag : true;pickup a black;signal(S-white,IM);release ( IM ) ;endprocedure pickup-white ;begincheck ( IM ) ;if not flag then wait(S-white,IM );flag :=false ;pickup a white ;signal ( S-

27、black,IM ) ;release ( IM ) ;endbeginflag:=true ;endmain ( ) cobeginprocess -B ( ) ;process -W ( ) ;coendprocess-B ( )beginpickup-chess.pickup-black ( ) ;other ;endprocess-W ( )beginpickup-chess.pickup-white( ) ;other ;end6 管程的同步机制使用条件变量和wait 及signal ,尝试为管程设计一种仅仅使用一个原语操作的同步机制。答:可以采用形如waituntil 条件表达式的

28、同步原语。如waituntil( numbersum + number 0时,它们的的物理意义是什么? 0 表示还有共享资源可供使用。S 阅表示共享资源正被进程使用但没有进程等待使用资源。S0表示资源已被分配完,还有进程等待使用资源。10 ( 1 )两个并发进程并发执行,其中,A 、B 、C 、D 、E 是原语,试给出可能的并发执行路径。Process P Process Qbegin beginA ; D ;B ; E ;C ; end :end ;( 2 )两个并发进程P1 和P2并发执行,它们的程序分别如下:P 1 P2repeat repeatk:=k2 ; print k ;k:=k

29、+1 ; k:=0 ;until false ; until false ;若令k的初值为5 ,让P1 先执行两个循环,然后,P1 和P2又并发执行了一个循环,写出可能的打印值,指出与时间有关的错误。答:( 1 )共有10 种交错执行的路径:A 、B 、C 、D 、E; A 、B 、D 、E 、C; A 、B 、D 、C 、E ;A 、D 、B 、E 、C; A 、D 、B 、C 、E; A 、D 、E 、B 、C ;D 、A 、B 、E 、C;D 、A 、B 、C 、E;D 、A 、E 、B 、C;D、E、A 、B 、C 。( 2 )把语句编号,以便于描述:P1 P2repeat repea

30、tk:=k2 ; printk ;k:=k+l ; k:=0 ;until false ; until false ;l ) K 的初值为5 ,故P1 执行两个循环后,K = 23 。2 )语句并发执行有以下情况: 、 、 、 ,这时的打印值为:47 、 、 、 ,这时的打印值为:23 、 、 、 ,这时的打印值为:46 、 、 、 ,这时的打印值为:46 、 、 、 ,这时的打印值为:23 、 、 、 ,这时的打印值为:23由于进程P1和P2 并发执行,共享了变量K ,故产生了结果不唯一。11 证明信号量与管程的功能是等价的:( l )用信号量实现管程;( 2 )用管程实现信号量。答:( 1

31、 )用信号量实现管程;Hoare 每一个管程都对应一个mutex ,其初值为1 ,用来控制进程互斥调用管程。再设一个初值为0 的信号量,用来阻塞等待资源的进程。相应的用信号量实现的管程库过程为:Var mutex,c:semaphore ;mutex:=1 ; c:=0 ;void enter-monitor ( ) /*进入管程代码,保证互斥P ( mutex ) ;void leave-monitor-normally ( )/*不发信号退出管程V ( mutex ) ;voidleave-with-sigal(c)/*在条件c 上发信号并退出管程,释放一个等待c 条件的进程。注意这时没有

32、开放管程,因为刚刚被释放的进程己在管程中。V ( c ) ;void wait(c) /*等待条件c ,开放管程V ( mutex ) ;P (c) ;( 2 )用管程实现信号量。TYPE semaphore=monitorVAR S ; condition ;C:integer ;DEFINE P , V ;USE check , wait , signal , release ;procedure Pbegincheck ( IM ) ;C:= C-1 :if C 0 then wait ( S,IM ) ;release ( IM ) ;endprocedure Vbegincheck

33、( IM ) :C : = C + 1 ;if C0 then signal ( S,IM ) ;release ( IM ) ;endbeginC:=初值;End.12 证明消息传递与管程的功能是等价的:( 1 )用消息传递实现管程;( 2 )用管程实现消息传递。答:( 1 )用消息传递实现管程;13(2) 11(1) ,那么,把两种方法结合起来,就可以用用消息传递实现管程。( 2 )用管程实现消息传递。TYPE mailbox=monitorVAR r , k , count:integer ;buffer :array0n-1 of message ;full , empty:condi

34、tion ;DEFINE add , get ;USE check , wait , signal , release ;procedure add ( r ) ;begincheck ( IM ) ;if count=n then wait ( full,IM ) ;buffer r:=message ;r:(r+1) mod ncount:=count + 1 ;if count = 1 then sighal ( empty , IM ) ;release ( IM ) ;endprocedure get ( m ) ;begincheck ( IM ) ;if count = 0 th

35、en wait ( empty , IM ) ;m:=buffer k ;count : = count-1 ;if countn-1 then signal ( full , IM ) ;release ( IM ) ;endbeginr:= 0 ; k:= 0 ; count:=0 ;end13 证明信号量与消息传递是等价的:( 1 )用信号量实现消息传递;( 2 )用消息传递实现信号量。答:( l )用信号量实现消息传递;1 和出队操作.2 send操作。3 )接收消息是一个出队操作,当队列存储区空时,设计另一个同步信号量阻塞receive 操作。( 2 )用消息传递实现信号量。l 还为

36、此信号量设立一个等待进程队列2 )应用进程执行P 或V操作时,将会调用相应P 库过程。库过程的功能是:P send 发送给与信号量对应的同步管理进程,之后,再执行receive 操作以接收同步管理进程的应答。3 话,执行P 操作的应用进程被阻塞,挂到等待进程队列,所以,不再要送回答消息。此后,当V 操作执行完后,同步管理进程将从信号量相应队列中选取一个进程唤醒,并回送一个应答消息。正常情况下,同步管理进程回送一个空应答消息,然后,解锁执行P 、V操作的应用程序。14 使用(1)消息传递,(2 )管程,实现生产者和消费者问题。答:(1 )见课文ch3 3.5.4 节。(2 )见课文Ch3 3.4

37、.3 节。15 试利用记录型信号量和P 操作写出一个不会出现死锁的五个哲学家进餐问题的算法。答:var forki:array 04 of semaphore ;forki:=1 ;cobeginprocess Pi /* i = 0 , 1 , 2 , 3 */beginL1 :思考:P(forki) ; / * i =4,P(fork 0) * /P(forki+1 mod 5) / * i =4P(fork 4)* /吃通心面;V (forki ;V (fork(i+1 mod 5 ) ;goto L1 ;end ;coend ;16 Dijkstra 临界区软件算法描述如下:var f

38、lag :array0n of (idle,want-in ,in_cs ) ;turn:integer ; tune:0 or 1 or or , n-1 ;process Pi(i=0,1,,n-1)var j ; integer ;beginrepeatrepeatflag i :want_in ;while turn1 doif flagturn=idle then turn:=i ;flagi:= ip_cs ;j:=0 ;while (j n ) & (j=1 or flagj in_cs )do j:=j + 1 ;until jn :critical section ;flag

39、 i:=idle ;until false ;end .试说明该算法满足临界区原则。答:为方便描述,把Dijkstra 程序的语句进行编号:repeatflagi:=want_in ;while turni do if flagtrun=idle then turn:=i ;flagi: = in_cs ;j:= O ;while(j n和mn 时,每个进程最多可以请求多少个这类资源时,使系统一定不会发生死锁?答:当mn 时,每个进程最多请求1 个这类资源时,系统一定不会发生死锁。当m n 时,如果m/n 不整除,每个进程最多可以请求”商1 ”个这类资源,否则为”商”个资源,使系统一定不会发生

40、死锁?22 N个进程共享M 个资源,每个进程一次只能申请释放一个资源,每个进程最多需要M个资源,所有进程总共的资源需求少于M+N 个,证明该系统此时不会产生死锁。答卜设max ( i )表示第i 个进程的最大资源需求量,need ( i )表示第i 个进程还需要的资源量,alloc ( i )表示第i 个进程已分配的资源量。由题中所给条件可知:max(1 n)=(need(1)+need(n)+(alloc(1)+alloc(n)m+nm (1)+alloc ( n )=m另一方面所有进程将陷入无限等待状态。可以推出need(1)+need (n) n上式表示死锁发生后,n 个进程还需要的资源

41、量之和小于n ,这意味着此刻至少存在一个进程i , need ( i ) = 0,即它已获得了所需要的全部资源。既然该进前面的假设矛盾,从而证明在这个系统中不可能发生死锁。答2:由题意知道,nm m + n 是成立的,等式变换n( m - 1 ) + n n + m即n(m-1) m于是有n( m-1 ) + 1m + 1或n ( m-1 ) + 1m这说明当n 个进程都取得了最大数减1 1 )个时,这时至少系统还有一个资源可分配。故该系统是死锁无关的。23 一条公路两次横跨运河,两个运河桥相距100 米,均带有闸门,以供船只通过近吊桥A 时就拉汽笛警告,若桥上无车辆,吊桥就吊起,直到驳船尾P

42、 通过此桥为止。对吊桥B 也按同样次序处理。一般典型的驳船长度为200 米,当它在河上量来实现驳船的同步。答:当汽车或驳船未同时到达桥A 时,以任何次序前进不会产生死锁。但假设汽车驶过了桥A ,它在继续前进,并且在驶过桥B 之前,此时有驳船并快速地通过了桥A,驳船头到达桥B ,这时会发生死锁。因为若吊起吊桥B 让驳船通过,则汽车无法通过桥B ;若不吊起吊桥B 让汽车通过,则驳船无法通过桥B 。可用两个信号量同步车、船通过两座桥的动作。var Sa , Sb : semaphore ;Sa:=Sb:=1 ;cobeginprocess 驳船beginP(Sa ) ;P(Sb ) ;船过桥A 、B

43、 ;V(Sa ) ;V(Sb ) ;endprocess 汽车beginP ( Sa ) ;P ( Sb ) ;车过桥A 、B ;V ( Sa ) ;V ( Sb ) ;endcoend24Jurassic公园有一个恐龙博物馆和一个花园,有m 个旅客租卫辆车,每辆车仅能乘一个一旅客。旅客在博物馆逛了一会,然后,排队乘坐旅行车,挡一辆车可用喊飞它载入一个旅客,再绕花园行驶任意长的时间。若n 辆车都己被旅客乘坐游车辆要等待。试用信号量和P 、V 操作同步m 个旅客和n 辆车子。答:这是一个汇合机制,有两类进程:顾客进程和车辆进程,需要进行汇合、即顾客要坐进车辆后才能游玩,开始时让车辆进程进入等待状

44、态var sc1 , sck , sc ,Kx,xc ,mutex : semaphore ;sck:=kx:=sc:=xc:=0;sc1:=n ;mutex : = 1 ;sharearea :一个登记车辆被服务乘客信息的共享区;cobeginprocess 顾客i( i = 1 , 2 , )beginP ( sc1 ) ; / 车辆最大数量信号量P ( mutex ) ; / 封锁共享区,互斥操作在共享区sharearea 登记被服务的顾客的信息:起始和到达地点,行驶时间V ( sck ) ; /* 释放一辆车 ,即顾客找到一辆空车P (Kx); /* 待游玩结束之后,顾客等待下车V (

45、 sc1 ) ; /*空车辆数加1EndProcess 车辆j(j=1,2,3)BeginL:P(sck); /*车辆等待有顾客来使用在共享区sharearea登记那一辆车被使用,并与顾客进程汇合;V(mutex); /*这时可开放共享区,让另一顾客雇车V(kx); /*允许顾客用此车辆车辆载着顾客开行到目的地;V(xc); /*允许顾客下车Goto L;Endcoend25 今有k个进程,它们的标号依次为1 、2 、 、k ,如果允许它们同时读文件file K 1 )信号量与P 、v 操作,2 )管程,编写出协调多进程读文件的程序。答1: l )使用信号量与P 、v 操作var waits

46、, mutex :semphore ;numbersum:integer:=0 ;wait:=0;mutex:=1 ;cobeginprocess readeri ( var number:integer ; )beginP(mutex ) ;L:if numbersum+number K then V ( mutex ) ; P ( waits ) ; goto L ; Then numbersum:numbersum+number;V (mutex ) ;Read file ;P(mutex ) ;numbersum: = numbersum-number ;V(waits ) ;V(mu

47、tex ) ;2 )使用管程:TYPE sharefile = MONITORVAR numbersum ,n : integer ;SF : codition ;DEFINE startread , endread ;USE wait , signal , check , release ;procedure startread ( var number :integer : ) ;beginprocedure endread (var number:integer ; ) ;var number : integer ;l )计算各个进程还需要的资源数Cki - Akivar mutex :

48、 semaphore = 1 /*互斥信号量/sx , sy : semaphore;将X产品入库;V(mutex ) ;V ( sy ) ;until falseprocess Y repeatP ( sy ) ;P (mutex ) ;将Y产品入库;V (mutex ) ;V ( px ) ;until falsecoend .31 有一个仓库可存放A m A 和B进行装配,每次各取一个为避免零件锈蚀,按先入库者先出库的原则。有两组供应商分别不断地供应A 和B,每次一个。为保证配套和合理库存,当某种零件比另一种零件超过n ( n m )个时,暂停对数量大的零件的进货,集中补充数量少的零件试

49、用信号量与P 、V 操作正确地实现它们之间的同步关系。答:按照题意,应满足以下控制关系:A 零件数量-B 零件数量n ; B 零件数量-A 零件数量n : A 零件数量m ; B 零件数量m 四个控制关系分别用信号量sa、sb 、empty1 和empty2 实施。为遵循先入库者先出库的原则,A 、B 零in1 和出库指针out1 来控制顺序。并发程序编制如下:Var empty1,empty2,full1,full2:semaphore;Mutex ,sa,sb:semaphore;In1,in2,out1,out2:integer;Buffer1,buffer2:array0m-1of i

50、tem;Empty1:=empty2:=m;Sa:=sb:=n;In1:=in2=out1:=out2:=0;CobeginProcess producerArepeatP(empty1);P(sa);P(mutex);Buffer1in1:=A零件;In1:=(in1+1)mod m;V(mutex);V(sb);V(full1);Untile false;Process producer BrepeatP(empty2);P(sb);P(mutex);Buffer2in2:=B零件;In2:=(in2+1)mod m;V(mutex);V(sa);V(full2);Untile false

51、;Process takerepeatP(full1);P(full2);P(mutex);Take from buffer1out1 and buffer2out2中的A,B零件;Out1:=(out1+1)mod m;Out2:=(out2+1)mod m;V(mutex);V(empty1);V(empty2);把A和B装配成产品;Until falseCoend.32 进程Al 通过m个缓冲区向进程B1 、 不断地发送消息发送和接收工作符合以下规则:(l)每个发送进程每次发送一个消息,写进一个缓冲区,缓冲区大小与消息长度相等;( 2 )对每个消息,Bl 、BZ 、二、BnZ 都需接收一

52、次,并读入各自的数据区内;( 3 )当M个缓冲区都满时,则发送进程等待,当没有消息可读时,接收进程等待试用信号量和PV 操作编制正确控制消息的发送和接收的程序。答:本题是生产者一消费者问题的一个变形,一组生产者A1 , A2,An1 和一组消费者B1,B2 , Bn2 共用m个缓冲区,每个缓冲区只要写一次,但需要读n2 n2 n2 组缓冲区中相应的n2 的对应单元。应设置一个信号量mutex 实现诸进程对缓冲区的互斥访问;两个信号量数组emptyn2和fulln2描述n2 组缓冲区的使用情况其同步关系描述如下:var mutex , emptyn2,fulln2:semaphore ;i :i

53、nteger ; mutex=1 ;for(i=0;i=n2-1;i+)emptyi=m;Fulli=0;main ( )cobeginA1 ( ) ;A2 ( ) ;An1 ( ) ;B1 ( ) ;B2 ( ) ;Bn2 ( ) ;coendsend ( ) / 进程Ai 发送消息/ int i ;for (i=0;i=n2-1;i+);P(emptyi);P (mutex ) ;将消息放入缓冲区;V (mutex ) ;for(i=0;i 0 then wait ( R ,IM ) ;rc:=rc + 1;signal ( R , IM ) ;release ( IM ) ;end ;p

54、rocedure end-read ;begincheck ( IM ) ;rc:=rc-1 ;If rc=0 then signal ( W , IM ) ;release ( IM ) ;end ;procedure start-write ;begincheck ( IM ) ;wc:=wc + 1 ;if rc 0 or wc 1 then wait ( W , IM ) :release ( IM ) ;end ;procedure end-write ;begincheck ( IM ) ;wc:=wc-1 :if wc 0 then signal ( W , IM ) ;else

55、 signal ( R , IM ) ;release ( IM ) ;end ;beginrc:=0; wc:=0 ; R:=0 ; W:=0 ;end .Cobegin process P1begincall read-writer.start-read;Read;call read-riter.end-read ;end ;process P2beginCall read-writer.start-writer;Write;Call read-writer.end-write;End;Coend.36 假定某计算机系统有R1 和R2R1 有一个单位),它们被进程P1,P2 所共享,且已知

56、两个进程均以下列顺序使用两类资源 申请R1申请R2申请R1释放R1释放R2释放R1V(SI1);EndProcess producer2()BeginWhile(true)Produce B零件;P(SP2);F2(in2):=B;In2:=(in2+1) mod 10V(SI2);EndProcess installer()Var product:item;BeginWhile(true) p(SI1);Product1:=F1out1;Out1:=(out1+1) mod 10;V(SP1);P(SI2);Product2:=F2out2;Out2:=(out2+1) mod 10;V(S

57、P2);组装产品;EndTYPE produceprodut=monitorVAR F1 , F2 : ARRAY 0 9 of item;SP1 , SP2 , SG1 , SG2:semaphore;SP1_count1,SP2 count2 , SG1_count,SG2_count:integer;In1, in2 ,out1 ,out2:=integer ;inc1 , inc2 : integer ;DEFINE put1 , put2 , get :USE wait,signal;procedure put1( A );beginif inc1=10 then wait ( SP

58、1 , SP1_count , IM );Inc1:=inc1 + 1 :F1in1:= A ;in1:=(in1 + 1 ) MOD 10signal ( SG1 , SG1_count , IM ) ;end :procedure put2 ( B ) :beginif inc2 =10 then wait ( SP2 , SP2_count , IM );Inc2 :=inc2 + 1 ;F2 in2:=B;in2:=(in2 + 1 ) MOD 10signal ( SG2 , SG2_count , IM ) ;end ;procedure get ( A , B ) ;begini

59、f inc1=0 then wait ( SG1 , SG1_count , IM ) ;if inc2=0 then wait ( SG2 , SG2_count , IM ) ;inc1:=inc1-1 ;inc2:=inc2-1;A:F1out1;out1:=(out1 + 1 ) MOD 10B:=F2out2;Out2 :=(out2 + 1 ) MOD 10signal ( SP1 , SP1_count , IM ) ;signal ( SP2 , SP2_count , IM ) ;end ;beginin1:=0 ;in2:=0;out1:=0;out2:=0;inc1:=0

60、;inc2:=0 ;SP1:=0;SP2:=0;SG1:=0;SG2:=0;end.cobeginprocess Produce1beginwhile(true)produce A零件;P(IM.mutex);Call produceprodut.put1(A);If IM.next0 then V(IM.next);Else V(IM,mutex);End;Process Produce2BeginWhile(true)produce B零件;P(IM.mutex);Call produceprodut.put2(B);If (IM.next0 then V(IM.next);Else V(

到此这篇操作系统课后题答案第五版(操作系统答案第五版答案)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • redis 默认端口(redis 默认端口修改)2025-04-03 15:45:04
  • 电视软件后缀大全(电视软件后缀大全app)2025-04-03 15:45:04
  • 苹果软件后缀和安卓有什么不一样(苹果软件后缀和安卓手机后缀)2025-04-03 15:45:04
  • win7 nfs文件服务器(win7 nfs客户端)2025-04-03 15:45:04
  • 华为模拟器ensp安装教程(华为模拟器ensp怎么端口划分vlan)2025-04-03 15:45:04
  • 电脑软件安装包后缀名(电脑app安装包后缀)2025-04-03 15:45:04
  • 操作系统课后答案第二版(操作系统第二版课后答案张成姝)2025-04-03 15:45:04
  • 电脑安装软件后缀名(电脑安装程序后缀名)2025-04-03 15:45:04
  • 操作系统课件ppt(操作系统课后)2025-04-03 15:45:04
  • 服务器部署springboot项目放哪个文件(springboot文件服务器搭建)2025-04-03 15:45:04
  • 全屏图片