操作系统 第二章部分答案.doc_第1页
操作系统 第二章部分答案.doc_第2页
操作系统 第二章部分答案.doc_第3页
操作系统 第二章部分答案.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

26. 假定有如下独木桥问题:过桥时,同一方向的行人可连续过桥,当某一方向有人过桥时,另一方向的行人必须等待;当某一方向无人过桥时,另一方向的行人可以过桥。试用信号量机制解决。答:(1) 将独木桥的两个方向分别标记为A和B。用整型变量countA和countB分别表示A、B方向上已在独木桥上的行人数,初值都设置为0。需要设置三个初值都为1的互斥信号量:MA用来实现对countA的互斥访问,MB用来实现对countB的互斥访问,mutex用来实现两个方向的行人对独木桥的互斥使用。(2)以下使用信号量机制对A方向上的行人过桥和B方向上的行人过桥的算法进行描述:int countA, countB;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=countA+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_direction_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=countB-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(int 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.在公共汽车上,司机的活动描述为:启动汽车、正常行车、到站停车;售票员的活动描述为:关车门、售票、开车门;试写出司机与售票员之间的同步算法。答:在汽车行驶过程中,司机活动与售票员活动之间的同步关系为:售票员关车门后,向司机发开车信号,司机接到开车信号后启动汽车,在汽车正常行驶过程中售票员售票,到站时司机停车,售票员在车停后开车门让乘客上下车。因此司机启动汽车的动作必须与售票员关车门的动作取得同步,而售票员开车门的动作也必须与司机到站停车的动作取得同步。在本题中,应设置两个信号量S1和S2。S1表示是否允许司机启动汽车(或表示售票员是否已经关好车门),其初值为0;S2表示是否允许售票员开门(或表示司机是否已经到站停车了),其初值为0. 采用信号量机制描述司机与售票员之间的同步算法如下:Semaphore S1,S2; /首先定义两个信号量S1和S2S1.value=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,唤醒司机进程,那么司机就开始启动汽车、正常行车;在此期间,售票员也可以同时进行售票。3.P(S2) :S2.value = S2.value - 1 = -1 0 ,那么售票员在售完票后,售票员进程就会自己阻塞起来,等待司机进程。这样就能避免当司机还没到站停车时,售票员就已经将车门打开了。而这是不允许的。4.V(S2) :S2.value = S2.value + 1 = 0 = 0,司机到站停车之后,就唤醒售票员进程,那么售票员就开启车门让乘客上下车。那么这个进程就完成了。30一个阅览室共有100个座位,用一张表来管理,每个表目记录座位号和读者姓名。读者进入时要先在表上登记,离开时要注销登记。试写出读者“进入”和“注销”之间的同步算法。答:读者的动作有两个,一是填表进入阅览室读书,这时要考虑阅览室里是否有座位;二是读者阅读完毕,需要注销登记再离开阅览室,这时的操作要考虑阅览室里是否有读者存在。读者在阅览室读书时,由于没有引起资源的变动,不算动作变化。因此,设置算法所涉及的三个信号量:empty资源信号量表示阅览室里的空座位的数目,初值为100;full资源信号量表示阅览室里有人的座位的数目(或表示阅览室里的读者的数目),初值为0;mutex互斥信号量表示对登记表这个临界资源的互斥访问,初值设为1。使用信号量机制对读者“进入”阅览室和“注销”登记之间的同步算法描述如下:Semaphore 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中取数打印。试写出同步算法。答:需要设置3个信号量:(1)信号量empty用于表示进程R可向缓冲区B中读入的整数个数,初值为1,表示进程R能读入一个整数到缓冲区B中。(2)信号量SW1的初值为0,表示开始时缓冲区B中没有奇数可供进程W1读取。SW1控制R与W1之间的同步。(3)信号量SW2的初值为0,表示开始时缓冲区B中没有偶数可供进程W2读取。SW2控制R与W2之间的同步。使用信号量机制对这三个进程的同步算法描述如下:Semaphore empty,SW1,SW2; /首先定义3个信号量empty.value=1;SW1.value=0;SW2.value=0;cobeginprocess R()int x;while(1)从输入设备上读一个整数到x;P(empty); /判断进程R能否向缓冲区B中读入一个整数。如果不可以,则R进程阻塞起来等待。否则,继续向下执行。B=x; /把读入到变量x中的整数赋值给缓冲区Bif(x%2=1) V(SW1); /如果读入的是奇数,则向进程W1发出信号else V(SW2); /如果读入的是偶数,则向进程W2发出信号 process W1()int y;while(1)P(S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论