资源描述:
《操作系统复习(重点内容复习)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、二、进程同步问题1、一个快餐厅有4类职员:⑴领班:接受顾客点菜;(2)厨师:准备顾客的饭菜;(3)打包工:将饭菜打包;(4)出纳员:收款并提交食物。每位职员可被看做一个进程,试用一种同步机制写岀能让4类职员正确并发工作的程序。解:可设4个信号量SI,S2,S3,S4來协调进程工作。SemaphoreS2,S3,S4,Wl,W2,W3,W4;S2=S3=S4=0;W1=W2=W3=W4=1;//S为同步信号量,表示4类职员的工作顺序,W为互斥信号量,表示每一类员工一次只能为一个客户服务cobeginprocessPl(){while(true){有顾客到来;P(Wl)
2、;//W1=W1-1,ifWl<0block;接受顾客点菜;V(Wl);//Wl=Wl+lV(S2);//S2=S2+1;}}processP2(){while(true){P(S2);//S2=S2-1,ifS2<0block;P(W2);//W2=W2-1,ifW2<0block;准备顾客的饭菜;V(W2);//W2=W2+lV(S3);//S3=S3+1processP3(){while(true){P(S3);P(W3);//W3=W3-1,ifW3<0block;将饭菜打包;V(W3);//W3=W3+lV(S4);//S4二S4+1}}processP4
3、(){while(true){P(S4);P(W4);//W4=W4-1,ifW4<0block;收款并提交食品;V(W4);//W4=W4+1coend2、假定一个阅览室最多可容纳100人,读者进入和离开阅览室时都必须在阅览室门口的一个登记表上进行登记,而且每次只允许一人进行登记操作,请用记录型信号量机制实现上述问题的同步。定义信号量sum,mutex,初值分别为100,则第i个读者的活动描述为:PiSemaphoresum,mutex;Sum=100;mutex=0;cobegeinprocedurePi()(i=lf2,3){wait(sum);//sum=s
4、um-l,ifsum<0blockwait(mutex);//mutex=muifmutex<0block登记;signal(mutex);//mutex=mutex+l进入阅览室;阅读;wait(mutex);//mutex=mutex-1,ifmutex<0block登记;signal(mutex);//mutex=mutex+l离开阅览室;signal(sum);//sum=sum+l}coend3、图给出了四个进程合作完成某一任务的前趋图,试说明这四个进程间的同步关系,并用P、V操作描述它。Semaphorepl,p2,p3,p4;pl=p2=p3=p4=0
5、;cobegeinprocesssi(){•••Signal(pl);Signal(p2)}processs2(){wait(pl)•••Signal(p3);}processs3(){wait(p2)•••Signal(p4);}processs4(){wait(p3);wait(P4);•••}coend4、请用信号量解决以下的“过独木桥”问题:同一方向的行人可连续过桥,当某一方向有人过桥时,另一方向的行人必须等待;当某一方向无人过桥时,另一方向的行人可以过桥。将独木桥的两个方向分别标记为A和B;并用整形变量countA和countB分别表示A、B方向上已在独木
6、桥上的行人数,初值为0;再设置三个初值都1的互斥信号量:SA用来实现对countA的互斥访问,SB用來实现对countB的互斥访问,mutex用来实现两个方向的行人对独木桥的互斥使用。则具体描述如下:SemaphoreSA,SB,mutex,countA,countB;SA二SB二mutex二1,1,1;countA=countB=0,0;cobeginprocessA(){wait(SA);//互斥操作counts变量if(countA==0)thenwait(mutex);//A方向第一个上桥的人执行mutex二mutexT,ifmutex<0block,否则可
7、以上桥countA:=countA+l;signal(SA);//释放SA变量过独木桥;wait(SA);//互斥操作counts变量countA:二countA~1;if(countA==0)thensignal(mutex);//A方向第最后一个下桥的人执行mutex=mutex+lifmutex<=0wakeup,唤醒B进程signa(SA);}processB(){//过程同Await(SB);if(countB==0)thenwait(mutex);countB:二countB+l;signal(SB);过独木桥;wait(SB);countB:=co