操作系统同步例题

合集下载

操作系统练习同步问题有答案

操作系统练习同步问题有答案

操作系统练习题:1 在南开大学和大学之间有一条弯曲的小路,其中从S到T一段路每次只允许一辆自行车通过,但中间有一个小的“安全岛”M(同时允许两辆自行车停留),可供两辆自行车已从两端进小路情况下错车使用,如图所示。

试设计一个算法使来往的自行车均可顺利通过。

解答:首先中间的安全岛M仅允许两辆自行车通过,应作为临界资源设置信号量。

但仔细分析发现,在任何时刻进入小路的自行车最多不会超过两辆(南开和天大方向各一辆),因此不需为安全岛M设置信号量。

在路口S处,南开出发的若干辆自行车应进行路口资源的争夺,以决定谁先进入小路SK段,为此设置信号量S,用以控制路口资源的争夺;同理,设置信号量T,控制天大方向自行车对路口T的争夺。

又小路SK段仅允许一辆车通过,设置信号量SK初值为1,同理设置小路LT段信号量LT初值为1。

程序如下:S := l; T:=1; SK :=1; LT:=1;Parbegin进程P:(南开方向自行车)beginP(S) ; {与其它同方向的自行车争夺路口S}P(SK); {同对面自行车争夺路段SK}通过SK;进入M;**V (SK);{一旦进入M,便可释放路段SK}P (LT) ; {同对面的自行车争夺路段LT}通过LT;V (LT);{将路段LT释放}V(S); {将路口S释放给同方向的正在路口S处等待的自行车}end,进程Q:(天大方向自行车)beginP(T);P(LT);通过LT;进入M;V(LT);P(SK);通过SK;V(SK);V(T);End;Parend。

说明**:P进程进入安全岛M后,释放了路段SK,但没有释放路口S,原因在于它是向对面的4进程释放路段资源SK,而在P进程离开小路LT后,才会将路口S 释放给其他P进程,如不这样,就会死锁。

请考虑如下情况:两个方向各有一辆车前进,若在P进程到达安全岛M后,执行V (S)及V (SK)操作,则有可能使得同方向的其它P进程得到路段SK的使用权,而进入小路;同理,Q进程到达安全岛后执行V (LT)及V (T)操作,有可能使得同方向的其它Q进程得到路段LT 而进入小路。

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

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

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,则可用资源个数为( ),等待资源的进程数为( )。

操作系统 经典同步问题

操作系统 经典同步问题
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

操作系统练习 同步问题 有答案

操作系统练习 同步问题 有答案

操作系统练习题:1 在南开大学和天津大学之间有一条弯曲的小路,其中从S到T一段路每次只允许一辆自行车通过,但中间有一个小的“安全岛”M(同时允许两辆自行车停留),可供两辆自行车已从两端进小路情况下错车使用,如图所示。

试设计一个算法使来往的自行车均可顺利通过。

解答:首先中间的安全岛M仅允许两辆自行车通过,应作为临界资源设置信号量。

但仔细分析发现,在任何时刻进入小路的自行车最多不会超过两辆(南开和天大方向各一辆),因此不需为安全岛M设置信号量。

在路口S处,南开出发的若干辆自行车应进行路口资源的争夺,以决定谁先进入小路SK段,为此设置信号量S,用以控制路口资源的争夺;同理,设置信号量T,控制天大方向自行车对路口T的争夺。

又小路SK段仅允许一辆车通过,设置信号量SK初值为1,同理设置小路LT段信号量LT初值为1。

程序如下:S := l; T:=1; SK :=1; LT:=1;Parbegin进程P:(南开方向自行车)beginP(S) ; {与其它同方向的自行车争夺路口S}P(SK); {同对面自行车争夺路段SK}通过SK;进入M;**V (SK);{一旦进入M,便可释放路段SK}P (LT) ; {同对面的自行车争夺路段LT}通过LT;V (LT);{将路段LT释放}V(S); {将路口S释放给同方向的正在路口S处等待的自行车}end,进程Q:(天大方向自行车)beginP(T);P(LT);通过LT;进入M;V(LT);P(SK);通过SK;V(SK);V(T);End;Parend。

说明**:P进程进入安全岛M后,释放了路段SK,但没有释放路口S,原因在于它是向对面的4进程释放路段资源SK,而在P进程离开小路LT后,才会将路口S 释放给其他P进程,如不这样,就会死锁。

请考虑如下情况:两个方向各有一辆车前进,若在P进程到达安全岛M后,执行V (S)及V (SK)操作,则有可能使得同方向的其它P进程得到路段SK的使用权,而进入小路;同理,Q进程到达安全岛后执行V (LT)及V (T)操作,有可能使得同方向的其它Q进程得到路段LT 而进入小路。

操作系统进程同步

操作系统进程同步

司机 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个进程,则就绪队列中的进程个数最多的是________。

操作系统同步互斥练习题

操作系统同步互斥练习题

操作系统同步试题1、设公共汽车上,司机和售票员的活动分别是:司机的活动:启动车辆;正常行车;到站停车;售票员的活动:关车门;售票;开车门;在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?用P、V操作实现它们的同步。

设两个信号量S和C,初值为S=0;C=0;司机:L1:正常行车售票员:L2:售票到站停车P(S)V(S)开车门P(C)关车门启动开车V(C)GO TO L1 GO TO L22、桌子上有一个空盘子,允许存放一只水果,爸爸可以向盘中放苹果,妈妈向盘子中放橘子,女儿专门吃盘子中的苹果,儿子专门吃盘子中的橘子。

规定当盘子空的时候一次只能放一只水果,请用信号量实现他们之间的同步与互斥。

S, S1, S2 :semaphore=1,0,0;Cobegin:Process Father:Begin:L1: P(S);Put Apple;V(S1);GO TO L1;End;Process Mother:Begin:L2: P(S);Put Orange;V(S2);GO TO L2;End;Process Son:Begin:L3: P(S2);Get Orange;V(S);GO TO L1;End;Process Daughter:Begin:L4: P(S1);Get Apple;V(S);GO TO L4;End;2、写者优先的“读者――写者”问题:1)共享读2)互斥写、读写互斥3)写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者)wmutex:semaphore=1 //读者与写者之间、写者与写者之间互斥使用共享数据S:semaphore=1 //当至少有一个写者准备访问共享数据时,它可使后续的读者等待写完成S2:semaphor=1 //阻塞第二个以后的等待读者readcount,writecount: semaphore = 0,0; //当前读者数量、写者数量mutex1 :semaphore = 1 //多个读者互斥使用readcountmutex2 :semaphore = 1 //多个写者互斥使用writecountCobegin:Reader: beginRepeatWait(S2);wait(S);wait(mutex1)if readcount=0 then wait(wmutex);readcount++;signal (mutex1);signal(S);signal(S2);reading…wait(mutex1);readcount--;if readcount=0 then signal(wmutex);signal(mutex1);until false;begin;writer: beginrepeat;wait(mutex2);if writecount=0 then wait(S);writecount++;signal (mutex2);wait(wmutex);writing…signal(wmutex);wait(mutex2);writecount--;if writecount=0 then signal(S);signal (mutex2);until false;end;coend;4、有一个仓库,可以存放A、B两种产品,但要求:①每次只能存入一种产品(A或B);②A产品数量-B产品数量<M;③B产品数量-A产品数量<N;其中M、N是正整数,使用P、V操作描述产品A与产品B的入库过程。

(完整版)操作系统-进程同步习题答案(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

操作系统练习同步问题有答案.docx

操作系统练习同步问题有答案.docx

操作系统练习题:1 在南开大学和天津大学之间有一条弯曲的小路,其中从S到T一段路每次只允许一辆自行车通过,但中间有一个小的“安全岛”M(同时允许两辆自行车停留),可供两辆自行车已从两端进小路情况下错车使用,如图所示。

试设计一个算法使来往的自行车均可顺利通过。

K S南开天大T ML解答 :首先中间的安全岛 M仅允许两辆自行车通过,应作为临界资源设置信号量。

但仔细分析发现,在任何时刻进入小路的自行车最多不会超过两辆(南开和天大方向各一辆),因此不需为安全岛 M设置信号量。

在路口 S 处,南开出发的若干辆自行车应进行路口资源的争夺,以决定谁先进入小路SK段,为此设置信号量S,用以控制路口资源的争夺;同理,设置信号量T,控制天大方向自行车对路口T 的争夺。

又小路 SK段仅允许一辆车通过,设置信号量 SK初值为 1,同理设置小路 LT 段信号量 LT 初值为 1。

程序如下:S : = l; T : =1; SK := 1; LT : =1;Parbegin进程P: (南开方向自行车)beginP(S) ; { 与其它同方向的自行车争夺路口 S}P(SK); {同对面自行车争夺路段 SK}通过 SK;进入 M; **V (SK); {一旦进入 M,便可释放路段 SK}P (LT) ; { 同对面的自行车争夺路段 LT}通过 LT;V (LT) ;{将路段 LT 释放}V(S); {将路口 S 释放给同方向的正在路口 S 处等待的自行车}end,进程 Q:(天大方向自行车)beginP(T) ;P(LT) ;通过 LT;进入 M;V(LT) ;P(SK);通过 SK;V(SK);V(T) ;End;Parend。

说明**:P 进程进入安全岛 M后,释放了路段 SK,但没有释放路口 S,原因在于它是向对面的 4 进程释放路段资源 SK,而在 P 进程离开小路 LT 后,才会将路口 S 释放给其他 P 进程,如不这样,就会死锁。

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

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

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接到棒后跑完全程。

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

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

进程的同步
例1:请用信号量机制描述下列并发进程的同步关系。 请用信号量机制描述下列并发进程的同步关系。
S P1
P2
P3
P4 F
进程的同步
解法一:信号量表示进程能否开始。 解法一:信号量表示进程能否开始。 设信号量m1、m2、m3、m4分别表示进程 、P2、 分别表示进程P1 设信号量m1、m2、m3、m4分别表示进程P1、P2、 P3、P4能否开始执行,其初值m1为1,其余均为0。 P3、P4能否开始执行 其初值m1为 其余均为0 能否开始执行,
思考: 思考: 哪个信号量可以省略? 哪个信号量可以省略?
m1 p4() {
P(m3) ; 执行p3; 执行p3; V(m4) ;
P(m4) ; P(m4); P(m4); 执行p4; 执行p4;
}
}
}
}
进程的同步
解法二:信号量表示进程是否结束。 解法二:信号量表示进程是否结束。 设信号量m1、m2、m3、m4分别表示进程 、P2、 分别表示进程P1 设信号量m1、m2、m3、m4分别表示进程P1、P2、 P3、P4是否结束,其初值均为0。 P3、P4是否结束 其初值均为0 是否结束,
进程的同步
例3-2:吃水果。 吃水果。 父亲 父亲 { 洗水果; 洗水果; 放水果; 放水果; } } P1 0 桔子 苹果 女儿 儿子 { 取桔子; 取桔子; 吃桔子; 吃桔子; } P2 女儿 P3 while(true) { 取苹果; 取苹果; 吃苹果; 吃苹果; 儿子
while (true)
p3() { while(1) { P(m3) ; 取苹果; 取苹果; V(m1); V(m1); 吃苹果; 吃苹果; } }
进程的同步

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

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

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操作实现爸爸、儿子、女儿 三个并发进程的同步。

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

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

进程同步练习题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;④加入同步关系。

操作系统练习 同步问题 有答案

操作系统练习 同步问题 有答案

操作系统练习题:1 在南开大学和天津大学之间有一条弯曲的小路,其中从S到T一段路每次只允许一辆自行车通过,但中间有一个小的“安全岛”M(同时允许两辆自行车停留),可供两辆自行车已从两端进小路情况下错车使用,如图所示。

试设计一个算法使来往的自行车均可顺利通过。

解答:首先中间的安全岛M仅允许两辆自行车通过,应作为临界资源设置信号量。

但仔细分析发现,在任何时刻进入小路的自行车最多不会超过两辆(南开和天大方向各一辆),因此不需为安全岛M设置信号量。

在路口S处,南开出发的若干辆自行车应进行路口资源的争夺,以决定谁先进入小路SK段,为此设置信号量S,用以控制路口资源的争夺;同理,设置信号量T,控制天大方向自行车对路口T的争夺。

又小路SK段仅允许一辆车通过,设置信号量SK初值为1,同理设置小路LT段信号量LT初值为1。

程序如下:S := l; T:=1; SK :=1; LT:=1;Parbegin进程P:(南开方向自行车)beginP(S) ; {与其它同方向的自行车争夺路口S}P(SK); {同对面自行车争夺路段SK}通过SK;进入M;**V (SK);{一旦进入M,便可释放路段SK}P (LT) ; {同对面的自行车争夺路段LT}通过LT;V (LT);{将路段LT释放}V(S); {将路口S释放给同方向的正在路口S处等待的自行车}end,进程Q:(天大方向自行车)beginP(T);P(LT);通过LT;进入M;V(LT);P(SK);通过SK;V(SK);V(T);End;Parend。

说明**:P进程进入安全岛M后,释放了路段SK,但没有释放路口S,原因在于它是向对面的4进程释放路段资源SK,而在P进程离开小路LT后,才会将路口S 释放给其他P进程,如不这样,就会死锁。

请考虑如下情况:两个方向各有一辆车前进,若在P进程到达安全岛M后,执行V (S)及V (SK)操作,则有可能使得同方向的其它P进程得到路段SK的使用权,而进入小路;同理,Q进程到达安全岛后执行V (LT)及V (T)操作,有可能使得同方向的其它Q进程得到路段LT 而进入小路。

操作系统同步例题

操作系统同步例题

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 buffer[in]; in++;v(mutex_in);V(empty);} 消费者活动:while(1){P(empty);P(mutex_out);take the product from buffer[out]; out++;V(mutex_out);}14. 设有一个可以装A、B两种物品的仓库,其容量无限大,但要求仓库中A、B两种物品的数量满足下述不等式:-M≤A物品数量-B物品数量≤N其中M和N为正整数。

试用信号灯和PV操作描述A、B两种物品的入库过程。

答:已知条件 -M≤A物品数量-B物品数量≤N 可以拆成两个不等式,即A物品数量-B物品数量≤N,B物品数量-A物品数量≤M。

这两个不等式的含义是:仓库中A物品可以比B物品多,但不能超过N个;B物品可以比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操作实现司机与售票员之间的同步问题。

设公共汽车上有一个司机和一个售票员,其活动如下图所示。

操作系统应用题2(解答)

操作系统应用题2(解答)

1. 设有一台计算机,有两条I/O 通道,分别接一台卡片输入机和一台打印机。

卡片机把一叠卡片逐一输入到缓冲区B1中,加工处理后在搬到缓冲区B2中,并在打印机上印出,问: ①系统要设几个进程来完成这个任务?各自的工作是什么? ②这些进程间有什么样的相互制约关系? ③用P 、V 操作写出这些进程的同步算法。

解:①系统可设三个进程来完成这个任务:R 进程负责从卡片输入机上读入卡片信息,输入到缓冲区B1中;C 进程负责从缓冲区B1中取出信息,进行加工处理,之后将结果送到缓冲区B2中;P 进程负责从缓冲区B2中取出信息,并在打印机上印出。

②R 进程受C 进程影响,B1放满信息后R 进程要等待——等C 进程将其中信息全部取走,才能继续读入信息;C 进程受R 进程和P 进程的约束:B1中信息放满后C 进程才可从中取出它们,且B2被取空后C 进程才可将加工结果送入其中;P 进程受C 进程的约束:B2中信息放满后P 进程才可从中取出它们,进行打印。

③信号量含义及初值:B1full —— 缓冲区B1满,初值为0;(B1full =1表示B1满) B1empty ——缓冲区B1空,初值为1;(B1empty =1表示B1空) B2full —— 缓冲区B2满,初值为0;(B2full =1表示B21满) B2empty ——缓冲区B2空,初值为1;(B2empty =1表示B2空)R 进程 C 进程 P 进程2、现有一个作业,在段式存储管理的系统中已为其主存分配,建立的段表内容如下:计算逻辑地址(2,15),(0,60),(3,18)的绝对地址是多少? 注:括号中第一个元素为段号,第二个元素为段内地址。

解:段式存储管理的地址转换过程为:(1)根据逻辑地址中的段号查段表的相应栏目;(2)根据段内地址<段长度,检查地址是否越界;(3)若不越界,则绝对地址=该段的主存起始地址+段内地址。

逻辑地址(2,15)查段表得段长度为20,段内地址15<20,地址不越界,段号2查表得段首地址为480,于是绝对地址为480+15=495。

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

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 buffer[in]; in++;
v(mutex_in);
V(empty);
} 消费者活动:
while(1){
P(empty);
P(mutex_out);
take the product from buffer[out]; out++;
V(mutex_out);
}
14. 设有一个可以装A、B两种物品的仓库,其容量无限大,但要求仓库中A、B两种物品的数量满足下述不等式:
-M≤A物品数量-B物品数量≤N
其中M和N为正整数。

试用信号灯和PV操作描述A、B两种物品的入库过程。

答:已知条件 -M≤A物品数量-B物品数量≤N 可以拆成两个不等式,即
A物品数量-B物品数量≤N,
B物品数量-A物品数量≤M。

这两个不等式的含义是:仓库中A物品可以比B物品多,但不能超过N个;B物品可以比A 物品多,但不能超过M个。

semaphore a=n;
semaphore b=m;
void main(){
createprocess(A,…);
createprocess(B,…);
}
A物品入库:void A(){ while(1){
P(a);
A物品入库; V(b);
}
}B物品入库:void B(){ while(1){
P(b);
B物品入库; V(a);
}
}
15. 试用信号灯与PV操作实现司机与售票员之间的同步问题。

设公共汽车上有一个司机和一个售票员,其活动如下图
所示。

v1.0 可编辑可修改
为了安全起见,显然要求: (1)关车门后方能启动车辆;(2)到站停车后方能开车门。

亦即“启动车辆”这一活动应当在“关车门”这一活动之后,“开车门”这一活动应当在“到站停车”这一活动之后。

解:如果进程P2尚未推进到②处时,进程P1已经推进到①处,则P1应等待直到P2推进到②处为止;同样,如果进程P1尚未推进到③处时,进程P2已经推进到④处,则P2应等待直到P1推进到③处为止。

如果进程P1在①处发生了等待,则当进程P2执行到②处时应将P1唤醒;同样,如果进程P2在④处发生了等待,则当进程P2执行到③处时应将P1唤醒。

用信号量和P、V操作解决这一问题,需要定义两个信号量,一个信号量start表示是否允许司机启动车辆,另一个信号量open表示是否允许售票员开车门。

初始状态是车停在始发站,车门开着,等待乘客上车。

因此,两个信号量的初值都是0。

semaphore start=0;
semaphore open=0;
司机的活动: P1: do{
P(start); 启动车辆;正常行车;到站停车; V(open);售票员的活动: P2: do{
关车门;
V(start);
售票;
P(open);
开车门;
}while (1);}while (1);
16. 设有A、B、C三组进程,它们互斥地使用某一独占型资源R,使用前申请,使用后释放。

资源分配原则如下:
(1) 当只有一组申请进程时,该组申请进程依次获得R;
(2) 当有两组申请进程时,各组申请进程交替获得R,组内申请进程依次获得R;
(3) 当有三组申请进程时,各组申请进程轮流获得R,组内申请进程依次获得R。

试用信号灯和PV操作分别给出各组进程的申请活动程序段和释放活动程序段。

解:
int free=1;
设自行车生产线上有一只箱子,其中有N个位置(N≥3),每个位置可存放一个车架或一个车轮; 又设有三个工人,其活动分别为:
工人1活动:do {
加工一个车架;车架放入箱中; }while(1)工人2活动:
do {
加工一个车轮;
车轮放入箱中;
}while(1)
工人3活动:
do {
箱中取一车架;
箱中取二车轮;
组装为一台车;
}while(1)
试分别用信号灯与PV操作、管程、会合实现三个工人的合作,要求解中不含死锁。

解:用信号灯与PV操作实现三个工人的合作,管程与会合解法可仿照给出。

首先不考虑死锁问题,工人1与工人3、工人2与工人3构成生产者与消费者关系,这两对生产/消费关系通过共同的缓冲区相联系。

从资源的角度来看,箱子中的空位置相当于工人1和工人2的资源,而车架和车轮相当于工人3的资源。

定义三个信号灯如下:semaphore empty=N;
一座小桥(最多只能承重两个人)横跨南北两岸,任意时刻同一方向只允许一人过桥,南侧桥段和北侧桥段较窄只能通过一人,桥中央一处宽敞,允许两个人通过或歇息。

试用信号灯和PV操作写出南、北两岸过桥的同步算法。

解:桥上可能没有人,也可能有一人,也可能有两人。

(a) 两人同时过桥(b) 两人都到中间(c) 南(北)来者到北(南)段
共需要三个信号量,load用来控制桥上人数,初值为2,表示桥上最多有2人;north用来控制北段桥的使用,初值为1,用于对北段桥互斥;south用来控制南段桥的使用,初值为1,用于对南段桥互斥。

semaphore load=2;
semaphore north=1;
semaphore south=1;
tosouth(){ P(load);
P(north);过北段桥;tonorth(){ P(load);
P(south);过南段桥;
到桥中间; V(north); P(south);过南段桥;到达南岸V(south); V(load); }到桥中间V(south); P(north);过北段桥;到达北岸V(north); V(load); }
19.某寺庙,有小和尚、老和尚若干.庙内有一水缸,由小和尚提水入缸,供老和尚饮用。

水缸可容纳 30 桶水,每次入水、取水仅为1桶,不可同时进行。

水取自同一井中,水井径窄,每次只能容纳一个水桶取水。

设水桶个数为5个,试用信号灯和PV操作给出老和尚和小和尚的活动。

semaphore empty=30;
设系统中有5台类型相同的打印机,依次编号为1~5。

又设系统中有n个使用打印机的进程,使用前申请,使用后释放。

每个进程有一个进程标识,用于区别不同的进程。

每个进程还有一个优先数,不同进程的优先数各异。

当有多个进程同时申请时,按照进程优先数由高到低的次序实施分配。

试用信号灯和PV操作实现对于打印机资源的管理,即要求编写如下函数和过程:
(1) 函数 require(pid,pri): 申请一台打印机。

参数pid为进程标识,其值为1到n的整数; pri为进程优先数,其值为正整数; 函数返回值为所申请到打印机的编号,其值为1到5的整数;
(2) 过程 return(prnt): 释放一台打印机。

参数prnt为所释放打印机的编号,其值为1
到5的整数。

解:
#define N 5
bool flag[N+1];//flag[0]表示可用打印机数,
//flag[i]表示第i号打印机的状态(1<=i<=N),0表示占用,1表示空闲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 require(int pid,int priority){
P(mutex_flag);
if(flag[0]>0){
flag[0]--;
for(int i=1;i<N+1;i++)
if(flag[i]==1){
flag[i]=0;
break;
}
V(mutex_flag);
return i;
}
else{
V(mutex_flag);
p(mutex_queue);
将进程pid按其优先数插入到等待队列queue中;V(mutex_queue);
}
}
return(int print){
P(mutex_flag);
if(queue==NULL){
flag[0]++;
flag[print]=1;
V(mutex_flag);
}
else{
V(mutex_flag);
p(mutex_queue);
将print分配给queue队首进程;
queue下移;
V(mutex_queue);
}
}。

相关文档
最新文档