操作系统教程 - 孙钟秀(第四版)课后习题答案 联系客服

发布时间 : 星期五 文章操作系统教程 - 孙钟秀(第四版)课后习题答案更新完毕开始阅读8ea3256a52ea551811a68724

P ( seatcount ) ; P (mutex ) ;

for i : = 1 to 100 do i++

if A [ i ].name=null then A [ i ].name:readername; reader get the seat number=i;/*A[I].number V ( mutex )

进入阅览室,座位号i ,座下读书; P ( mutex ) ; A[i]name:null ; V (mutex ) ; V(seatcount); 离开阅览室; } } coend

2 )使用管程操作: TYPE readbook=monitor VAR R: condition ; I,seatcount :integer;

name:array [ l:100] of string ; DEFINE rcadercome, readerleave ;

USE check , wait , signal , release ; Procedure readercome ( readername ) begin

check ( IM ) ;

if seatcount≥100 wait ( R,IM ) seatcount : = seatcount + 1 ; for i=1 to 100 do i++

if name[i] ==null then name[i]:= readername; get the seat number = i ; release ( IM ) ; end

procedure readerleave ( readername ) begin

check ( IM ) ; seatcount--;

for i = 1 to 1 00 do i++

if name[i ]readername then name[i]:null; release ( IM ) ; end begin

seatcount : = 1OO ; name:=null ; end

cobegin

{

process readeri ( i = 1 , 2 .? ) begin

readercome ( readername); read the book ;

readerleave ( readername); leave the readroom; end }

coend.

5. 在一个盒子里,混装了数量相等的黑白围棋子· 现在用自动分拣系统把黑子、白子分开,设分拣系统有二个进程P1 和P2 ,其中P1 拣白子;P2 拣黑子。规定每个进程每次拣一子;当一个进程在拣时,不允许另一个进程去拣;当一个进程拣了一子时,必须让另一个进程去拣.试写出两进程P1 和P2 能并发正确执行的程序。

答1 :实质上是两个进程的同步问题,设信号量s1 和s2 分别表示可拣白子和黑子,不失一般性,若令先拣白子。 var S1 , S2 : semaphore; S1 : = l; S2 :=0; cobegin {

process P1 begin repeat P( S1 ) ; 拣白子

V ( S2 ) ; until false ; end

process P2 begin repeat P ( S2 ) ; 拣黑子

V (S1 ) ;

until false ; end }

coend . 答2 :

TYPE pickup-chess = MONITOR VAR flag : boolean ;

S-black , s-white : codition ;

DEFINE pickup-black , pickup-white ;

USE wait,signal , check , release ; procedure pickup-black ; begin

check(IM ) ;

if flag then wait(s-black,IM ) ; flag : =true; pickup a black;

signal(S-white,IM); release ( IM ) ; end

procedure pickup-white ; begin

check ( IM ) ;

if not flag then wait(S-white,IM ); flag :=false ; pickup a white ;

signal ( S-black,IM ) ; release ( IM ) ; end begin

flag:=true ; end

main ( ) { cobegin

process -B ( ) ; process -W ( ) ; coend }

process-B ( ) begin

pickup-chess.pickup-black ( ) ; other ; end

process-W ( ) begin

pickup-chess.pickup-white( ) ; other ; end

6 管程的同步机制使用条件变量和wait 及signal ,尝试为管程设计一种仅仅使用一个原语操作的同步机制。

答:可以采用形如waituntil <条件表达式>的同步原语。如waituntil ( numbersum + number < K ) 表示进程由于条件不满足而应等待,当进程号累加和小于K 时,系统应唤醒该进程工作.

7 设公共汽车上,司机和售票员的活动分别如下: 司机的活动:启动车辆:正常行车;到站停车。 售票员的活动:关车门;售票;开车门。

在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?用信号量和P 、V 操作实现它们的同步。

答:在汽车行驶过程中,司机活动与售票员活动之间的同步关系为:售票员关车门后,向司机发开车信号,司机接到开车信号后启动车辆,在汽车正常行驶过程中售票员售票,到站时司机停车,售票员在车停后开门让乘客上下车。因此,司机启动车辆的动作必须与售票员关车门的动作取得同步;售票员开车门的动作也必须与司机停车取得同步。应设置两个信号量:S1 、S2 ;S1 表示是否允许司机启动汽车(其初值为0 ) ;S2 表示是否允许售票员开门(其初值为0 )。用P 、v 原语描述如下:

var S1 , S2 : semaphore ; S1=0;S2=0; cobegin {

driver ( ) ; busman ( ) ; } coend

driver ( ) begin

while ( 1 ) { P ( S1 )

启动车辆;正常行车;到站停车; V ( S2 ) ; } end

busman ( ) begin

while ( 1 ) { 关车门; V ( 51 ) 售票;

P ( S2 ) 开车门; 上下乘客; } end

8、一个快餐厅有4 类职员:( l )领班:接受顾客点菜;( 2 )厨师:准备顾客的饭菜;( 3 ) 包工:将做好的饭菜打包;( 4 )出纳员:收款并提交食品。每个职员可被看作一个进程,试用一种同步机制写出能让四类职员正确并发运行的程序。

答:典型的进程同步问题,可设四个信号量51 、S2 、S3 和S4 来协调进程工