操作系统习题(F.L)答案 下载本文

main ( ) {

cobegin

prog1 ( );

prog2 ( ); prog3 ( ); prog4 ( ); prog5 ( prog6 ( prog7 ( coend }

prog1 ( ) {

… v ( f1 ); v ( f1 ); v ( f1 ); }

prog2 ( ) {

… v ( f2 ); v ( f2 ); v ( f2 ); }

prog 3 ( ) {

p ( f1 ); p ( f2 );

… v ( f3 ); }

prog 4 ( ) {

p ( f1 ); ); ); ); p ( f2 );

v ( f4 );

}

prog 5 ( ) {

p ( f1 ); p ( f2 );

v ( f5 ); }

prog 6 ( ) {

p ( f3 );

v ( f6 ); }

prog 7 ( ) {

p ( f5 );

v ( f7 ); }

prog8 ( ) {

p ( f4 ); p ( f6 ); p ( f7 ); }

15.在本题中,我们可以设置两个信号量来控制A、B产品的存放数量,sa表示当前允许A产品比B产品多入库的数量,即在当前库存量和B产品不入库的情况下,还可以允许sa个A产品入库;sb表示当前允许B产品比A产品多入库的数量,即在当前库存量和A产品不入库的情况下,还可以允许sb个B产品入库。初始时,sa为M – 1,sb为N

… … … … … – 1。当往库中存放一个A产品时,则允许存入B产品的数量也增加1;当往库中存放一个B产品时,则允许存入A产品的数量也增加1。 产品A、B的入库过程描述如下: int mutex=1; int sa= M – 1; int sb= N – 1; main ( ) {

while ( 1 ) {

取一个产品; if ( 取的是A产品) {

P ( sa ) ;

P ( mutex ) ; 将产品入库; v ( mutex ) ;

v ( sb ) ; }

else /*取的产品是B*/ {

P ( sb ) ;

P ( mutex ) ; 将产品入库; v ( mutex ) ;

v ( pa ) ; } } }

16.在本题中,应设置一个信号量mutex实现诸进程对缓冲区的互斥访问;两个信号量数组empty[n2]和full [n2]描述n2组缓冲区的使用情况。Mutex的初值为1;数组empty中的元素初值为m;数组full中的元素初值为0。其同步关系描述如下: int mutex , empty[n2] , full [n2] ; int i ;