进程同步典型例题(操作系统)

合集下载

OS进程同步(信号量典型题)

OS进程同步(信号量典型题)

例题1(北京大学1999年)有一个仓库,可以存放A和B两种产品,仓库的存储空间足够大,但要求:(1)一次只能存人一种产品((A或B);(2)一N< A产品数量一B产品数量<M其中,N和M是正整数。

试用“存放A’和‘存放B’以及P操作和V操作描述产品A和产品B的人库过程。

解答:应先将表达式转换成制约条件,不可在程序中直接使用该表达式将表达式分解为:B产品数量—A产品数量<NA产品数量—B产品数量<M可这样理解:(1)若只放人A产品,而不放入B产品,则A产品最多可放M—1次便被阻塞,即A进程每操作一次就应当将计数器减1(计数器初值为M—1),当计数器值为0时,进程程A被阻塞;每当放入一个B产品,则可令A产品的计数器增加1,表明A产品可以多一次放入产品的机会;同理,(2)若只放人B产品,而不放入A产品,则B产品最多可;放N一1次便被阻塞,即A进程每操作一次就应当将计数器减1(计数器初值为N—1)。

当计数器值为0时,进程B被阻塞;每当放人一个A产品,则可令B产品的计数器增加1,表明B产品可以多一次放入产品的机会。

由此可见,该问题是一个同步控制问题。

又因为一次仅允许一种产品人库,设置信号量mutex控制粮进程互斥访问临界资源(仓库)。

过程如下:beginmutex:=1;Sa := M-1;Sb := N-1;ParbeginA产品beginrepeatP (Sa);P (mutex);A人库;V (mutex);V (Sb);Until false;End;B产品beginrepeatP (Sb);P (mutex);B人库;V (mutex);V (Sa);Until false;End;rend;例题2(华中理工大学1999年试题)设公共汽车上,司机和售票员的活动分别是:司机:售票员:启动车辆上乘客正常行车关车门到站停车售票开车门下乘客在汽车不断地到站,停车,行驶过程中,这两个活动有什么同步关系?并用信号灯的P, V操作实现它们的同步。

计算机操作系统习题及答案(4)

计算机操作系统习题及答案(4)

第4章进程同步与通信1)选择题(1)在操作系统中,P、V操作是一种_D__。

A. 机器指令B. 系统调用命令C. 作业控制命令D. 低级进程通信原语(2)若信号量S的初值为2,当前值为-1,则表示有_B__等待进程。

A. 0个B. l个C. 2个D. 3个(3)在直接通信方式中,系统提供两条通信原语进行发送和接收,其中Send原语中参数应是_C_。

A. sender,messageB. sender,mailboxC. receiver,messageD. receiver,mailbox(4)下述那个选项不是管程的组成部分_A__。

A. 管程外过程调用管程内数据结构的说明B. 管程内对数据结构进行操作的一组过程C. 局部于管程的共享数据说明D. 对局部于管程的数据结构设置初值的语句(5)某通信方式通过共享存储区来实现,其属于_D__。

A. 消息通信B. 低级通信C. 管道通信D. 高级通信(6)用P、V操作管理临界区时,信号量的初值应定义为__C__。

A. -1B. 0C. 1D. 任意值(7)临界区是_B__。

A. 一个缓冲区B. 一段程序C. 一段共享数据区D. 一个互斥资源(8)信箱通信是一种_D__通信方式。

A. 直接通信B. 信号量C. 低级通信D. 间接通信(9)对于两个并发进程,设互斥信号量为mutex,若mutex=0则__A_。

A. 表示有一个进程进入临界区B. 表示没有进程进入临界区C. 表示有一个进程进入临界区,另一个进程等待进入D. 表示有两个进程进入临界区(10)对信号量S执行V操作后,下述选项正确的是_C__。

A. 当S小于等于0时唤醒一个阻塞进程B. 当S小于0时唤醒一个阻塞进程C. 当S小于等于0时唤醒一个就绪进程D. 当S小于0时唤醒一个就绪进程(11)在消息缓冲通信中,消息队列属于_A__资源。

A. 临界B. 共享C. 永久D. 可剥夺(12)在消息缓冲通信机制中,使用的临界资源是_D__。

操作系统-进程同步-信号量练习题

操作系统-进程同步-信号量练习题

1【单选题】用P、V操作管理临界区时,互斥信号量的初值应定义为( A)。

•A,1•B,0•C,-1•D,任意值2【单选题】在操作系统中,对信号量S的P原语操作定义中,使进程进入相应等待队列等待的条件是( )。

•A,S>0•B,S = 0•C,S<0•D,S<>0我的答案:C3【单选题】信号量S的初值为8,在S上执行了10次wait 操作,6次signal操作后,S的值为(D )。

•A,10•B,8•C,6•D,4P操作每执行一次,信号量减1;V操作每执行一次,信号量加1.所以答案为8-10+6 = 44【单选题】用V操作唤醒一个等待进程时,被唤醒进程的状态应变成( B)状态。

•A,执行•B,就绪•C,阻塞•D,挂起被唤醒的进程由等待状态变为就绪状态。

5【单选题】利用Wait和signal操作可以( )。

•A,实现进程互斥和同步•B,检测死锁•C,解除死锁•D,防止死锁我的答案:A6【单选题】两个并发进程,设互斥信号量mutex(初值为1),若信号量=0;则(B )•A,表示没有进程进入临界区•B,表示有一个进程进入临界区•C,表示有一个进程进入临界区,另一个进程等待进入•D,表示两个进程进入临界区临界区不允许两个进程同时进入,D选项明显错误。

mutex初值为1,表示允许一个进程进入临界区,当有一个进程进入临界区且没有进程等待进入时,mutex值减1,变为0。

7【单选题】V操作是对信号量执行加1操作,意味着释放一个单位资源,加1后如果信号量的值等于零,则从等待队列中唤醒一个进程,现进程变为等待状态,否则现进程继续进行。

•A,对•B,错我的答案:B8【单选题】有3个进程,两台打印机,用wait和sigual操作来实现互斥访问打印机,则信号量S的取值范围是( )•A,2,1,0,-1•B,3,2,1,0•C,2,1,0,-1,-2•D,1,0,-1,-2我的答案:如果n个进程共享两个打印机,信号量取值范围:-(n-2)~2;9【单选题】设与某资源相关的资源信号量K,初值为3,当前值为1,则可用资源个数为( ),等待资源的进程数为( )。

进程同步例题

进程同步例题

1.若有一个文件F,供进程共享。

现把进程分成A、B两组,规定同组的进程可以同时读文件F,但当有A组(或B组)的进程在读文件F时不允许B组(或A组)的进程读文件F。

现定义两个计数器C1和C2分别记录A组和B组中读文件F的进程数。

当用P、V操作进行管理时需要三个信号量Sl、S2和SAB才能保证正确的并发执行。

程序结构如下:Begin Sl,S2,SAB:semaphore;C1,C2:integer;S1:=1;S2:=1 ;SAB:=1;C1:=0;C2:=0;cobeginprocess Ai(i=1,2,…)begin((1));C1:=C1十1;if Cl=1 then((2));((3));read file F((4))C1:=C1—1;if Cl=0 then((5))((6));end;process Bj(j=1,2,…)begin((7));C2:=C2十1;if C2=1 then((8));((9));read file F;((10));C2:=C2—1;if C2=0 then((11));((12));end;coend;end;回答:1.说明信号量S1,S2,SAB的作用2. 在上述程序的括号内填入适当的P、V操作,完善该程序。

2.一座山上有一个隧道,规定每次只允许一列火车过隧道,现在南方北方都有车要过隧道,如果把每个过隧道者看作一个进程,为保证安全.请用PV操作实现正确管理。

3.桌上有一个空盒,盒内只允许放一个水果,甲可向盒内放苹果,乙可向盒内放桔子。

丙专等吃盒中的苹果,丁专等吃盒中的桔子,若盒内已有水果,放者必须等待,若盒内没有自己要吃的水果,吃者必需等待,请回答下列问题:(1)请给出四个之间的同步互斥关系。

(2)用Pv操作来协调四人的关系,应设置的信号量及其初值。

(3)写出用PV操作实现四人正确活动的程序。

1.(1)S1是对计数器Cl的互斥信号量,S2是对计数器C2的互斥信号量,SAB是A、B两组互斥信号量。

操作系统 经典同步问题

操作系统 经典同步问题
Monitor is a software module: procedures,initialize serial and local data. Chief characteristics Local data variables are accessible only by the monitor Process enters monitor by invoking one of its procedures Only one process may be executing in the monitor at a time
2018年4月26日星期四10时2分37秒17进程操作总结续waitpsignalv操作必须成对出现有一个waitp操作就一定有一个signalv操作当为互斥操作时它们同处于同一进程当为同步操作时则不在同一进程中出现如果waits1和waits2两个操作在一起那么wait操作的顺序至关重要一个同步wait操作与一个互斥wait操作在一起时同步wait操作在互斥wait操作前
2014年1月5日星期日7时 23分483分48秒
2
Producer
producer: while (true) { /* produce item v */ b[in] = v; in++; }
2014年1月5日星期日7时 23分48秒 3
Consumer
consumer: while (true) { while (in <= out) /*do nothing */; w = b[out]; out++; /* consume item w */ }
2014年1月5日星期日7时 23分48秒 4
Producer/Consumer Problem

经典进程同步问题

经典进程同步问题
7
04 03 02 01
解:(1)设置信号量的情况:
设互斥信号量wmutex,初值为1,用于实现写 者与其它写者或读者互斥地访问共享数据对象。
互斥信号量rmutex,初值为1,用于实现读者 互斥地访问读者计数器变量。
设整型变量RC,初值为0,用于对读者进行计 数。
(2)算法描述
,则P(wmutex); RC加1; V(rmutex); 读数据对象; P(rmutex); RC减1; 若RC=1,则v(wmutex); V(rmutex);
202X
操作系统原理 第三章 进程管 理之三
单击此处添加文本具体内容,简明扼要地 阐述你的观点
1
生产者与消费者问题 2、读者与写者问题 3、哲学家就餐问题
CONTENTS
01 单击此处添加标题
02 单击此处添加标题
2
生产者与消费者
引言:
问题描述:一组生产者进 程通过一个具有n个缓冲区 的缓冲池循环不断地向一 组消费者提供产品,怎样 才能正确描述这两个进程?
….. 思考; until false; end
14
02
时间内只允许一位哲学家试用。
03
设五个信号量用数组来描述:
var stick:arr[0,…,4] of
04
semaphore;
算法描述:
process 哲学家 begin
repeat p(stick[i]); p(stick[(i+1)mod 5]); …… 吃通心粉; …… p(stick[i]); p(stick[(i+1)mod 5]);
3
1 解:(1)设置信号量 的情况:
设同步信号量
2 empty,初值为n, 表示生产者有n个 空缓冲区可用。

操作系统进程同步

操作系统进程同步

司机 P1: 启动 正常运行 到站停
售票员 P2: 关门 售票 开门
用P、V原语实现进程同步
解: 1)设close为进程P1的私有信号量,表示 售票员是否关门,stop为进程P2的私有 信号量,表示车辆是否停止到站。 2)设初始值close=1,stop=0,表示车正 在运行。 3)描述:
用P、V原语实现进程同步
工人2的活动: Do{ 加工一个车轮; 将车轮放入箱子中; }while(1)
工人3的活动 Do{ 从箱子中取1个车架; 从箱子中取2个车轮; 组装为一辆车; }while(1); 用信号量与PV操作实现3个工人的合作,要求不 包含死锁。
Hale Waihona Puke 答案Proess P2 While (true){ P(odd); P(mutex); getodd(); V(mutex); V(empty); countodd(); }
答案
Proess P2 While (true){ P(even); P(mutex); geteven(); V(mutex); V(empty); counteven(); } }coend
1每次只能存入一种产品a或b1每次只能存入2a产品数量b产品数量m3b产品数量a产品数量n期中mn是正整数试用pv操作描述产品a和b的入库过程种产品a或b有桥如图所示车流如箭头所示桥上不允许两车交汇但允许同一方向多辆车依次通行即桥上可以有多个同方向的依次通行即桥上可以有多个同方向的车
进程同步
补充
练习
P1: A:P(close)
启动 行车 停车 P2: B:P(stop)
开门
关门
V(close)
售票 Goto B
V(stop)
Goto A

操作系统自测题三(进程同步)

操作系统自测题三(进程同步)

操作系统自测题三一选择题1.以下________操作系统中的技术是用来解决进程同步的。

A.管道B.管程C.通道D.DMA2.以下________不是操作系统的进程通信手段。

A.管道B.原语C.套接字D.文件映射3.如果有三个进程共享同一程序段,而且每次最多允许两个进程进入该程序段,则信号量的初值应设置为________。

A.3B.2C.1D.04.下面有关进程的描述,________是正确的。

A.进程执行的相对速度不能由进程自己来控制B.进程利用信号量的P、V操作可以交换大量的信息C.并发进程在访问共享资源时,不可能出现与时间有关的错误D.P、V操作不是原语操作5.信号可以用来实现进程之间的________A.调度B.同步与互斥C.同步D.互斥6.对于两个并发进程都想进入临界区,设互斥信号量为S,若某时S=0,表示________。

A.没有进程进入临界区B.有1个进程进入了临界区C.有2个进程进入了临界区D.有1个进程进入了临界区并且另一个进程正等待进入7.信箱通信是一种________方式。

A.直接通信B.间接通信C.低级通信D.信号量8.以下关于临界区的说法,________是正确的。

A.对于临界区,最重要的是判断哪个进程先进入B.若进程A已进入临界区,而进程B的优先级高于进程A,则进程B可以打断进程A而自己进入临界区C.信号量的初值非负,在其上只能做P、V操作D.两个互斥进程在临界区内,对共享变量的操作是相同的9.并发是指________。

A.可平行执行的进程B.可先后执行的进程C.可同时执行的进程D.不可中断的进程10.临界区是________。

A.一个缓冲区B.一段数据区C.一段程序D.栈11.进程在处理机上执行,它们的关系是________。

A.进程之间无关,系统是封闭的B.进程之间相互依赖、相互制约C.进程之间可能有关,也可能无关D.以上都不对12.在单处理机中,如果系统中有N个进程,则就绪队列中的进程个数最多的是________。

(完整版)操作系统-进程同步习题答案(22)

(完整版)操作系统-进程同步习题答案(22)
4.进程从阻塞状态转换到就绪状态的可能原因是(BC ).
A.时间片完B.其它进程执行了唤醒原语
C.执行了V操作D.执行了P操作
5.在单处理机系统中,设系统中有n个进程(n>2),且当前处理机没有执行进程调度程序,下述情况哪些可能发生( BCD)。
A.没有运行的进程,有2个进程处于就绪状态,n个进程处于等待状态。
A.临界资源是非共享资源 B.临界资源是任意共享资源
C.临界资源是互斥共享资源 D.临界资源是同时共享资源
4.对进程间互斥地使用临界资源,进程可以(D)
A.互斥地进入临界区 B.互斥地进入各自的临界区
C.互斥地进入同一临界区 D.互斥地进入各自的同类资源的临界区
5.设两个进程共用一个临界资源的互斥信号量mutex,当mutex=1时表示( B )。
〈进程P1〉〈进程P2〉
y:=1; x:=1;
y:=y+2; x:=x+1;
V(S1); P(S1);
z:=y+1; x:=x+y;
P(S2);V(S2);
y:=z+y; z:=x+z;
解:
因为P1和P2是两个并发进程,所以进程调度程序调度P1和P2的顺序是不确定的。
这里不妨假设P1先执行。进程P1执行到语句P(S2)时,S2=-1,进程P1阻塞。此时,y=3,z=4。当进程调度程序调度到进程P2时,由于进程P1已执行了V(S1),进程P2在执行P(S1)时并未阻塞而继续执行,当执行到V(S2)时,将P1唤醒,然后执行最后一个语句z:=x+z,此时x=5,z=9。当进程P1再次被调度时,继续执行P1的最后一个语句,此时y=12,最终结果是:x=5,y=12,z=9。
A.4 B.3 C.5 D.0

[操作系统]经典进程同步问题题库

[操作系统]经典进程同步问题题库

1、测量控制系统中的数据采集任务把所采集的数据送一单缓冲区;计算任务则从该缓冲区中取出数据并进行计算。

试写出利用信号量机制实现两者共享单缓冲区的同步算法。

Var Sempty,Sfull: semaphore:= 1,0BeginParbeginCollection:beginrepeat采集一个数据;wait(Sempty);数据放入缓冲区;signal(Sfull);untill false;end;Compute:beginrepeatwait(Sfull);从缓冲区取出数据;signal(Sempty);计算;` until false;end;ParendEnd2、有一阅览室,共有100个座位。

读者进入时必须先在一种登记表上登记,该表为每一座位列一个表目,包括座号和读者姓名。

读者离开时要注销掉登记内容。

试用wait和signal原语描述读者进程的同步问题。

var mutex, readcount :semaphore := 1,100; BeginParbeginProcess Reader:beginrepeatwait(readcount);wait(mutex);<填入座号和姓名完成登记>;signal(mutex);<阅读>wait(mutex)<删除登记表中的相关表项,完成注销>signal(mutex);signal(readcount);until false;end;parend;End;1)、桌上有一空盘,只允许放一个水果,爸爸专向盘中放苹果,妈妈专向盘中放桔子;女儿专吃盘中的苹果,儿子专吃盘中的桔子;试用wait 和signal原语实现爸爸、妈妈、女儿、儿子之间的同步问题。

var Sempty, Sapple, Sorange,: semaphore:= 1,0,0; beginparbeginFather: beginrepeatwait(Sempty);<put apple in tray>;signal(Sapple);until false;end;Mother: beginrepeatwait(Sempty);<put orange in tray>;signal(Sorange);until false;end;Son: beginrepeatwait(Sorange);<take orange>;signal(Sempty);until false;end;Daughter: beginrepeatwait(Sapple);<take apple>;signal(Sempty);until false;end;parend;end;1、在4×100米接力赛中,4个运动员之间存在如下关系,运动员1跑到终点把接力棒交给运动员2;运动员2一开始处于等待状态,在接到运动员1传来的接力棒后才能往前跑,他跑完100米后交给运动员3,运动员3也只有在接到运动员2传来的棒后才能跑,他跑完100米后交给运动员4,运动员4接到棒后跑完全程。

操作系统第3章(进程的同步与通信习题与解答)

操作系统第3章(进程的同步与通信习题与解答)

第3章进程的同步与通信习题与解答3.2 例题解析例3.2.1 多道程序系统程序的执行失去了封闭性和再现性,因此多道程序的执行不需要这些特性,这种说法是否正确?解这种说法不正确。

可以想象,如果一个程序在多道程序系统中,在相同的输入的情况下,多次执行所得结果是不同的,有谁还敢使用这个程序?因此,多道程序的执行也需要封闭性和再现性,只不过单道程序系统的封闭性和再现性是先天固有的,多道程序系统的程序执行要想获得封闭性和再现性,需通过程序员的精心设计才能得到。

所使用的方法就是同步和互斥的方法。

例3.2.2 多个进程对信号量S进行了5次 P操作,2次V操作后,现在信号量的值是 -3,与信号量S相关的处于阻塞状态的进程有几个?信号量的初值是多少?解(1) 因为S的当前值是-3,因此因为S处于阻塞状态的进程有3个;(2) 因为每进行一次P(S)操作,S的值都减1,每执行1次V操作S的值加1,故信号量的初值为-3+5-2=0;例3.2.3 如下锁的实现方法存在什么缺点?如何改进?LOCK(X) UNLOCK(X){ {do while X=1 ; X=0;X=1} }解存在的缺点是:当锁是关闭时,采用的是循环等待的方法,这样的等待还是要占用处理机的时间,应该采用阻塞等待的方法。

改进的锁实现如下:LOCK(X) UNLOCK(X){ {if X.value=1 if not empty(X.L) { insert( *, X.L); { P=remove(X.L);Block (*) Wakeup(P) } }else X.Value=1 else X.Value=0} }这里X.value是锁的值,X.L是存放由于锁X而阻塞的进程的队列。

insert( *, X.L)将当前进程的进程号插入到X.L,remove(X.L)是从X.L中移出一个进程号。

例3.2.4 使用多个进程计算Y=F1(X)+F2 (X).解(1) 确定并发和顺序操作在这个问题中,F1(X)和F2 (X)的计算是可以并行处理的,因此F1(X)和F2 (X)可以分别出现在两个进程中。

操作系统进程部分的习题

操作系统进程部分的习题

进程部分的习题1. 在公共汽车上,司机进程和售票员进程各司其职。

司机在正常行车中售票员售票,两者之间没有制约关系,可以任意并发。

但是在其他环节,司机和售票员进程之间存在着如下同步关系:1)司机停车后等待售票员关门后才能启动车辆。

2)售票员售完票后,等待司机到站停车,停车后才能打开车门。

var door,stop:semaphore:=0,0beginparbegin司机进程:beginwhile(true){wait(door); //等待售票员发送关门信息启动车辆;正常行车;到站停车;signal(stop);//给售票员发送到站信息}end;售票员进程:beginwhile(true){关车门;signal(door); //给司机发送关门信息售票;wait(stop);//等待司机发送到站信息开车门;上下乘客;}endparendend.2.某寺庙,有小和尚,老和尚若干。

有一水缸,由小和尚提水入缸供老和尚饮用。

水缸可容10桶水,水取自同一井中。

水井径窄,每次中能容下一个桶取水。

水桶总数为3个。

每人一次取缸水仅为1桶,且不可同时进行。

试用记录型信号量给出有关取水、入水的算法描述。

根据题意,定义信号量及其初值如下:(1)水桶为临界资源需互斥使用,定义信号量bucket,因有3个桶,故初值为3;(2)水井一次只能允许下一个桶取水,定义互斥信号量well,初值为1;(3)水缸一次只能允许一个人取水,定义互斥信号量jar,初始值为1;(4)empty和full用于小和尚和老和尚之间的同步制约关系。

因为缸能存10桶水,所以empty初始值为10;开始时缸中没有水,full的初始值为0。

semaphore bucket=3,jar=1,full=0,empty=10,well=1; young_monk(){ /*小和尚入水算法*/while(1){wait(empty);wait (bucket);wait (well);从水井中打水;signal(well);wait (jar);倒入水缸;signal (jar);signal (bucket);signal (full);}}old_monk(){ /*老和尚取水算法*/while(1){wait(full);wait (bucket);wait (jar);从缸中取水;signal (jar);signal (bucket);signal (empty);从桶中倒入饮用;}}3.设有3个进程A、B、C,其中A与B构成一对生产者与消费者(A为生产者,B为消费者),共享一个由n个缓冲区组成的缓冲池;B与C也构成一对生产者与消费者(此时B为生产者,C为消费者),共享另一个由m个缓冲区组成的缓冲池。

进程同步问题实例PPT课件

进程同步问题实例PPT课件

REPORT
CATALOG
DATE
ANALYSIS
SUMMAR Y
03
进程同步问题的解决方 案
使用信号量解决生产者-消费者问题
生产者-消费者问题描述
生产者和消费者共享一个缓冲区,生产者将数据放入缓冲区,消费者从缓冲区取出数据。 当缓冲区满时,生产者需要等待消费者消费数据;当缓冲区为空时,消费者需要等待生
SUMMAR Y
05
进程同步问题的应用场 景
并行计算中的进程同步问题
01
任务划分
资源共享
02
03
结果整合
在并行计算中,进程需要同步以 划分任务和确定任务执行的顺序。
进程在并行计算中需要同步以避 免资源竞争和死锁,确保资源使 用的正确性和安全性。
并行计算中的进程需要同步以整 合各个进程的计算结果,确保最 终结果的正确性。
使用并发编程语言提供的机制实现进程同步
通道(Channel)
事件(Event)
信号(Signal)
通道是一种用于进程间通信的机制,可以用 于实现同步操作。通过通道,一个进程可以 将消息发送给另一个进程,接收消息的进程 在接收到消息后可以继续执行后续操作。
事件是一种特殊的信号量,用于实现 进程间的同步。一个进程可以等待某 个事件的发生,当事件发生时,该进 程会被唤醒并继续执行后续操作。
产者生产数据。
信号量解决思路
使用两个信号量,一个表示缓冲区的空闲数量,一个表示缓冲区的总容量。当生产者生产数据时,需要先获 取空闲缓冲区的信号量,然后将数据放入缓冲区并释放一个空闲缓冲区的信号量;当消费者消费数据时,需
要先获取一个空闲缓冲区的信号量,然后从缓冲区取出数据并释放一个总容量的信号量。

操作系统_进程同步算法习题精选

操作系统_进程同步算法习题精选

A1: while (1) { P(Sin[1]); P(Sin[2]); 将数据放入缓冲区 V(Sout[1]); V(Sout[2]); }
Bi: while (1) { P(Sout[i]); 从缓冲区取数 V(Sin[i]); }
向目标前进一步:
• 设缓冲区的大小为m • 有一个发送进程A1 • 有二个接收进程B1、B2
Bi: while (1) { P(Sout[i]); V(mutex); 从缓冲区取数 P(mutex); V(Sin[i]); };
例题6
a,b两点之间是一段东西向的单行车道,现要设计一个自
动管理系统,管理规则如下: (1)当ab之间有车辆在行驶时同方向的车可以同时驶入ab 段,但另一方向的车必须在ab段外等待; (2)当ab之间无车辆在行驶时,到达a点(或b点)的车辆 可以进入ab段,但不能从a点和b点同时驶入; (3)当某方向在ab段行驶的车辆驶出了ab段且暂无车辆进
到达目标
• 设缓冲区的大小为m • 有n1个发送进程A1….An1 • 有n2个接收进程B1…Bn2
• 设有n2个信号量Sin[n2] 初值均为m • 设有n2个信号量Sout[n2] 初值均为0
Aj: while (1) { for(i=1;i<=n2;i++) P(Sin[i]); P(mutex); 将数据放入缓冲区 V(mutex); for(i=1;i<=n2;i++) V(Sout[2]); }
思考题: 如果S和T是由多个缓冲区组成的 缓冲池,上述算法将如何修改?
【例题3】
桌上有一空盘,最多允许存放一只水 果。爸爸可向盘中放一个苹果或放一个桔 子,儿子专等吃盘中的桔子,女儿专等吃 苹果。 试用P、V操作实现爸爸、儿子、女儿 三个并发进程的同步。

操作系统:进程同步三大经典问题

操作系统:进程同步三大经典问题

操作系统:进程同步三⼤经典问题⽇期:2019/4/15内容:进程同步;⽣产者与消费者;读写者;哲学家进餐;信号量机制。

⼀、⽣产者与消费者问题1.1 版本1代码void producer(){while (count == n);buff[in] = produce_item(); in = (in + 1) % n;count++;}void consumer(){while (count == 0) ;item = buff[out];print(item);out = (out + 1) % n; count--;}存在问题>>两个while循环⼀直在"忙等",不符合进程同步的"让权等待"原则。

>>对于count变量的访问没有保护。

(需要加锁保护)1.2 版本2:使⽤信号量代码semaphore empty = n, full = 0; void producer(){while (true){wait(empty);buffer[in] = produce_item(); in = (in + 1) % n;signal(full);}}void consumer(){while (true){wait(full);item = buffer[out]; print(item);out = (out + 1) % n; signal(empty);}}存在问题>>如果有2个producer进程,empty>=2时,同时进⼊wait(empty)之后的临界区,对于buff的写和in的写产⽣竞争。

>>如果有2个consumer进程,full>=2时,同时进⼊wait(full)之后的临界区,对于out的写产⽣竞争。

1.3 版本3:临界区加锁(正确版本)代码semaphore pmutex = 1, cmutex = 1; semaphore empty = n, full = 0; void producer(){while (true){wait(empty);wait(pmutex);buff[in] = produce_item();in = (in + 1) % n;signal(pmutex);signal(full);}}void consumer(){while (true){wait(full);wait(cmutex);item = buff[out];print(item);out = (out + 1) % n; signal(cmutex);signal(empty);}}注:教材对于producer和consumer的临界区都使⽤了同⼀个mutex,表⽰producer和consumer互斥进⼊临界区。

操作系统很全很详细的进程同步与互斥_问题

操作系统很全很详细的进程同步与互斥_问题
p1() { P(m1) ; 执行p1; V(m2) ; V(m3); p2() { P(m2) ; 执行p2; V(m4) ; p3() {
思考: 哪个信号量可以省略?
m1
p4() {
}
}
}
P(m3) ; 执行p3; V(m4) ;
}
P(m4) ; P(m4); 执行p4;
进程的同步

解法二:信号量表示进程是否结束。 设信号量m1、m2、m3、m4分别表示进程P1、P2、 P3、P4是否结束,其初值均为0。
p2() { while(1) { 关门; V(m2); 售票; P(m1); 开门; } }
进程的同步
例3-1:吃水果。
父亲
父亲 P1
水果 0
儿子
儿子 P2
while (true) { 洗水果; 放水果; }
while (true) { 取水果; 吃水果; }
进程的同步

分析:父亲先放水果,儿子再吃水果;儿子取完水果,父 亲再放水果,这两个进程是一个同步关系。 解法一:设信号量m1表示父亲能否放水果,m2表示儿子 能否取水果。其初值m1=1,m2=0。
S P1 P2
P3
P4
F
进程的同步

解法一:信号量表示进程能否开始。 设信号量m1、m2、m3、m4分别表示进程P1、P2、 P3、P4能否开始执行,其初值m1为1,其余均为0。
int m1=1,m2=m3=m4=0 ; cobegin p1() // P2() // P3() // P4() coend
进程的同步

分析:父母亲先放水果,儿子再取水果吃;父亲与儿子,母 亲与儿子是一个同步关系,父亲与母亲要竞争空盘子。 解法二:设信号量m1表示父亲或母亲放完水果,信号量m2 表示儿子取完水果。

进程同步典型例题(操作系统)

进程同步典型例题(操作系统)

进程同步练习题1.在公共汽车上,司机和售票员的工作流程如图所示。

为保证乘客的安全,司机和售票员应密切配合协调工作。

请用信号量来实现司机与售票员之间的同步。

司机售票员图司机和售票员工作流程图①约束:怎么密切配合协调工作才能保证安全呢?a)关车门之后再启动车辆;利用前驱图解释b)到站停车之后再开车门;②根据约束定义信号量;关车门和启动车辆需要一个信号量进行同步S1;到站停车和开车门之间需要一个信号量进行同步S2;③建立几个进程呢?a)为司机建立一个进程Driver;b)为售票员建立一个进程Conductor;Driver:Repeat启动车辆;正常行驶;到站停车;Until false;Conductor:Repeat关车门;售票;开车门;Until false;④加入同步关系:Driver:RepeatWait (s1);启动车辆;正常行驶;到站停车;Signal(s2)Until false;Conductor:Repeat关车门;Signal(s1);售票;Wait(s2)开车门;Until false;main(){Driver();Conductor ();}2.桌子上有一只盘子,盘子中只能放一只水果。

爸爸专向盘子中放苹果,妈妈专向盘子中放橘子,一个儿子专等吃盘子中的橘子,一个女儿专等吃盘子中的苹果。

用PV操作实现他们之间的同步机制。

分析:①约束:a)爸爸和妈妈竞争盘子,往盘子放水果,爸爸在放时,妈妈等待,或者相反;b)爸爸和女儿要同步,即爸爸放完苹果之后通知女儿来吃;同时女儿吃完之后要通知盘子可用;c)妈妈和儿子要同步,即妈妈放完橘子之后通知儿子来吃;同时儿子吃完之后要通知盘子可用;②经上述分析可知:需要3个信号量:S1表示临界资源盘子,初值1;爸爸和女儿需要一个信号量进行同步S2=0 妈妈和儿子需要一个信号量进行同步S3=0;③建立进程?爸爸:妈妈:女儿:儿子:取一个苹果;取一个橘子;从盘子取一个苹果;从盘子取一个橘子;放入盘子;放入盘子吃苹果;吃橘子;Until false; Until false; Until false; Until false;④加入同步关系。

计算机操作系统复习题目(2)

计算机操作系统复习题目(2)

第二章进程管理(三)进程同步5、经典同步问题1、生产者—消费者问题生产者消费者问题是一种同步问题的抽象描述。

计算机系统中的每个进程都可以消费(使用)或生产(释放)某类资源。

这些资源可以是硬件资源,也可以是软件资源。

当某一进程使用某一资源时,可以看作是消费,称该进程为消费者。

而当某一进程释放某一资源时,它就相当于生产者。

问题1:设某计算进程CP和打印进程IOP共用一个单缓冲区,CP进程负责不断地计算数据并送入缓冲区T中,IOP进程负责不断地从缓冲区T中取出数据去打印。

通过分析可知,CP、IOP必须遵守以下同步规则:(1)当CP进程把计算结果送入缓冲区时,IOP进程才能从缓冲区中取出结果去打印;(2)当IOP进程把缓冲区中的数据取出打印后,CP进程才能把下一个计算结果送入缓冲区.(3)为此设有两个信号量Sa=0,Sb=1,Sa表示缓冲区中有无数据,Sb表示缓冲区中有无空位置。

两个进程的同步可以描述如下:问题2:一组生产者通过具有N个缓冲区的共享缓冲池向一组消费者提供数据。

问题分析”:为解决生产者消费者问题,应该设两个同步信号量,一个说明空缓冲区的数目,用empty表示,初值为有界缓冲区的大小N,另一个说明已用缓冲区的数目,用full表示,初值为0。

由于在此问题中有M个生产者和N个消费者,它们在执行生产活动和消费活动中要对有界缓冲区进行操作。

由于有界缓冲区是一个临界资源,必须互斥使用,所以,另外还需要设置一个互斥信号量mutex,其初值为1。

问题的解:注意:在每个程序中用于实现互斥的P(mutex)和V(mutex)必须成对的出现对资源信号量empty和full的P和V操作,同样需要成对地出现,但它们分别处于不同的程序中。

在每个程序中的多个P操作顺序不能颠倒。

先同步后互斥。

生产者进程缓冲池消费者进程1┇┇i┇┇2、哲学家就餐问题有五个哲学家围坐在一圆桌旁,桌中央有一盘通心粉,每人面前有一只空盘子,每两人之间放一只筷子。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

进程同步练习题1.在公共汽车上,司机和售票员的工作流程如图所示。

为保证乘客的安全,司机和售票员应密切配合协调工作。

请用信号量来实现司机与售票员之间的同步。

司机售票员图司机和售票员工作流程图2.桌子上有一只盘子,盘子中只能放一只水果。

爸爸专向盘子中放苹果,妈妈专向盘子中放橘子,一个儿子专等吃盘子中的橘子,一个女儿专等吃盘子中的苹果。

用PV操作实现他们之间的同步机制。

3.a,b两点之间是一段东西向的单行车道,现要设计一个自动管理系统,管理规则如下:(1)当ab之间有车辆在行驶时同方向的车可以同时驶入ab段,但另一方向的车必须在ab 段外等待;(2)当ab之间无车辆在行驶时,到达a点(或b点)的车辆可以进入ab段,但不能从a 点和b点同时驶入;(3)当某方向在ab段行驶的车辆驶出了ab段且暂无车辆进入ab段时,应让另一方向等待的车辆进入ab段行驶。

请用信号量为工具,对ab段实现正确管理以保证行驶安全。

4.将只读数据的进程称为“读者”进程,而写或修改数据的进程称为“写者”进程。

允许多个“读者”同时读数据,但不允许“写者”与其他“读者”或“写者”同时访问数据。

另外,要保证:一旦有“写者”等待时,新到达的“读者”必须等待,直到该“写者”完成数据访问为止。

试用P、V操作正确实现“读者”与“写者”的同步。

(第二类读者写者问题,信号量解决方法)5.一条河上架设了由若干个桥墩组成的一座桥。

若一个桥墩只能站一个人,过河的人只能沿着桥向前走而不能向后退。

过河时,只要对岸无人过,就可以过。

但不允许河对岸的两个人同时过,以防止出现死锁。

请给出两个方向的人顺利过河的同步算法。

6.有一个仓库,可以存放A和B两种产品,但要求:(1)每次只能存入一种产品(A或B);(2)-N<A产品数量-B产品数量<M。

其中,N和M是正整数。

试用同步算法描述产品A与产品B的入库过程。

1、在公共汽车上,司机和售票员的工作流程如图所示。

为保证乘客的安全,司机和售票员应密切配合协调工作。

请用信号量来实现司机与售票员之间的同步。

司机售票员图司机和售票员工作流程图【答案】设置两个资源信号量:S1、S2。

S1表示是否允许司机启动汽车,其初值为0;S2表示是否允许售票员开门,其初值为0.semaphoere S1=S2=0;void Driver(){while(1){wait(S1);启动车辆;正常行车;到站停车;signal(S2);}}void Busman(){while(1){关车门;signal(S1);售票;wait(S2);开车门;}}main(){cobegin{Driver();Busman();}}2.桌子上有一只盘子,盘子中只能放一只水果。

爸爸专向盘子中放苹果,妈妈专向盘子中放橘子,一个儿子专等吃盘子中的橘子,一个女儿专等吃盘子中的苹果。

用PV操作实现他们之间的同步机制。

【答案】信号量S用来实现盘子的互斥访问,S1表示盘子中苹果个数,S2表示盘子中橘子的个数。

semaphore S=1,S1=S2=0;void father(){while(1){准备苹果;wait(S);将苹果放在盘子内;signal(S1);}}void mother(){while(1){准备橘子;wait(S);将橘子放在盘子内;signal(S2);}}void daughter(){while(1){wait(Sl);从盘子里拿走苹果;signal(S);吃苹果;}}void son(){while(1){wait(S2);从盘子里拿走橘子;signal(S);吃橘子;}}main(){cobegin{father();mother();daughter();son();}}3.a,b两点之间是一段东西向的单行车道,现要设计一个自动管理系统,管理规则如下:(1)当ab之间有车辆在行驶时同方向的车可以同时驶入ab段,但另一方向的车必须在ab 段外等待;(2)当ab之间无车辆在行驶时,到达a点(或b点)的车辆可以进入ab段,但不能从a 点和b点同时驶入;(3)当某方向在ab段行驶的车辆驶出了ab段且暂无车辆进入ab段时,应让另一方向等待的车辆进入ab段行驶。

请用信号量为工具,对ab段实现正确管理以保证行驶安全。

【答案】此题是读者-写者问题的变形。

设置3个信号量S1、S2和Sab,分别用于从a点进入的车互斥访问共享变量ab(用于记录当前ab段上由a点进入车辆的数量),从b点进入的车互斥访问共享变量ba(用于记录当前ab段上由b点进入车辆的数量)和a、b点的车辆互斥进入ab段。

3个信号量的初值分别为1、1和1,两个共享变量ab和ba的初值分别为0、0。

semaphore S1=1,S2=1,Sab=1;int ab=ba=0;void Pab(){while(1){wait(S1);if(ab==0)wait(Sab);ab=ab+1;signal(S1);车辆从a点驶向b点;wait(S1);ab=ab-1;if(ab==0)signal(Sab);signal(S1);}}void Pba(){while(1){wait(S2);if(ba==0)wait(Sab);ba=ba+1;signal(S2);车辆从b点驶向a点;wait(S2);ba=ba-1;if(ba==0)signal(Sab);signal(S2);}}main(){cobegin{Pab();Pba();}}4. 将只读数据的进程称为“读者”进程,而写或修改数据的进程称为“写者”进程。

允许多个“读者”同时读数据,但不允许“写者”与其他“读者”或“写者”同时访问数据。

另外,要保证:一旦有“写者”等待时,新到达的“读者”必须等待,直到该“写者”完成数据访问为止。

试用P、V操作正确实现“读者”与“写者”的同步。

(第二类读者写者问题,信号量解决方法)【答案】为了使写者优先,可在原来的读优先算法的基础上增加一个互斥信号量s,初值为1,使得当至少有一个写者准备访问共享对象时,它可以使后续的读者进程等待;整型变量writecount,初值为0,用来对写者进行计数;互斥信号量wmutex,初值为1,用来实现多个写者对writecount进行互斥访问。

Process reader(){ while(1){wait(s);wait(rmutex);if(readcount==0)wait(mutex);readcount++;signal(rmutex);signal(s);perform read operation;wait(rmutex);readcount--;if(readcount==0)signal(mutex);signal(rmutex);}}Process writer(){ while(1){wait(wmutex);if(writecount==0)wait(s);writecount++;signal(wmutex);wait(mutex);perform write operation;signal(mutex);wait(wmutex);writecount--;if(writecount==0)signal(s);signal(wmutex);}}Main( ){cobegin{ reader();writer();}}5. 一条河上架设了由若干个桥墩组成的一座桥。

若一个桥墩只能站一个人,过河的人只能沿着桥向前走而不能向后退。

过河时,只要对岸无人过,就可以过。

但不允许河对岸的两个人同时过,以防止出现死锁。

请给出两个方向的人顺利过河的同步算法。

【答案】信号量s:互斥使用桥,初值为1信号量scount1:对方向1上过河人计数器count1的互斥使用,初值为1信号量scount2:对方向2上过河人计数器count2的互斥使用,初值为1信号量scount:代表桥上过河人的计数信号量,初值为桥墩个数N变量count1:方向1上过河人计数器变量count2:方向2上过河人计数器Semaphore s, scount1, scount2, scount; int count1, count2;s=1; scount1=1; scount2=1; scount=N; count1=0; count2=0;void direct1(int i){wait(scount1);if(count1==0)wait(s);count1++;signal(scount1);wait(scount);上桥,过桥,下桥;signal(scount);wait(scount1);count1--;if(count1==0)signal(s);signal(scount1);}void direct2(int i){wait(scount2);if(count2==0)wait(s);count2++;signal(scount2);wait(scount);上桥,过桥,下桥;signal(scount);wait(scount2);count2--;if(count2==0)signal(s);signal(scount2);}main(){cobegin{direct1(1);…direct1(n);direct2(1);…direct2(m);}}6、有一个仓库,可以存放A和B两种产品,但要求:(1)每次只能存入一种产品(A或B);(2)-N<A产品数量-B产品数量<M。

其中,N和M是正整数。

试用同步算法描述产品A与产品B的入库过程。

【答案】A产品的数量不能比B产品的数量少N个以上,A产品的数量不能比B产品的数量多M个以上.设置两个信号量来控制A、B产品的存放数量,sa表示当前允许A产品比B产品多入库的数量(当前允许A产品入库数量),即在当前库存量和B产品不入库的情况下,还可以允许sa个A产品入库;sb表示当前允许B产品比A产品多入库的数量(当前允许B产品入库数量),即在当前库存量和A产品不入库的情况下,还可以允许sb个B产品入库。

初始时,sa为M一1,sb为N一1。

当往库中存放入一个A产品时,则允许存入B产品的数量也增加1;当往库中存放入一个B产品时,则允许存入A产品的数量也增加1。

semaphore mutex=1,sa=M-1,sb=N-1;process puta(){ while(1){ 取一个产品;wait(sa);wait(mutex);将产品入库;signal(mutex);signal(sb);}}process putb(){ while(1){ 取一个产品;wait(sb);wait(mutex);将产品入库;signal(mutex);signal(sa);}}main(){ cobegin{puta();putb();}}。

相关文档
最新文档