操作系统同步例题.doc

上传人:scccc 文档编号:12629812 上传时间:2021-12-05 格式:DOC 页数:5 大小:61KB
返回 下载 相关 举报
操作系统同步例题.doc_第1页
第1页 / 共5页
操作系统同步例题.doc_第2页
第2页 / 共5页
操作系统同步例题.doc_第3页
第3页 / 共5页
亲,该文档总共5页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《操作系统同步例题.doc》由会员分享,可在线阅读,更多相关《操作系统同步例题.doc(5页珍藏版)》请在三一文库上搜索。

1、13. 对于生产者消费者问题,假设缓冲区是无界的,试用信号灯与 PV 操作给出解法。答:由于是无界缓冲区, 所以生产者不会因得不到缓冲区而被阻塞, 不需要对空缓冲区进行 管理,可以去掉在有界缓冲区中用来管理空缓冲区的信号量及其PV操作。semaphore mutex_in=1; semaphore mutex_out=1;semaphore empty=0;int in=0 , out=0;生产者活动:while(1)produce next product;P(mutex_in);add the product to bufferin; in+;v(mutex_in);V(empty);消费

2、者活动:while(1)P(empty);P(mutex_out);take the product from bufferout; out+;V(mutex_out);14. 设有一个可以装 A、B两种物品的仓库, 其容量无限大,但要求仓库中A B两种物品的数量满足下述不等式 : -Me A物品数量一B物品数量w N其中M和N为正整数。 试用信号灯和PV操作描述 A B两种物品的入库过程。答:已知条件-MWA物品数量一B物品数量w N可以拆成两个不等式,即A物品数量一B物品数量w N,B物品数量一A物品数量w M这两个不等式的含义是:仓库中 A物品可以比B物品多,但不能超过 N个;E物品可以

3、比 A 物品多,但不能超过 M个。semaphore a=n; semaphore b=m; void main() createprocess(A, ); createprocess(B, );A物品入库:void A()while(1)B 物品入库:void B()while(1)P(a);A物品入库;V(b);P(b);B物品入库;V(a);15. 试用信号灯与PV操作实现司机与售票员之间的同步问题。设公共汽车上有一个司机 和一个售票员,其活动如下图 所示。肓懸的活动:Pl:cbP2;如关车门:启动车痢:正寄车;售票;到站停车:开车门;Mile ,为了安全起见,显然要求:(1)关车门后方

4、能启动车辆;(2)到站停车后方能开车门。 亦即“启 动车辆”这一活动应当在“关车门”这一活动之后,“开车门”这一活动应当在“到站停车” 这一活动之后。解:如果进程P2尚未推进到处时, 进程P1已经推进到处,则P1应等待直到P2推进到 处为止;同样,如果进程P1尚未推进到处时,进程 P2已经推进到处,则 P2应等待直到P1推进到处为止。如果进程P1在处发生了等待,则当进程P2执行到处时应将P1唤醒;同样,如果进程 P2在处发生了等待,则当进程P2执行到处时应将 P1唤醒。用信号量和P、V操作解决这一问题,需要定义两个信号量,一个信号量start表示是否允许司机启动车辆,另一个信号量open表示是

5、否允许售票员开车门。初始状态是车停在始发站,车门开着,等待乘客上车。因此,两个信号量的初值都是0。semaphore start=0; semaphore ope n=0;P2: do 关车门; V(start);隹西-口,P(ope n); 开车门;while (1);司机的活动:售票员的活动P1: do P(start);启动车辆; 正常行车; 到站停车;V(ope n); while (1);16. 设有A、B、C三组进程,它们互斥地使用某一独占型资源R,使用前申请,使用后释放。资源分配原则如下 :R;R,组内申请进程依次获得R;R,组内申请进程依次获得Ro(1) 当只有一组申请进程时,

6、该组申请进程依次获得(2) 当有两组申请进程时,各组申请进程交替获得(3) 当有三组申请进程时,各组申请进程轮流获得 试用信号灯和PV操作分别给出各组进程的申请活动程序段和释放活动程序段。解:int free=1;设自行车生产线上有一只箱子,其中有N个位置(N > 3),每个位置可存放一个车架或一个车轮; 又设有三个工人,其活动分别为 :工人 1 活动:工人 2 活动:工人 3活动:do do do 加工一个车架 ;加工一个车轮 ;箱中取一车架车架放入箱中 ;车轮放入箱中 ;箱中取二车轮while(1)while(1)组装为一台车while(1)试分别用信号灯与 PV操作、管程、会合实现

7、三个工人的合作,要求解中不含死锁。解:用信号灯与 PV操作实现三个工人的合作,管程与会合解法可仿照给出。首先不考虑死锁问题,工人 1 与工人 3、工人 2与工人 3构成生产者与消费者关系,这两对 生产/消费关系通过共同的缓冲区相联系。从资源的角度来看,箱子中的空位置相当于工人 1和工人2的资源,而车架和车轮相当于工人3的资源。定义三个信号灯如下:semaphore empty=N;一座小桥 (最多只能承重两个人 )横跨南北两岸, 任意时刻同一方向只允许一人过桥, 南侧桥段和北侧桥段较窄只能通过一人,桥中央一处宽敞,允许两个人通过或歇息。试用信号灯和PV操作写出南、北两岸过桥的同步算法。解:桥上

8、可能没有人,也可能有一人,也可能有两人。(a) 两人同时过桥 (b) 两人都到中间 (c) 南(北)来者到北 (南)段共需要三个信号量, load 用来控制桥上人数,初值为 2,表示桥上最多有 2 人; north 用来 控制北段桥的使用,初值为 1,用于对北段桥互斥; south 用来控制南段桥的使用,初值为 1,用于对南段桥互斥。semaphore load=2; semaphore north=1; semaphore south=1;tonorth()P(load);P(south); 过南段桥 ; 到桥中间 V(south); P(north);过北段桥 ; 到达北岸 V(north

9、);V(load);tosouth() P(load); P(north); 过北段桥 ; 到桥中间 ; V(north); P(south); 过南段桥 ; 到达南岸 V(south); V(load);19. 某寺庙,有小和尚、老和尚若干庙内有一水缸,由小和尚提水入缸,供老和尚饮用。 水缸可容纳 30 桶水,每次入水、取水仅为 1 桶,不可同时进行。水取自同一井中,水井径 窄,每次只能容纳一个水桶取水。设水桶个数为5个,试用信号灯和 PV操作给出老和尚和小和尚的活动。semaphore empty=30;设系统中有5台类型相同的打印机,依次编号为15。又设系统中有n个使用打印机的进程,使用

10、前申请,使用后释放。 每个进程有一个进程标识,用于区别不同的进程。 每个进 程还有一个优先数, 不同进程的优先数各异。 当有多个进程同时申请时, 按照进程优先数由 高到低的次序实施分配。试用信号灯和PV操作实现对于打印机资源的管理,即要求编写如下函数和过程 : (1) 函数 require(pid , pri): 申请一台打印机。 参数 pid 为进程标识, 其值为 1 到 n 的整 数; pri 为进程优先数,其值为正整数 ; 函数返回值为所申请到打印机的编号,其值为 1 到 5 的整数 ;(2) 过程 return(prnt):释放一台打印机。参数 prnt 为所释放打印机的编号,其值为

11、1到 5 的整数。解:#define N 5 bool flagN+1;/flag0 表示可用打印机数 ,1 表示空闲/flagi 表示第 i 号打印机的状态( 1<=i<=N ), 0表示占用, PCB *queue=NULL;/ 进程阻塞队列semaphore mutex_flag=1;/ 用于对 flag 数组的互斥操作 semaphore mutex_queue=1;/ 用于对阻塞队列的互斥操作process(int i,int priority)int print;print=require(i,priority);use print;return(print);int

12、require(int pid,int priority)P(mutex_flag);if(flag0>0)flag0-;for(int i=1;i<N+1;i+)if(flagi=1)flagi=0;break;V(mutex_flag);return i;elseV(mutex_flag);p(mutex_queue);将进程 pid 按其优先数插入到等待队列 queue 中;V(mutex_queue);return(int print)P(mutex_flag); if(queue=NULL) flag0+;flagprint=1;V(mutex_flag);elseV(mutex_flag);p(mutex_queue);将 print 分配给 queue 队首进程;queue 下移;V(mutex_queue);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1