南京邮电大学操作系统课后习题答案.doc 下载本文

Repeat 打印N的值; N=0; Until false;

其中N为整数,初值为4。若进程A先执行了三个循环后,进程A和进程B又并发执行了一个循环,写出可能出现的打印值。正确的打印值应该是多少?请用P、V操作进行管理,使进程A和B并发执行时不会出现与时间有关的错误。 答:

因为N初值为4,若进程A先执行了三个循环,此时N的值为19。当进程A和进程B并发执行时可能会有如下两种执行次序,即进程A先执行一次循环,然后再进程B执行一次循环,此时打印的是正确值24,执行后N中的值为0。但若进程B先执行一次循环,然后再进程A执行一次循环,则打印的值是19,执行后N中的值是5。这是错误的,即发生了与时间有关的错误。用P、V操作进行管理,使进程A和B并发时不会出现与时间有关的错误的程序如下:(S为互斥信号量,初值为1),

进程A Repeat P(S); N=N+5; V(S); Until false; 进程B Repeat P(S);

打印N的值; N=0; V(S); Until false;

12、四个进程P0,P1,P2,P3和四个信箱M0,M1,M2,M3进程间借助相邻的信箱传递消息: 每次从 中取出一条消息,经加工送入 中。其中M0,M1,M2,M3分别设有3,3,2,2个格子,

13

每个格子放一条消息,初始时,M0装满了三条消息,其余为空。写出使用信号量实现进程 (i=0,1,2,3)同步及互斥的流程。 答:

mutex0 ~ mutex3 : 分别用于控制互斥访问M0 ~ M 3,初值为1。

full0 ~ full3 : 分别用于控制同步访问M0 ~ M3 ,其中full0 初值为3,full1 ~ full3 初值为0,表示信箱中消息条数。

empty0 ~ empty3 : 分别用于同步控制对M0 ~ M3的访问。Empty0初值为0,empty2~ empty3初值为2,empty1初值为3,分别用于表示信箱中空格子个数。

另用send ( Mi , message )表示将消息送到(Mi mod 4)号信箱中;而用receive ( Mi,message )表示接收已存在于( Mi mod 4 )中的消息。

则使用信号量实现进程Pi (i = 0 , 1 ,2 ,3 )同步及互斥的流程如下: mutex0 , m utex 1, m utex2 , m utex3 : semaphore ; full0 , ful l1 , ful l2 , ful l3 : semaphore ;

empty0 , em pty1 , em pty2 , em pty3 : semaphore ; begin

mutex0 : = 1 ; mutex1 : = 1 ; mutex2 : = 1 ; mutex : = 1 ; full0 : = 3 ; full1 : = 0 ; full2 : = 0 ; full3 : = 0 ;

empty0 : = 0 ; empty1 : = 3 ; empty2 : = 2 ; empty3 : = 2 ; Parbegin P0:begin repeat P ( mutex0 ) ; P ( full0 ) ;

Receive ( M0,message); V (empty0 ) ;

Processing the message until finished; P ( mutex1 ) ; P ( empty1 ) ; Send ( M1,message ) ; V ( full1 ) ;

14

V ( mutex1 ) ;

Until false ; … end ;

P1:{可类似于P0实现之}; P2:{可类似于P0实现之}; P3:{可类似于P0实现之}; Parend ; End;

13、设系统中仅有一类数量为M的独占型资源,系统中N个进程竞争该类资源,其中各进程对该类资源的最大需求量为W。当M、N、W分别取下列值时,试判断哪些情况会发生死锁?为什么?

① M=2,N=2,W=1 ②M=3,N=2,W=2 ③M=3,N=2,W=3 ④M=5,N=3,W=2 ⑤M=6,N=3,W=3 答:

③可能会发生死锁。只要一个进程占用了少于3个独占型资源而另一个进程占用了其余的独占型资源,两个进程都会相互处于等待对方进程释放资源的状态。

⑤也可能会发生死锁。当每个进程都分配了两个资源时,3个进程都会彼此等待。

14、假定具有5个进程的进程集合P={P0,P1,P2,P3,P4},系统中有三类资源A,B和C。其中A类资源有10个,B类资源有5个,C类资源有7个。假定在某时刻有如下状态: Allocation Max Available A B C A B C A B C P0 0 1 0 7 5 3 3 3 2 P1 2 0 0 3 2 2 P2 3 0 2 9 0 2 P3 2 1 1 2 2 2 P4 0 0 2 4 3 3

试给出Need,并说明当前系统是否处于安全状态,如果是,给出安全序列。如果不是,说明理由。

15

答:

当前系统处于安全状态,安全序列如下求解: work = Available = (3 , 3 , 2 )

寻找 Needj <= work = ( 3 , 3 , 2 ) ( j = 0 , 1 , 2 , 3 , 4) j = 1 Need1 = (1 ,2 ,3 ) < = (3 , 3 , 2 ) work : = (3 , 3 , 2 ) + (2 ,0 ,0 ) = (5 , 3 , 2 )

寻找 Needj <= work = ( 5 , 3 , 2 ) ( j = 0 , 2 , 3 , 4) j = 3 Need3 = (0 ,1 ,1 ) < = (5 , 3 , 2 ) work : = (5 , 3 , 2 ) + (2 ,1 ,1 ) = (7 , 4 , 3 ) 寻找 Needj <= work = (7 , 4 , 3 ) ( j = 0 , 2 , 4) j = 4 Need4 = (4 ,3 ,1 ) < = (7 , 4 , 3 ) work : = (7 , 4 , 3 ) + (0 ,0 ,2 ) = (7 , 4 , 5) 寻找 Needj <= work = (7 , 4 , 5) (j = 0 , 2 ) j = 2 Need2 = (6 ,0 ,0 ) < = (7 , 4 , 5 ) work : = (7 , 4 , 5 ) + (3 ,0 ,2 ) = (10 , 4 , 7) 寻找 Needj <= work = (10 , 4 , 7) ( j = 0 ) j = 0 work : = (10 , 4 , 7 ) + (0 ,1 ,0 ) = (10 , 5 , 7) 所以安全序列为<P1,P3,P4,P2,P0>。

15、有一阅览室,读者进入时必须先在一张登记表上登记。该表中每个表项代表阅览室中的一个座位。读者离开时要消掉其登记信息。阅览室共有50个座位。登记表每次仅允许一位读者进行登记或注销。读者登记时,发现登记表满,他在阅览室外等待,直至有空位再登记进入。试用类Pascal语言和P、V操作,描述读者行为。 答:

Begin {initial value of S is 50}

Parbegin Begin {register } P (S) ;

Register and enter into the reading room ; End;

16