第二章进程管理
Bi ( ) //i=1,2,...,n2 {
while (1) {
...... P(full[i]); P(mutex); 将消息从缓冲区取出; V(mutex); V(empty[i]); ...... } }
parbegin A1( ); A2( ); ...... An1( ); B1( ); B2( ); ...... Bn2( ); parend
12. 进程P1使用缓冲区buffer向进程P2,P3,P4发送消息(如第10题的图2-1所示),要求每当Pl向
buffer中发消息时,只有当P2,P3,P4进程都读取这条消息后P1才可向buffer中发送新的消息。试用管程机制描述四个进程的动作过程。 解:定义管程如下(用伪代码):
type P_C=monitor
var flag : array[2..4] of integer; cc: array[1..4] of condition;
procedure put() //P1调用此过程将消息放入缓冲区 begin
if flag[2]+flag[3]+flag[4]>0 then cc[1].wait; 将消息放入缓冲区buffer; for i := 2 to 4 do begin
flag[i] := 1;
if cc[i].queue then cc[i].signal; end
end
procedure get(integer i) //P2、P3、P4调用此过程从buffer中取消息 begin
if flag[i]=0 then cc[i].wait; //若buffer中无消息则等待 从buffer中取消息; flag[i] := 0;
25
第二章进程管理
if flag[2]+flag[3]+flag[4] = 0 and cc[1].queue then cc[1],signal;
end begin
flag[2]:= flag[3]:= flag[4]:= 0; //初始化数据 end
采用管程描述P1、P2、P3、P4四个进程的活动如下: parbegin P1( ) begin repeat
生成一个消息; P_C.put( ); until false end P2( ) begin repeat
P_C.get(2);
消费从缓冲区中取到的消息; until false end P3( ) begin repeat
P_C.get(3);
消费从缓冲区中取到的消息; until false end P4( ) begin repeat
P_C.get(4);
消费从缓冲区中取到的消息; until false end parend
13. 某自动质量检测系统有三个进程Q、A、B组成。进程Q每次取一件产品检测,把检测后的产品存放
在货架F上,F的容量为每次只能存放一件产品。若货架上存放的是合格产品则让进程A取出,并在产品上贴标签后包装;若货架上存放的是不合格产品则让进程B取出后,将其丢入废物箱。回答下列问题:
(1)写出用PV操作管理时应定义的信号量及初值:①。
(2)完成下列算法中的填空,使它们能按上述要求正确地并发执行。 进程Q: 取一件产品检测;
②;
进程A: _____⑤; y:=F中产品 ;
26
进程B: ____⑦;
z:=F中产品;
第二章进程管理
F:=检测后的产品 ______⑥; ____⑧;
把产品丢入废物箱;
If F=合格产品then③ 对产品贴标签且包装; else④
解:(1) ①定义信号量empty,fulla,fullb,初值分别为1,0,0。
(2) ② P(empty); ③ V(fulla); ④ V(fullb);
⑤ P(fulla); ⑥ V(empty); ⑦ P(fullb); ⑧ V(empty);
14. 系统有三个进程Read,Write1,Write2共享一个整数缓冲器B,B中每次只能存放一个整数。Read进程每
次启动输入设备输入一个整数到n。若n中是奇数,则由进程Write1将其取出打印;若n中是偶数,则由进程Write2将其取出打印。规定输入与打印整数的个数和次序完全一致。 要求:(1)完善如下程序,在下列A、B空白处填入有关语句,并说明物理意义。
begin S, SO, SE: semaphore;
n: integer; S:=1; SO:=0; SE:=0; Parbegin process Read Begin
L1:从输入设备读一整数到n; P(S); B:=n; if n mod 2=1 then V(SO) else V(SE); goto L1 end;
process Write1 begin
L2: P(SO);
Y:=B;
(A) ; print Y; goto L2 end;
process Write2 begin
L3: (B) ; Z:=B; V(S); Print Z; goto L3 end; Parend; end;
(2)说明信号量S,SO,SE作用及它们的初值的物理意义。
27
第二章进程管理
(3)Read进程中V(SO)与V(SE)对调,程序功能将发生什么变化。 解:(1) (A) V(S) (B) P(SE)
(2) 信号量S,SO,SE作用是实现进程Read、Write1和Write2之间的同步。信号量S的初值为1,表示
开始时缓冲器B是空的,可以存放一个整数,当缓冲器B中存有整数时,其值变为0;信号量SO的初值为0,表示开始时缓冲器B中没有奇数,当缓冲器B中存有一个奇数时,SO的值变为1;信号量SE的初值为0,表示开始时缓冲器B中没有偶数,当缓冲器B中存有一个偶数时,SE的值变为1。
(3) Read进程中V(SO)与V(SE)对调,程序功能将变为:若缓冲器中存放的整数n为奇数时,则由进
程Write2将其取出打印;若n中是偶数,则由进程Write1将其取出打印。 15. (2009全国试题)三个进程P1、P2、P3互斥使用一个包含N(N>0)个单元的缓冲区。P1每次用produce( )
生成一个正整数并用put( )送入缓冲区某个单元中;P2每次用getodd( )从缓冲区中取出一个奇数并用countodd( )统计奇数个数;P3每次用geteven( )从缓冲区中取出一个偶数并用counteven( )统计偶数个数。请用信号量机制实现这三个进程的同步与互斥活动,并说明所定义的信号量的含义。要求用伪代码描述。(本题与第9题、第14题实际上是同一题)
解:定义P1的资源信号量empty来表示缓冲区中空单元个数,用于P1与P2、P3的同步;定义P2的资源信
号量S1来表示缓冲区中奇数的个数,用于P2和P1的同步;定义P3的资源信号量S2来表示缓冲区中偶数的个数,用于P3和P1的同步;定义互斥信号量mutex,用于三个进程互斥访问缓冲区。算法描述如下:
var empty,s1,s2,mutex: semaphore := N,0,0,1; Parbegin P1: begin
x :=produce( ); /* 生成一个数 */ P(empty); /* 判断缓冲区是否有空单元 */ P(mutex); /* 是否有进程访问缓冲区 */ put( ); /* 将生成的数送入缓冲区的某个单元 */ if x mod 2=0 then V(S2); /* 如果是偶数,向P3发出信号 */ else
V(S1); /*如果是奇数,向P2发出信号 */ V(mutex); end P2: begin
P(S1); /* 缓冲区中是否有奇数 */ P(mutex); getodd( ); V(empty); /* 向P1发出信号 */ V(mutex); countodd( ); /* 原答案将此行放在临界区中,因只有P2调用,不需互斥,故移至此 */ end P3: begin
P(S2); P(mutex); geteven( ); V(empty); V(mutex);
28
第二章进程管理
counteven( ); end Parend
16. 设有n个缓冲区构成的循环缓冲区,每个缓冲区能容纳一个整数。写进程Writer把整数逐个存入缓冲
区,读进程Reader则逐个从缓冲区中读出并打印输出,要求打印的与输入的完全一样,即个数、次序、数值一样。试问:
(1)写进程与读进程间具体的制约关系如何? (2)用PV操作写出这两个进程的同步算法程序。
解:(1) 写进程与读进程间具体的制约关系是同步和互斥关系。
(2) 采用PV操作的同步算法程序如下: semaphore mutex, empty, full; mutex=1; //互斥信号量,用于两个进程互斥访问缓冲区 empty=n; //同步信号量,表示空闲缓冲区的数量 full=0; //同步信号量,表示放有整数的缓冲区个数 parbegin
process Writer( ) {
while (1) {
produce_an_integer( ); P(empty); P(mutex);
write_an_integer_to_buffer( ); V(mutex); V(full); } }
process Reader( ) {
while (1) {
P(full); P(mutex);
get_an_integer_from_buffer( ); V(mutex); V(empty);
print_an_integer( ); } } parend 17. 一组生产者进程和一组消费者进程共享9个缓冲区,每个缓冲区可以存放一个整数。生产者进程每次
一次性向3个缓冲区写入整数,消费者进程每次从缓冲区取出一个整数。请用:(1)信号量和P、V操作;(2)管程,写出并发进程能正确执行的算法程序。 解:(1) 信号量和P、V操作的算法描述如下:
semaphore empty=9; //生产者的资源信号量,表示空缓冲区个数 seamphore full=0; //消费者的资源信号量,表示满缓冲区个数 seamphore mutex=1; //互斥信号量,用于互斥访问共享变量i或j
29
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库操作系统分章习题(6)在线全文阅读。
相关推荐: