进程同步经典习题
进程同步练习(答案)
一、选择题1、我们把在一段时间内,只允许一个进程访问的资源,称为临界资源,因此,我们可以得出下列论述,请选择一条正确的论述。
A 、对临界资源是不能实现资源共享的B 、对临界资源,应采取互斥访问方式,来实现共享C 、为临界资源配上相应的设备控制块后,便能被共享D 、对临界资源应采取同时访问方式,来实现共享2、在多进程的系统中,为了保证公共变量的完整性,各进程应互斥进入临界区。
所谓临界区是指_______。
A 、一个缓冲区B 、一段数据区C 、同步机制D 、一段程序3、在操作系统中,信号量表示资源实体,信号量表示资源实体,是一个与队列有关的是一个与队列有关的_________变量,其值仅能用P 、V 操作来改变。
A 、实体B 、整形C 、布尔型D 、记录型4、用P 、V 操作可以解决_______互斥问题。
A 、某些B 、一个C 、一切D 、大多数5、对于记录型信号量,在执行一次P 操作时,信号量值应当_____A__A_(3)___;当其值为______B_B_(4)__时,进程应阻塞。
在执行V 操作时,信号量的值应当______C C (2)___;当其值为____D_D_(3)__时,应唤醒阻塞队列中的进程。
A 、C :(1)不变;(2)加1;(3)减1;(4)加指定数值;(5)减指定数值B 、D :(1)大于0;(2)大于等于0;(3)小于等于0;(4)小于0 6、对于两个并发进程,其互斥信号量为mutex ;若mutex=0,则表明_______。
A 、没有进程进入临界区B 、有一个进程进入临界区但没进程处于阻塞状态C 、一个进程进入临界区而另一个进程正处于等待进入临界区状态D 、有两个进程进入临界区7、设有5个进程共享一个互斥段,如果允许有3个进程同时进入互斥段,则所采用的互斥信号量的初值应是__________。
A 、5 B 、3 C 、1 D 、0 8、N 个进程共享某一临界资源,则互斥信号量的取值范围为_________。
第7章进程同步(含答案)
5、用P、V操作管理临界区时,任何一个进程在进入临界区之前应调用(P)操作,退出临界区时应调用(V)操作。
6、在多道程序系统中,进程之间存在着的不同制约关系可以划分为两类:(同步)与(互斥)。(同步)指进程间具有一定逻辑关系;(互斥)是指进程间在使用共享资源方面的约束关系。
INT BUFFER-SIZE=N;
INT SF=0;/*BUFFER中是否有可取的信息*/
INT SE=N;/* BUFFER中是否有空位置以存放信息*/
MAIN()
{
GET()
COMPUTE()
}
4、桌上有一空盘,允许存放一只水果,爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取出,请用P、V原语实现爸爸、儿子、女儿三个并发进程的同步。
{ int b2=0:/*表示进程S2是否可以开始执行*/
int b3=0:/*表示进程S3是否可以开始执行*/
int b4=0:/*表示进程S4是否可以开始执行*/
Main()
s1();
s2();
s3()
s4()
}
6、 读者/写者问题。有一数据区为多个进程所共享,假设一些进程只能对该数据区完成读操作(读者),而另一些进程只能对其完成写操作(写者),读者和写者要遵守以下的约束:
Int SF=0;/*信号量SF用于表示缓冲区中有无可供计算的信息。*/
Main()
{
get();
compute();}
3、**在视频通信系统中,由进程PA采集一帧图像信息并存入环形缓冲区buffer,进程PB从buffer中取一帧数据进行处理,假设buffer的大小为n,试用P、V操作实现PA和PB。(类似生产者-消费者)
操作系统-第二章进程同步习题
第二章进程同步一、选择最合适的答案1. 用P、V操作管理临界区时,信号量的初值一般应定义为( C )。
A.–1B.0C.1D.任意值2. 有m个进程共享同一临界资源,若使用信号量机制实现对一临界资源的互斥访问,则信号量的变化范围是( A )。
A.1至–(m-1)B.1至m-1C.1至–mD.1至m3. 在下面的叙述中,正确的是(C )。
A.临界资源是非共享资源B.临界资源是任意共享资源C.临界资源是互斥共享资源D.临界资源是同时共享资源4. 对进程间互斥地使用临界资源,进程可以(D )A.互斥地进入临界区B.互斥地进入各自的临界区C.互斥地进入同一临界区D.互斥地进入各自的同类资源的临界区5. 设两个进程共用一个临界资源的互斥信号量mutex,当mutex=1时表示(B )。
A.一个进程进入了临界区,另一个进程等待B.没有一个进程进入临界区C.两个进程都进入了临界区D.两个进程都在等待6. 设两个进程共用一个临界资源的互斥信号量mutex,当mutex=-1时表示(A )。
A.一个进程进入了临界区,另一个进程等待B.没有一个进程进入临界区C.两个进程都进入了临界区D.两个进程都在等待7.当一进程因在记录型信号量S上执行P(S)操作而被阻塞后,S的值为(B )。
A.>0B.<0C.≥0D.≤08.当一进程因在记录型信号量S上执行V(S)操作而导致唤醒另一进程后,S的值为( D )。
A.>0B.<0C.≥0D.≤09.如果信号量的当前值为-4,则表示系统中在该信号量上有(A )个进程等待。
A.4B.3C.5D.010.若有4个进程共享同一程序段,而且每次最多允许3个进程进入该程序段,则信号量的变化范围是( B )。
A. 3,2,1,0B. 3,2,1,0,-1C. 4,3,2,1,0D. 2,1,0,-1,-211.若信号S的初值为2,当前值为-1,则表示有( B )个等待进程?A.0B.1C.2D.312.如果有三个进程共享同一互斥段,而且每次最多允许两个进程进入该互斥段,则信号量的初值应设置为( C )。
进程同步经典习题
进程同步经典习题1.某车站售票厅,任何时刻最多可容纳20名购票者进入,当售票厅中少于20名购票者时,则厅外的购票者可立即进入,否则需在外面等待。
若把一个购票者看作一个进程,请用PV操作实现管理。
解:定义一个信号量S,初值为20parbeginprocess pl(l=1,2,……)beginwait(S);进入售票厅;购票;退出;signal(S)end2.桌上有一空盘,允许存放一个水果,爸爸可向盘内放苹果,妈妈可向盘内放桔子,儿子专等吃盘内的桔子,女儿专等吃盘中的苹果,请用P、V 操作实现爸爸、妈妈、儿子、女儿四个并发进程的同步与互斥。
int S=1;int Sa=0;int Sb=0;main(){cobeginfather();mather();son();daughter();coend}father() mather(){while(1) { while(1){p(S); {p(S) ;将一个苹果放入盘中将一个桔子放入盘中V(Sa);} V(Sb);}} }son() daughter(){ while(1) { while(1){p(Sb); { p(Sa);从盘中取出桔子从盘中取出苹果V(S);吃桔子;} V(S);吃苹果;}}3.生产围棋的工人不小心把相等数量的黑子和白子混装在一个盒子里,现在要用自动分拣系统把黑子和白子分开,该系统由两个并发执行的进程PA和PB组成,系统功能如下:(1)PA专拣黑子,PB专拣白子;(2)每个进程每次只拣一个子,当一个进程拣子时,不允许另一个进程去拣子;(3)当一个进程拣一个子(黑或白)后,必须让另一个进程去拣一个子(白或黑)请回答:①这两个并发进程之间的关系是同步还是互斥②写出PV操作管理时应定义的信号量及其初值。
③根据定义的信号量,写出用PV操作管理两个并发进程的程序答:①两个进程之间是同步关系②定义两个信号量S1和S2,初值为1和0③process PA process PAbegin beginrepeat repeatwait(S1) wait(S2)拣黑子拣白子signal(S2) signal(S1)until false until falseend end4.有一阅览室,读者进入时必须先在一张登记表上登记,该表为每一座位列出一个表目,包括座号、姓名,读者离开时要注销登记信息;假若阅览室共有100个座位。
进程同步问题例题
吃水果问题
• 问题描述:桌上有一只盘子,每次只能放入或 取出一个水果。现有许多苹果和桔子。一家四 口各行其职。爸爸专向盘中放苹果,妈妈专向 盘中放桔子,儿子专等吃盘中的桔子,女儿专 等吃盘中的苹果。请给出四人之间的同步关系, 并用PV操作实现四人正确活动的程序。
四人之间的关系
爸爸,妈妈要互斥使用盘子,所以两者 之间是互斥关系; 爸爸放的苹果,女儿吃,所以两者是同 步关系; 妈妈放的桔子,儿子吃,所以两者也是 同步关系。
• • • • •
empty,orange,apple:semaphore empty=1; orange=0; apple=0; parbegin
• Father: • • • • • •
Begin L1:P(empty); L1 P(empty); 放置苹果; V(apple); Goto L1; End;
到站停车;
图书馆阅览室问题
问题描述:假定阅览室最多可同时容纳 100个人阅读,读者进入时,必须在阅 览室门口的一个登记表上登记,内容包 括姓名、座号等,离开时要撤掉登记内 容。用P、V操作描述读者进程的同步算 法。
Sem:mutex=1,readcount=100; readeri()(i=1,2,…k) Procedure readeri()(i=1,2, k) { while(true){ P(readcount) ; p(mutex); 登记 v(mutex); 阅读 p(mutex); 撤消登记 v(mutex); v(readcount); }
Mother:
• • • • • • Begin L2: P(empty); 放置桔子; V(orange); Goto L2; End;
Son:
第二章进程同步典型习题
1.答: 答 1)各进程之间的关系是互斥 ) 2)可定义一个互斥信号量 S,S的初值为 1.用 PV操作管理时 S可能 ) , 的初值为 . 操作管理时 可能 的取值为 1,0及<0, , 及 , 这些值的含义是: 这些值的含义是: S=1时表示无车辆在 段行驶,若有某车辆欲进人AB段则立即可以 时表示无车辆在AB段行驶,若有某车辆欲进人 段则立即可以 时表示无车辆在 段行驶 进入. 进入. S=0时表示已有一车辆正在 AB段行驶,这时任何其它车辆欲进入 段行驶, 时表示已有一车辆正在 段行驶 AB段都必须等待. 段都必须等待. 段都必须等待 S<0时其绝对值 表示在 A点等待进入 AB段行驶的车辆数. 时其绝对值|S|表示在 点等待进入 段行驶的车辆数. 时其绝对值 段行驶的车辆数 3)用PV操作管理时进程的程序如下: 操作管理时进程的程序如下: ) 操作管理时进程的程序如下 begin 到达A点 到达 点; P(S); ( ) 段行驶; 在AB段行驶; 段行驶 驶出B点 驶出 点; V(S); ( ) end
思考:某高校计算机系开设网络课并安排上机实习, 思考:某高校计算机系开设网络课并安排上机实习,假
设机房有共有2m台机器, 名学生选该课, 设机房有共有 台机器,有2n名学生选该课,规定: 台机器 名学生选该课 规定: 1)每2个学生组成一组,各占一台机器,合作完成 个学生组成一组, ) 个学生组成一组 各占一台机器, 上机实习 2)只有一组 个学生到齐,并且此时机房有空闲机 个学生到齐, )只有一组2个学生到齐 器时, 器时,该组学生才能进入机房 3)上机实习由一名教师检查,检查完毕,一组学生 )上机实习由一名教师检查,检查完毕, 同时离开机房 设计相应的数据结构,并用wait,signal操作模拟上面 设计相应的数据结构,并用 , 操作模拟上面 实习过程. 提示:除了有学生和教师进程外, 实习过程. (提示:除了有学生和教师进程外,还应 该有门卫进程) 该有门卫进程)
进程同步练习题
进程同步练习题(总9页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--进程同步练习题1.第二类读者写者问题,信号量解决方法2.复印室里有一个操作员为顾客复印资料,有5把椅子供顾客休息等待复印。
如果没有顾客,则操作员休息。
当顾客来到复印室时,如果有空椅子则坐下来,并唤醒复印操作员;如果没有空椅子则必须离开复印室。
3.如果有三个进程R、W1、W2共享一个缓冲器B,而B中每次只能存放一个数。
当缓冲器中无数时,进程R可以将从输入设备上读入的数存放到缓冲器中。
若存放到缓冲器中的是奇数,则允许进程W1将其取出打印;若存放到缓冲器中的是偶数,则允许进程W2将其取出打印。
同时规定:进程R必须等缓冲区中的数被取出打印后才能再存放一个数;进程W1或W2对每次存入缓冲器的数只能打印一次;W1和W2都不能从空缓冲中取数。
写出这三个并发进程能正确工作的程序。
4.现有四个进程R1、R2、W1、W2,它们共享可以存放一个数的缓冲器B。
进程R1每次把来自键盘的一个数存入缓冲器B中,供进程W1打印输出;进程R2每次从磁盘上读一个数存放到缓冲器B中,供进程W2打印输出。
为防止数据的丢失和重复打印,问怎样用信号量操作来协调这四个进程的并发执行。
5.有一个仓库,可以存放A和B两种产品,但要求:(1)每次只能存入一种产品(A或B);(2)-N<A产品数量-B产品数量<M。
其中,N和M是正整数。
试用同步算法描述产品A与产品B的入库过程。
6.设有两个生产者进程A、B和一个销售者进程C,他们共享一个无限大的仓库,生产者每次循环生产一个产品,然后入库供销售;销售者每次循环从仓库中取出一个产品进行销售。
如果不允许同时入库,也不允许边入库边出库;而且要求生产和消费A产品和B产品的件数都满足以下关系:-n≤A的件数-B的件数≤m,其中n、m是正整数。
1. 第二类读者写者问题,信号量解决方法答:为了使写者优先,可在原来的读优先算法的基础上增加一个互斥信号量s,初值为1,使得当至少有一个写者准备访问共享对象时,它可以使后续的读者进程等待完成;整型变量writecount,初值为0,用来对写者进行计数;互斥信号量mutex,初值为1,用来实现多个读者对写者writecount进行互斥访问。
进程同步例题
(一)图书馆有100个座位,每位进入图书馆的读者要在登记表上登记,退出时要在登记表上注销。
要几个程序?有多少个进程?(答:一个程序;为每个读者设一个进程)(1)当图书馆中没有座位时,后到的读者在图书馆为等待(阻塞)(2)当图书馆中没有座位时,后到的读者不等待,立即回家。
解(1 )设信号量:S=100; MUTEX=1 P(S)P(MUTEX)登记V(MUTEX)阅读P(MUTEX)注销V(MUTEX)V(S) 解(2)设整型变量COUNT=100; 信号量:MUTEX=1;P(MUTEX);IF (COUNT==0){ V(MUTEX);RETURN;}COUNT=COUNT-1;登记V(MUTEX);阅读P(MUTEX);COUNT=COUNT+1;V(MUTEX); RETURN;(二)一家四人父、母、儿子、女儿围桌而坐;桌上有一个水果盘;(1)当水果盘空时,父亲可以放香蕉或者母亲可以放苹果,但盘中已有水果时,就不能放,父母等待。
当盘中有香蕉时,女儿可吃香蕉,否则,女儿等待;当盘中有苹果时,儿子可吃,否则,儿子等待。
解设信号量:SE=1 (空盘子);SA=0 (放了苹果的盘子);SB=0 (放了香蕉的盘子)父亲REPEAT剥香蕉P(SE)放香蕉V(SB)UNTIL FALSE 母亲REPEAT削苹果P(SE)放苹果V(SA) UNTIL FALSE儿子P(SA) 拿苹果V(SE) 吃苹果女儿P(SB) 拿香蕉V(SE) 吃香蕉(2)解:再增加两个信号量:SF=0, SM=0父亲REPEATP(SF)剥香蕉P(SE)放香蕉V(SB)UNTIL FALSE 母亲REPEATP(SM)削苹果P(SE)放苹果V(SA) UNTIL FALSE儿子V(SM) P(SA) 拿苹果V(SE) 吃苹果女儿V(SF) P(SB) 拿香蕉V(SE) 吃香蕉(三)有一个超市,最多可容纳N个人进入购物,当N个顾客满员时,后到的顾客在超市外等待;超市中只有一个收银员。
进程同步习题全
进程管理
【例】进程P1使用缓冲区buffer向进程P2,P3,P4发 送消息,要求每当P1向buffer中发消息时,只有 当P2,P3,P4进程都读取这条消息后才可再向 buffer中发送消息。利用PV原语描述进程的动作 序列
P2 P1 buffer P3
P4
进程管理
【解答】设置信号量初值S1=S2=S3=0,S=3 进程P1 进程P2 进程P3 P4 P(S) P(S1) P(S2) P(S3) P(S) 读消息 读消息 读消息 P(S) V(S) V(S) V(S) 发送消息到 Buffer V(S1) V(S2)
进程管理
生产者i repeat P(empty) P(mutex) putdata V(mutex) V(full)
消费者i repeat P(full) P(mutex) getdata V(mutex) V(empty)
进程管理
【例】多个生产者,多个消费者,N个buffer,多次循环存 取buffer,即多个生产者不断进行putdata操作,多个消费 者不断进行getdata操作 【解答】 只有buffer有空间时才能进行putdata操作 只有buffer有数据时才能进行getdata操作 不允许多个消费者和多个生产者同时操作 信号量 full:表示buffer是否有数据,初值为0 empty:表示buffer是否为空,初值为n mutex:表示buffer是否可操作,初值为1
进程管理
操作流程 <PUT类进程> repeat 判断buff1是否有空间,没有则等待 是否可操作buff1 PUT 设置buff1可操作标志 设置buff1有数据的标志 until false
进程管理
<MOVE类进程> repeat 判断buff1是否有数据,没有则等待 判断buff2是否有空间,没有则等待 是否可操作buff1 是否可操作buff2 MOVE 设置buff1可操作标志 设置buff2可操作标志 设置buff1有空间标志 设置buff2有空间标志
进程同步问题习题
1、理发店理有一位理发师、一把理发椅和n 把供等候理发的顾客坐的椅子,如果没有顾客,理发师便在理发椅上睡觉。
一个顾客到来时,它必须叫醒理发师。
如果理发师正在理发时又有顾客来到,则如果有空椅子可坐,就坐下来等待,否则就离开。
2、苹果桔子问题桌上有一只盘子,每次只能放入一只水果;爸爸专向盘子中放苹果(apple),妈妈专向盘子中放桔于(orange),一个儿子专等吃盘子中的桔子,一个女儿专等吃盘子里的苹果。
使用记录型信号量解决苹果桔子问题。
3、一座山有一个隧道,规定每次允许一列火车过隧道,现在南方北方都有车要过隧道。
如果把每个过隧道火车都看作一个进程,为保证安全,请用wait和signal原语操作实现正确管理。
var waiting : integer; /*等候理发的顾客数*/ CHAIRS:integer; /*为顾客准备的椅子数*/ customers, barbers,mutex : semaphore;customers := 0; barbers := 0; waiting := 0; mutex := 1;Procedure barber;beginwhile(TRUE); /*理完一人,还有顾客吗?*/P(cutomers); /*若无顾客,理发师睡眠*/P(mutex); /*进程互斥*/waiting := waiting – 1; /* */V(barbers); /*理发师去为一个顾客理发*等候顾客数少一个/V(mutex); /*开放临界区*/cut-hair( ); /*正在理发*/end;procedure customerbeginP(mutex); /*进程互斥*/if waiting<CHAIRS begin /*看看有没有空椅子*/waiting := waiting+1; /* 等候顾客数加1*/V(customers); /*必要的话唤醒理发师*/V(mutex); /*开放临界区*/P(barbers); /*无理发师, 顾客坐着养神*/get-haircut( ); /*一个顾客坐下等理发*/endV(mutex); /*人满了,走吧!*/end;varplate : integer;sp:semaphore;/* 盘子里可以放几个水果*/sg1:semaphore; /* 盘子里有桔子*/sg2:semaphore; /* 盘子里有苹果*/sp := 1; /* 盘子里允许放一个水果*/Sg1, := 0; /* 盘子里没有桔子*/sg2 := 0; /* 盘子里没有苹果*/cobeginprocess fatherbeginL1:削一个苹果;P(sp);把苹果放入plate;V(sg2);goto L1;end;process mother beginL2:剥一个桔子;P(sp);把桔子放入plate;V(sg1);goto L2;end;process sonbeginL3: P(sg1);从plate中取桔子;V(sp);吃桔子;goto L3;end;process daughter beginL4: P(sg2);从plate中取苹果;V(sp);吃苹果;goto L4;end;coend设信号量s表示隧道的互斥信号量,初始值为1。
进程同步例题
2003.试题一.4.关于临界区问题(critical section problem)是一个算法(假设只有进程P0和P1可能进入该临界区),如下(i为0或1),该算法_____A、不能保证进程互斥进入临界区,且会出现“饥饿”(Starvation)B、不能保证进程互斥进入临界区,但不会出现“饥饿”C、保证进程能互斥进入临界区,但会出现“饥饿”D、保证进程互斥进入临界区,不会出现“饥饿”reapeatretry: if(turn≠-1) turn:=i;if(turn≠i) go to retry;turn:=-1;critical Section(临界区)turn=0;remainder Section(其他区域)until false;解:应该选A。
首先考虑不能保持互斥:P0令turn=0,然后P1执行retry发现turn≠-1,所以P1令turn=1;然后或者P0或者P1先后令turn=-1,然后都进入临界区。
如果某个进程P0(或P1)从临界区出来(这时turn=0)又要进入,则令turn=i,则它又能进入,重复该过程则可能导致另外的一个进程饥饿。
2004.试题5.假设缓冲区buf1和缓冲区buf2无限大,进程p1向buf1写数据,进程p2向buf2写数据,要求buf1数据个数和buf2数据个数的差保持在(m,n)之间(m<n,m,n都是正数).分析:题中没有给出两个进程执行顺序之间的制约关系,只给出了一个数量上的制约关系,即m<=|buf1数据个数-buf2数据个数|<=n.不需要考虑缓冲区的大小,只需要考虑两个进程的同步和互斥.p2向buf2写数据比p1向buf1写数据的次数最少不超过m次,最多不能超过n次,反之也成立.所以是一个生产者和消费者问题。
将等式展开得:(1)m<=(buf1数据个数-buf2数据个数)<=n; (2)m<=(buf2数据个数-buf1数据个数)<=n;由于m,n都是正数,等式只有一个成立,不妨设(1)成立.在进程p1和p2都没有运行时,两个缓冲区数据个数之差为0,因此,p1必须先运行,向buf1至少写m+1个数据后再唤醒p2运行.信号量s1表示p1一次写入的最大量,初值为n(这时buf2数据个数为0),s2表示p2一次写入的最大量,初值为-m(这时buf1数据个数为0).beginvar mutex1=1,mutex2=1,s1=n,s2=-m:semaphore;cobeginprocess p1beginrepeatget data;p(s1);p(mutex1);写数据到buf1;v(mutex1);v(s2);endprocess p2beginrepeat;get data;p(s2);p(mutex2);//两个进程的互斥信号量应该用同一个mutex即可写数据到buf2;v(mutex2);v(s1);endcoendend注:p1和p2每次执行时需要进行一些额外的操作.对于p2来说,它首先必须在自己的缓冲区buf2中写入至少m个数据,此后p1和p2的同步可简单通过两个信号量来控制.题目的一个变形是要求:-m<=(buf2数据个数-buf1数据个数)<=n;那么信号量的初值就变成m 和n,若只有p1向buf1放入数据而p2不放入数据到buf2中,则p1最多可放m次.因此,设置信号量s1,初值为m,此外,每当p2放入一个数据到buf2中时,则使信号量s1增1,即p1增加一次放入数据到buf1的机会.反之,若只有p2向buf2放入数据而p1不放入数据到buf1中,则p2最多可放次.因此,设置信号量s2,初值为n,此外,每当p1放入一个数据到buf1中时,则使信号量s2增1,即p2增加一次放入数据到buf1的机会.三、某车站售票厅,任何时刻最多可容纳20名购票者进入,当售票厅中少于20名购票者时,则厅外的购票者可立即进入,否则需在外面等待。
进程同步练习
5 利用信号量来描述前趋关系
s3
s1
s2
s5Leabharlann s6s4School of Information Science and Engineering,Lanzhou University OS Autumn 2009 5
2,4,5,6,8
2.桌上有一空盘,一次只允许放一个水果。爸爸 向盘中方苹果或橘子,儿子专等橘子吃,女儿 专等苹果吃。用信号量实现三人的同步。 (三个并发进程R、W1、W2共享单缓冲区B。 进程R从输入设备上读入一个自然数存放到B 中,若B中的数是奇数,则由进程W1取出打 印,若B中的数是偶数,则由进程W2取出打 印。用信号量机制实现同步,使这三个进程能 正确执行。)
6 用P,V操作解决司机与售票员的问题
司机进程: while (true){ 启动车辆 正常驾驶 售票员进程: while (true){ 关门 售票
到站停车 开门 }… of Information Science and Engineering,Lanzhou University }… School
进程r从输入设备上读入一个自然数存放到b中若b中的数是奇数则由进程w1取出打印若b中的数是偶数则由进程w2取出打印
练习
1.用wait,signal操作解决下图之同步问题:
get
copy
put
f
s
t
g
1
School of Information Science and Engineering,Lanzhou University OS Autumn 2009
[操作系统]经典进程同步问题题库
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:医生进程Doctor,化验进程Lab共同完成病人的诊治工作,医生开化验单,化验进程进行化验,医生根据化验结果进行诊断。
请用记录型信号量和P、V 操作实现两进程的同步。
例2 吃水果问题
例3、某集装箱仓库共有100个仓位,用同一辆吊车负责集装箱的吊进和吊出。
现有一批集装箱运来进仓,另有货主不断前来提货(按仓位顺序进出),设进仓用过程PUTIN表示,出仓用过程GETOUT表示,请用P、V操作协调上述工作。
例4、有一独木桥,每次只允许一人过桥,现在桥的南北两端随时有人要过桥(PASS),为保证安全,请用P、V操作解决如下问题:
1)只要桥上无人则允许任一方的一人过桥,桥上有人则等待。
2)两边的人交替过桥。
即某一方一人过桥后要让另一方的一个人过桥,桥上
有人则等待。
例5、有三个进程PA、PB、PC合作解决文件打印问题:PA将文件记录从磁盘读入主存的缓冲区1,每执行一次读一个记录;PB将缓冲区1的内容复制到缓冲区2,每执行一次复制一个记录;PC将缓冲区2的内容打印出来,每执行一次打印一个记录。
缓冲区的大小等于一个记录的大小。
请用P、V操作协调三个进程的工作。
例6 少林寺问题。
进程同步习题一
进程同步习题一
1、四个进程P0,P1,P2,P3和四个信箱M0,M1,M2,M3进程间借助相邻的信箱传递消息:Pi 每次从Mi 中取出一条消息,经加工送入Mi+1 (mod 4)中。
其中M0,M1,M2,M3分别设有3,3,2,2个格子,每个格子放一条消息,初始时,M0装满了三条消息,其余为空。
写出使用信号量实现进程(i=0,1,2,3)同步的算法。
2. 有一阅览室,读者进入时必须先在一张登记表上登记。
该表中每个表项代表阅览室中的一个座位。
读者离开时要消掉其登记信息。
阅览室共有50 个座位。
登记表每次仅允许一位读者进行登记或注销。
读者登记时,如果座位已满,他在阅览室外等待,直至有空位再登记进入。
试用伪代码和信号量,描述读者行为。
3. 汽车司机与售票员之间必须协同工作,一方面,只有售票员把车门关好了司机才能开车,因此,售票员关好车门应通知司机开车。
另一方面,只有当司机已经停下,售票员才能开门上下客,故司机停车后应通知售票员。
假定某辆公共汽车上有两名售票员与一名司机,汽车当前正在始发站停车上客,试设必要的信号灯及赋初值,写出他们的同步过程。
进程同步例题
1. 若有一个文件F ,供进程共享。
现把进程分成A 、B 两组,规定同组的进程可以同时读文件F ,但当有A 组(或B 组)的进程在读文件F 时不允许B 组(或A 组)的进程读文件F 。
现定义两个计数器C1和C2分别记录A 组和B 组中读文件F 的进程数。
当用P 、V 操作进行管理时需要三个信号量Sl Sl、、S2和SAB 才能保证正确的并发执行。
程序结构如下:Begin Sl ,S2S2,,SAB SAB::semaphore semaphore;;C1C1,,C2C2::integer integer;;S1:=1;S2:=1 ;SAB SAB::=1;C1=1;C1::=0=0;;C2C2::=0=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=C2——1;if C2=0 then((11));((12)); end ;coend ;end ;回答:1.说明信号量S1,S2,SAB 的作用的作用2. 在上述程序的括号内填入适当的P 、V 操作,完善该程序。
操作,完善该程序。
2.一座山上有一个隧道,规定每次只允许一列火车过隧道,现在南方北方都有车要过隧道,如果把每个过隧道者看作一个进程,为保证安全.请用PV 操作实现正确管理。
理。
3.桌上有一个空盒,盒内只允许放一个水果,甲可向盒内放苹果,乙可向盒内放桔子。
丙专等吃盒中的苹果,丁专等吃盒中的桔子,若盒内已有水果,放者必须等待,若盒内没有自己要吃的水果,吃者必需等待,请回答下列问题:(1)(1)请给出四个之间的同步互斥关系。
进程同步习题
补充题1:有三个进程p1、p2、p3协作解决文件打印问题:系统有两个环形缓冲池,每个缓冲池有n个缓冲区;p1每次将1条记录从磁盘读入缓冲池1,p2每次将1条记录从缓冲池1复制到缓冲池2,p3每次从缓冲池2取出1条记录打印输出。
请用信号量机制实现这三个进程的同步。
信号量提示:full1、empty1、mutex1、in1、out1;full2、empty2、mutex2、in2、out2。
答:方法1,记录型信号量机制:var mutex1、mutex2、empty1、empty2、full1、full2:semaphore:=1,1,n,n,0,0;buffer1:array[0,…,n-1] of item;buffer2:array[0,…,n-1] of item;int1,out1,int2,out2:integer:=0,0,0,0;p1进程:beginrepeat……从磁盘读入一条记录到nextp;……Wait(empty1);Wait(mutex1);Buffer1(int1):=nextp;In1: =(int1+1) mod n;Signal(mutex1);Signal(full1);Until false;EndP2进程:BeginRepeatWait(full1);Wait(mutex1);Nextc:=buffer1(out1);Out1:=(out1+1) mod n;Signal(mutex1);Signal(empty1);从buffer1取出1条记录;Until false;……repeat……Wait(empty2);Wait(mutex2);Buffer2(int2):=nextp;In2: =(int2+1) mod n;Signal(mutex2);Signal(full2);把记录放入buffer2中;Until false;EndP3进程:BeginRepeatWait(full2);Wait(mutex2);Nextc:=buffer2(out2);Out2:=(out2+1) mod n;Signal(mutex2);Signal(empty2);从buffer2取出1条记录打印;Until false;End方法2,AND型信号量机制var mutex1、mutex2、empty1、empty2、full1、full2:semaphore:=1,1,n,n,0,0;buffer1:array[0,…,n-1] of item;buffer2:array[0,…,n-1] of item;int1,out1,int2,out1,out2,:integer:=0,0,0,0;p1进程:beginrepeat……从磁盘读入一条记录到nextp;……SWait(empty1,mutex1);Buffer1(int1):=nextp;In1: =(int1+1) mod n;SSignal(mutex1,full1);Until false;EndP2进程:BeginRepeatSWait(full1,mutex1);Nextc:=buffer1(out1);Out1:=(out1+1) mod n;SSignal(mutex1,empty1);从buffer1取出1条记录;Until false;…………SWait(empty2,mutex2);Buffer2(int2):=nextp;In2: =(int2+1) mod n;SSignal(mutex2 ,full2);把记录放入buffer2中;Until false;EndP3进程:BeginRepeatSWait(full2,mutex2);Nextc:=buffer2(out2);Out2:=(out2+1) mod n;SSignal(mutex2,empty2);从buffer2取出1条记录打印;Until false;End补充题2:上题中如果两个缓冲池都是单缓冲区,则如何简化各进程的描述?提示:单缓冲区,故上题中的mutex、in、out均不需要。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.某车站售票厅,任何时刻最多可容纳20名购票者进入,当售票厅中少于20名购票者时,则厅外的购票者可立即进入,否则需在外面等待。
若把一个购票者看作一个进程,请用PV操作实现管理。
解:定义一个信号量S,初值为20
parbegin
process pl(l=1,2,……)
begin
wait(S);
进入售票厅;
购票;
退出;
signal(S)
end
2.桌上有一空盘,允许存放一个水果,爸爸可向盘内放苹果,妈妈可向盘内放桔子,儿子专等吃盘内的桔子,女儿专等吃盘中的苹果,请用P、V 操作实现爸爸、妈妈、儿子、女儿四个并发进程的同步与互斥。
int S=1;int Sa=0;int Sb=0;
main()
{cobegin
father();
mather();
son();
daughter();
coend}
father() mather()
{while(1) { while(1)
{p(S); {p(S) ;
将一个苹果放入盘中将一个桔子放入盘中
V(Sa);} V(Sb);}
} }
son() daughter()
{ while(1) { while(1)
{p(Sb); { p(Sa);
从盘中取出桔子从盘中取出苹果
V(S);吃桔子;} V(S);吃苹果;}
}
3.生产围棋的工人不小心把相等数量的黑子和白子混装在一个盒子里,现在要用自动分拣系统把黑子和白子分开,该系统由两个并发执行的进程PA和PB组成,系统功能如下:
(1)PA专拣黑子,PB专拣白子;
(2)每个进程每次只拣一个子,当一个进程拣子时,不允许另一个进程去拣子;
(3)当一个进程拣一个子(黑或白)后,必须让另一个进程去拣一个子(白或黑)
请回答:①这两个并发进程之间的关系是同步还是互斥
②写出PV操作管理时应定义的信号量及其初值。
③根据定义的信号量,写出用PV操作管理两个并发进程的程序
答:①两个进程之间是同步关系
②定义两个信号量S1和S2,初值为1和0
③process PA process PA
begin begin
repeat repeat
wait(S1) wait(S2)
拣黑子拣白子
signal(S2) signal(S1)
until false until false
end end
4.有一阅览室,读者进入时必须先在一张登记表上登记,该表为每一座位列出一个表目,包括座号、姓名,读者离开时要注销登记信息;假若阅览室共有100个座位。
试用信号量和PV操作来实现用户进程的同步算法。
解:设置如下3个信号量
seat:表示阅览室中空座位数,其初值为100.
readers:记录阅览室中的读者数,其初值为0.
mutex:互斥信号量(对于读者而言,阅览室是一个临界资源,任何时刻最多只有一位读者填写登记表或撤销登记表),初值为1.
对应的算法描述如下:
semaphore seats=100;
semaphore readers=0;
semaphore mutex=1;
main()
{
cobegin
{
读者进入阅览室进程readerini(i=1,2,…,n)
while(true)
{
p(seats); //递减空座位数
p(mutex);
填写登记表
进入阅览室;
v(mutex); //允许其他读者访问阅览室
v(readers); //递增读者数
}
读者离开阅览室进程readerouti (i=1,2, …,n)
while(true)
{
p(readers);
p(mutex);
撤销登记;
离开阅览室;
v(mutex);
v(seats);
}
}
coend
}
解法二:
解:var name:array[1..100]of A
A=record
number:integer;
name:string;
end
for i:=1 to 100 do
{A[i].number:=i;A[i].name:=null;}
mutex,seatcount:semaphore;
mutex:=1;seacount:=100;
cobegin
process readeri(var readername:string)(i=1,2…)
begin
p(seatcount);
p(mutex);
for i:=1 to 100 do i++
if A[i].name=null then A[i].name:= readername;
reader get the seat number=i;
v(mutex);
进入阅览室座位号i,坐下读书;
p(mutex);
A[i].name:=null;
V(mutex);
V(seatcount);
离开阅览室;
end
coend
5.三个进程P1、P2、P3互斥使用一个包含N(N>0)个单元的缓冲区。
P1每次用produce()生成一个正整数并用put()送入缓冲区某一空单元中;P2每次用getodd()从缓冲区中取出一个奇数并用countodd()统计奇数个数;P3每次用geteven()从缓冲区中取出一个偶数并用counteven()统计偶数个数。
请用信号量机制实现这三个进程的同步与互斥活动,并说明所定义信号量的含义。
要求用伪代码描述。
[2009
年全国考研试题]
解:缓冲区是一互斥信号量,因此设互斥信号量mutex
P1、P2因为奇数的设置与取用而同步,设同步信号量odd;P1、P3因为偶数的设置与取用而同步,设同步信号量even;P1、P2、P3因为共享缓冲区,设同步信号量empty。
semaphore mutex=1; //缓冲区互斥信号量
semaphore odd=0, even=0 ; //奇数、偶数进程的同步信号量
semaphore empty=N ; //空缓冲区单元个数信号量
main( )
cobegin{
process P1
while(true){
number=produce();
p(empty); //递减空缓冲区的单元个数
p(mutex); //互斥访问缓冲区
put( );
v(mutex); //恢复访问缓冲区
if number%2==0 v(even); //为偶数允许取偶数
else v(odd); //为奇数允许取奇数
}
process P2 process P3
while(true){ while(true){
p(odd); //互斥奇数p(even);
p(mutex); //互斥访问缓冲区p(mutex);
getodd( ); getevend( );
v(mutex); //恢复访问缓冲区v(mutex);
v(empty); //递增空缓冲区的单元个数v(empty);
countodd(); } counteven();}
}
coend。