PV操作部分分析思考题.doc_第1页
PV操作部分分析思考题.doc_第2页
PV操作部分分析思考题.doc_第3页
PV操作部分分析思考题.doc_第4页
PV操作部分分析思考题.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1. 有一阅览室,共有100个座位.读者进入时必须先在一张登记表上登记,该表为每个座位列一表目,包括座号和读者姓名。读者离开时要注销掉登记内容。试用某一种语言(或类语言)和P、V操作描述进程的同步结构。分析读者首先要申请座位,首先要获得登记表以便在上面进行登记;该读者在登记过程中是不允许其他读者进行登记的;因此,需要引入一个初始值为1的信号量mutex以实现读者间对登记表的互斥使用。读者要在登记表上进行登记,前提是登记表上要有空表目;为此需要引入一个信号量S。其初始值为100,表示有空表目100项。读者在完成登记后,放下登记表给其他读者使用,然后在申请到的座位上进行阅读活动。完成阅读后,读者需删除登记表上的内容,在该读者进行删除操作的同时是不允许其他读者进行删除的。读者进程:mutex,s:Semaphore;mutex:=1;s:=100;Process ReaderiBeginwait(s);wait(mutex);; signal(mutex); ;wait(mutex);signal(mutex);signal(s);end2.司机和售票员的同步关系分析在汽车行驶过程中,司机活动与售票员活动之间的同步关系为:售票员关车门后,向司机发开车信号,司机接到开车信号后启动车辆,在汽车正常行驶过程中售票员售票,到站时司机停车,售票员在车停后开车门让乘客上下车。因此司机启动车辆的动作必须与售票员关车门的动作取得同步:售票员开车门的动作也必须与司机停车取得同步。设置两个信号量S1和S2,S1表示是否允许司机启动汽车,其初值为0,S2表示是否允许售票员开门,其初值为0。 Var s1,s2:integer:=0,0; Busman: Begin Repeat 关车门 signal(s1) 售票 wait(s2) 开车门 上下乘客 Until false; End End BeginDriver: Begin Repeat wait(s1) 启动车辆 正常行车 到站停车 signal(s2) Until false; End 3.哲学家用餐问题 begin repeat if i mod 2=0 then wait(ci); wait(ci+1 mod 5); eat; signal(ci); signal(ci+1 mod 5) else wait(ci+1 mod 5); wait(ci); eat; signal(ci+1 mod 5); signal(ci); until false end4. 有三个进程PA、PB和PC合作解决文件打印问题:PA将文件记录从磁盘读入主存的缓冲区1,每执行一次读一个记录;PB将缓冲区1的内容复制到缓冲区2,每执行一次复制一个记录;PC将缓冲区2的内容打印出来,每执行一次打印一个记录。缓冲区的大小等于一个记录大小。请用P、V操作来保证文件的正确打印。缓冲区1缓冲区2 PA PB PC 读入 复制 打印分析在本题中,进程PA、PB、PC之间的关系为:PA与PB共用一个单缓冲区,而PB又与PC共用一个单缓冲区,其合作方式如图所示。当缓冲区1为空时,进程PA可将一个记录读入其中;若缓冲区1中有数据且缓冲区2为空,则进程PB可将记录从缓冲区1复制到缓冲区2中;若缓冲区2中有数据,进程PC可以打印记录。在其它条件下,相应进程必须等待。事实上这是一个生产者-消费者问题,其中的难点在于PB既是一个生产者又是一个消费者。 应设置四个信号量empty1,empty2,full1,full2,信号量empty1及empty2分别表示缓冲区1及缓冲区2是否为空,其初值为1;信号量full1及full2分别表示缓冲区1及缓冲区2是否有记录可供处理,其初值为0。Var empty1,empty2,full1,full2:integer:=1,1,0,0;Begin PA: Begin; Repeat 从磁盘中读一个记录; Wait(empty1) 将记录存入缓冲区1; signal(full1); until false; end PB:Begin Repeat Wait(full1); 从缓冲区1中取出记录; signal(empty1); wait(empty2); 将记录存入缓冲区2; signal(full2); until false;end PC: Begin; Repeat Wait(full2); 从缓冲区2中取出记录; signal(empty2); 打印记录; until false; endend5.在南开大学和天津大学之间有一条弯曲的小路,其中从S到T一段路每次只允许一辆自行车通过,但其中有一个小的安全岛M(同时允许两辆自行车停留),可供两辆自行车已从两端进入小路情况下错车使用,如图所示。试设计一个算法使来往的自行车均可顺利通过。M 天津大学KTSL 南开大学分析本题中,应设置5个信号量ST,TS,K,L,M,信号量ST表示是否允许自行车从南开大学去天津大学,其初值为1;信号量TS表示是否允许自行车从天津大学去南开大学,其初值为1;信号量K表示是否允许自行车通过路段S到K,其初值为1;信号量L表示是否允许自行车通过路段T到L,其初值为1;信号量M表示安全岛上还可停放自行车的数目,其初值为2。控制过程描述如下: Var ST,TS,K,L,M:integer:=1,1,1,1,2;Begin Toji 从南开大学到天津大学 Begin RepeatLSTKM wait(ST); wait(K); 从S走到K; wait(M); 进入安全岛; signal(K); wait(L); 从L走到T; signal(M); signal(L); signal(ST); until false; end Toxing 从天津大学到南开大学 Begin Repeat wait(TS);LSTKM wait(L); 从T走到L; wait(M); 进入安全岛; signal(L); wait(K); 从K走到S; signal(M); signal(K); signal(TS); until false; end end6.读者与写者问题 对写者优先,即一旦有写者到达,后续的读者必须等待,而无论是否有读者在读文件。分析为了解决读者、写者之间同步,应设置两个信号量和一个共享变量:读互斥信号量rmutex,用于使读者互斥地访问共享变量count,其初值为1;写互斥信号量wmutex,用于实现写者与读者的互斥及写者与写者的互斥,其初值为1;共享变量count,用于记录当前正在读文件的读者数目,初值为0。为了提高写者的优先级,增加一个信号量s,用于在写进程到达后封锁后续的读者。int rmutex=1; int wmutex=1;int count=0;int s=1;main( ) cobegin reader( ); writer( ); coend reader( )while(1)wait(s);wait(rmutex);if(count= =0) wait(wmutex);count+;signal(r

温馨提示

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

评论

0/150

提交评论