操作系统-第二章部分答案.doc

上传人:F****n 文档编号:101514899 上传时间:2019-09-28 格式:DOC 页数:5 大小:38.50KB
返回 下载 相关 举报
操作系统-第二章部分答案.doc_第1页
第1页 / 共5页
操作系统-第二章部分答案.doc_第2页
第2页 / 共5页
操作系统-第二章部分答案.doc_第3页
第3页 / 共5页
操作系统-第二章部分答案.doc_第4页
第4页 / 共5页
操作系统-第二章部分答案.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《操作系统-第二章部分答案.doc》由会员分享,可在线阅读,更多相关《操作系统-第二章部分答案.doc(5页珍藏版)》请在金锄头文库上搜索。

1、26. 假定有如下独木桥问题:过桥时,同一方向的行人可连续过桥,当某一方向有人过桥时,另一方向的行人必须等待;当某一方向无人过桥时,另一方向的行人可以过桥。试用信号量机制解决。答:(1) 将独木桥的两个方向分别标记为A和B。用整型变量countA和countB分别表示A、B方向上已在独木桥上的行人数,初值都设置为0。需要设置三个初值都为1的互斥信号量:MA用来实现对countA的互斥访问,MB用来实现对countB的互斥访问,mutex用来实现两个方向的行人对独木桥的互斥使用。(2)以下使用信号量机制对A方向上的行人过桥和B方向上的行人过桥的算法进行描述:int countA, countB;

2、countA = 0; countB = 0; Semaphore MA,MB,mutex; /定义了三个互斥信号量MA.value=1; MB.value=1; mutex.value=1;cobeginprocess A_direction_cross_bridge_person /A方向上过独木桥的行人进程P(MA); /实现对临界资源countA的互斥访问/当A方向上没有行人过独木桥时,这时有可能存在B方向上的行人在过独木桥。 if (countA = 0) P(mutex); /如果当前独木桥正在被使用,说明B方向上的行人正在过桥,则A方向上的行人必须等待。 countA=count

3、A+1; /当B方向上没有行人过桥时,则A方向上的行人可以过独木桥。因此A方向上已在独木桥上的行人数增加1个V(MA); /退出临界区过桥; /A方向上的行人通过独木桥P(MA); /实现对临界资源countA的互斥访问 countA=countA-1; /当A方向上的行人已经通过了独木桥时,则A方向上在独木桥上的行人数需要减少1个 if(countA=0) /如果A方向上在独木桥上的行人数减少到0,则 V(mutex); /需要释放独木桥临界资源,唤醒第一个由于在等待独木桥而处于等待状态的B方向上过独木桥的行人进程(如果此进程存在)V(MA); /退出临界区process B_directi

4、on_cross_bridge_person /B方向上过独木桥的行人进程P(MB); /实现对临界资源countB的互斥访问/当B方向上没有行人过独木桥时,这时有可能存在A方向上的行人在过独木桥。 if (countB=0) P(mutex); /如果当前独木桥正在被使用,说明A方向上的行人正在过桥,则B方向上的行人必须等待。 countB=countB+1; /当A方向上没有行人过桥时,则B方向上的行人可以过独木桥。因此B方向上已在独木桥上的行人数增加1个V(MB); /退出临界区过桥;/B方向上的行人通过独木桥P(MB); /实现对临界资源countB的互斥访问 countB=count

5、B-1; /当B方向上的行人已经通过了独木桥时,则B方向上在独木桥上的行人数需要减少1个 if(countB=0) /如果B方向上在独木桥上的行人数减少到0,则 V(mutex); /需要释放独木桥临界资源,唤醒第一个由于在等待独木桥而处于等待状态的A方向上过独木桥的行人进程(如果此进程存在)V(MB); /退出临界区coend27.有7个并发执行的进程Pi(i=1,2, ,7),若希望它们按照如下图所示的次序执行,试写出进程并发执行的算法。S5P4 S7S0S2S3P6 P2 P3 S1P7 S4 S6P5 P1 Semaphore S8; /定义一个大小等于8的结构型信号量数组for(in

6、t i=0;i8;i+) Si.Value=0;process PP()cobegin /伪代码cobegin和coend表示夹在它们之间的语句可以并发执行P1; V(S1);P2; V(S0);P(S0); P(S1); P3; V(S2); V(S3); V(S4);P(S2); P4; V(S5);P(S4); P5; V(S6);P(S5); P(S3); P6; V(S7);P(S7); P(S6); P7;coend29.在公共汽车上,司机的活动描述为:启动汽车、正常行车、到站停车;售票员的活动描述为:关车门、售票、开车门;试写出司机与售票员之间的同步算法。答:在汽车行驶过程中,司

7、机活动与售票员活动之间的同步关系为:售票员关车门后,向司机发开车信号,司机接到开车信号后启动汽车,在汽车正常行驶过程中售票员售票,到站时司机停车,售票员在车停后开车门让乘客上下车。因此司机启动汽车的动作必须与售票员关车门的动作取得同步,而售票员开车门的动作也必须与司机到站停车的动作取得同步。在本题中,应设置两个信号量S1和S2。S1表示是否允许司机启动汽车(或表示售票员是否已经关好车门),其初值为0;S2表示是否允许售票员开门(或表示司机是否已经到站停车了),其初值为0. 采用信号量机制描述司机与售票员之间的同步算法如下:Semaphore S1,S2; /首先定义两个信号量S1和S2S1.v

8、alue=0; S2.value=0;cobeginprocess driver() process conductor() while(1) while(1) P(S1); 关车门; 启动汽车; V(S1); 正常行车; 售票; 到站停车; P(S2); V(S2); 开车门; 上下乘客; coend我们来分析这个过程,首先将信号量S1和S2的初值都设为0.然后进行以下分析:1.P(S1) :S1.value = S1.value - 1 = -1 0 ,那么司机进程就自己阻塞起来,等待售票员进程,售票员关车门。2.V(S1) :S1.value = S1.value + 1 = 0 = 0

9、,唤醒司机进程,那么司机就开始启动汽车、正常行车;在此期间,售票员也可以同时进行售票。3.P(S2) :S2.value = S2.value - 1 = -1 0 ,那么售票员在售完票后,售票员进程就会自己阻塞起来,等待司机进程。这样就能避免当司机还没到站停车时,售票员就已经将车门打开了。而这是不允许的。4.V(S2) :S2.value = S2.value + 1 = 0 = 0,司机到站停车之后,就唤醒售票员进程,那么售票员就开启车门让乘客上下车。那么这个进程就完成了。30一个阅览室共有100个座位,用一张表来管理,每个表目记录座位号和读者姓名。读者进入时要先在表上登记,离开时要注销登

10、记。试写出读者“进入”和“注销”之间的同步算法。答:读者的动作有两个,一是填表进入阅览室读书,这时要考虑阅览室里是否有座位;二是读者阅读完毕,需要注销登记再离开阅览室,这时的操作要考虑阅览室里是否有读者存在。读者在阅览室读书时,由于没有引起资源的变动,不算动作变化。因此,设置算法所涉及的三个信号量:empty资源信号量表示阅览室里的空座位的数目,初值为100;full资源信号量表示阅览室里有人的座位的数目(或表示阅览室里的读者的数目),初值为0;mutex互斥信号量表示对登记表这个临界资源的互斥访问,初值设为1。使用信号量机制对读者“进入”阅览室和“注销”登记之间的同步算法描述如下:Semap

11、hore empty,full,mutex; /首先定义两个资源信号量empty、full和一个互斥信号量mutexempty.value=100; full.value=0;mutex.value=1;cobeginprocess getin() /读者“进入”阅览室的进程while(1)P (empty); /没有座位则离开P (mutex); /进入临界区填写登记表;进入阅览室读书;V (mutex); /离开临界区V (full); /释放一个读者资源process getout () /读者“注销”登记、离开阅览室的进程while(1)P(full); /阅览室是否有人在读书(是否存在有人的座位)P(mutex); /进入临界区注销登记;离开阅览室; V(mutex); /离开临界区V(empty); /释放一个座位资源 coend32.假定有3个进程R、W1、W2共享一个缓冲区B,B中每次只能存放一个整数。进程R从输入设备读入一个数进缓冲区B。若读入的是奇数,则由进程W1取出打印;若读入的是偶数,则由进程W2取出打印。规定不能重复从B中取数打印。试

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号