资源预览内容
第1页 / 共25页
第2页 / 共25页
第3页 / 共25页
第4页 / 共25页
第5页 / 共25页
第6页 / 共25页
第7页 / 共25页
第8页 / 共25页
第9页 / 共25页
第10页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
(一)进程同步(一)进程同步进程同步进程同步 1进程 P1 和进程 P2 并发执行时满足一定的时序关系,P1 的代码段 S1 执行完后,才能执行 P2 的代码段 S2.为描述这种同步关系,:试设计相应的信号量,:给出信号量的初始值,:给出进程 P1 和 P2 的结构解答解答: 信号量变量申明为Typedef struct int value; /信号量中的值,表示资源的数量struct PCB *L; /等待该信号量的队列semaphore;设信号量 semaphore synch;初始值为:synch.value=0进程 P1 和 P2 的结构为P1: P2: S1 wait(synch);signal(synch); S2 进程同步进程同步 2问题描述:(理发店问题)一个理发店有一间配有 n 个椅子的等待室和一个有理发椅的理发室。如果没有顾客,理发师就睡觉;如果顾客来了二所有的椅子都有人,顾客就离去;如果理发师在忙而有空的椅子,顾客就会坐在其中一个椅子;如果理发师在睡觉,顾客会摇醒他。给出同步关系设计描述同步关系的信号量;给出满足同步关系的进程结构(请完成满足同步关系的进程结构)。解答:顾客 customer 应满足的同步关系为:a:顾客来时要等空的椅子,否则不进理发室b:座椅上的顾客要等理发椅空才有可能与别的顾客竞争理发椅,如果顾客坐上理发椅,就要腾空其座椅给新来顾客,同时叫理发师给其理发。c:一旦顾客理发完,就要让别的等待顾客有机会理发。理发师应满足的同步关系为: 一旦顾客唤醒,就给顾客理发,之后进入睡觉。信号量定义如下:Typedef struct int value; /信号量中的值,表示资源的数量struct PCB *L; /等待该信号量的队列semaphore;互斥信号量定义如下:Typedef struct bool flag;struct PCB *L;binary_semaphore;理发店问题的解决需要信号量和互斥信号量为:semaphore chair; binary_semaphore barber_chair, hair_cut;它们的初始值为:chair.value=n; barber_chair.flag=1; hair_cut.flag=0;顾客和理发师进程分别为:customer barber wait(chair); do waiting in the chair; wait(hair_cut);wait(barber_chair); cutting hair; signal(hair_cut); signal(barber_chair); sitting in barber chair for haircut; while(1)signal(chair); 进程同步进程同步 2设公共汽车上,司机和售票员的活动分别为:司机的活动为启动车辆,正常行车,到站停车;售票员的活动为关车门,售票,开车门。给出在汽车不断地到站、停车、行驶过程中,司机和售票员的活动的同步关系。用信号量和 wait, signal 操作实现他们间的协调操作。解答:解答:根据一般的常识,有售票员应满足的同步关系为:当司机停车后,才将车门打开让顾客上下车。司机的同步关系为:当售票员关门后,才能开车.设互斥信号量 binary_semaphore bus_closed,bus_stopped; 初始值为 bus_closed.flag=0; bus_stopped.flag=0; /表达初始情况第一次用到信号量时情形为车门没有关,车是开着的 进程为:driver busserver do do wait(bus_closed); closing the door;bus starting up; signal(bus_closed);bus is driving; ticket selling;bus is parking; wait(bus_stopped);signal(bus_stopped); opening the door;while(1) getting onoff the bus; while(1)进程同步进程同步 3:某高校计算机系开设网络课并安排上机实习,假设机房共有 2m 台机器,有 2n 名学生选该课,规定:(1) 每两个学生组成一组,各占一台机器,协同完成上机实习;(2) 只有凑够两个学生,并且此时机房有空闲机器,门卫才允许该组学生进入机房;(3) 上机实习由一名教师检查,检查完毕,一组学生才可以离开机房。试用信号量机制(P/V 操作)实现它们的同步关系。解解 (1)确定并发和顺序操作在这个问题中,学生(student)、检查教师(teacher)和门卫(gategard)是并行操作的,因此, 有多个学生(student)进程、一个检查教师(teacher)进程和一个门卫(gategard)进程。 (2)确定互斥和同步的规则gateguard:只有凑够两个学生,并且此时机房有空闲机器时,门卫才分配计算机给学生,允许该组学生进入机房;student:只有门卫分配完计算机后,学生才能进入机房上机操作。只有老师检查完毕才能离开。Teacher:只有老师检查完学生的实习,才准许学生离开。(3)每个进程的操作流程设立有学生到达标志,通知 gateguard 进程;学生是否可进入?上机实习;设立实习完成标志,通知教师;教师是否可检查,等待教师检查完毕;学生释放一台计算机资源;repeat是否有学生实习完成?是否有学生实习完成?(是否有一组学生实习完成)检查学生实习结果;检查完成,允许学生 1 离开;检查完成,允许学生 2 离开;until falserepeat等待学生 1 到达;等待学生 2 到达;是否有可用的计算机 1;是否有可用的计算机 2;分配计算机;设置学生 1 可进入标志;设置学生 2 可进入标志;until false(4)确定信号量的个数和含义student:是否有学生;computer:是否有可用的计算机;enter:学生是否可以进入机房;finish:是否有学生完成实习;test: 老师是否检查完一组学生。(5)确定信号量的初值在初始状态,各信号量的初值如下:student=0 学生没有到达;compute=2m 有 2m 个可用的计算机;enter=0 不允许学生进入机房,因为需要得到门卫允许;finish=0 没有学生实习完成;test=0 老师没有检查学生。(6)确定 P、V 操作的位置设立有学生到达标志,通知 gateguard 进程 =V(student)学生是否可进入?= P(enter)上机实习;设立实习完成标志,通知教师 = V(finish)教师是否可检查,等待教师检查完毕 = P(test(i) 学生释放一台计算机资源 = V(computer)repeat是否有学生实习完成?=P(student)是否有学生实习完成?=P(student)(是否有一组学生实习完成)检查学生实习结果;检查完成,允许学生 1 离开 = V(test(i)检查完成,允许学生 2 离开 = V(test(i)until falserepeat等待学生 1 到达 =P(student)等待学生 2 到达 =P(student)是否有可用的计算机 1 = P(computer)是否有可用的计算机 2 = P(computer)分配计算机;设置学生 1 可进入标志 = V(enter)设置学生 2 可进入标志 = V(enter)until false(7)P、V 操作实现 程序如下:student:=0;computer:=2m;enter:=0;finish:=0;test(i):=0;parbeginStudent i: BeginV(student); /*表示有学生到达,通知 gateguard 进程 */P(enter); /*学生是否可进入*/上机实习;V(finish); /*实习结束,通知教师,有需要检查的学生*/P(test(i); /*等待教师检查完毕*/V(computer); /*释放计算机资源End;.Teacher:BeginrepeatP(finish); /*是否有需要检查的学生,等待实习完成*/P(finish); /*是否有需要检查的学生,等待实习完成*/选出可检查的第 i 组学生;检查第 i 组学生实习结果;V(test(i); /*检查完成*/V(test(i); /*检查完成*/until false End;Gategard:Beginrepeat.P(student); /*等待学生到达*/P(student); /*等待另一学生到达*/P(computer); /*是否有可用的计算机*/P(computer); /*是否有可用的计算机*/分配计算机;V(enter); /*设置学生 1 可进入标志*/V(enter); /*设置学生 2 可进入标志*/untile false End;Parend;在 student 进程中,如果在一个学生到达后,立即向 gateguard 进程发信号,在 gateguard 进程为其分配计算机后,该学生才被允许进入机房,因此避免了让该学生争夺计算机的使用
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号