云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > VERYGOOD操作系统硕士研究生入学考试模拟试题参考答案(电子)

VERYGOOD操作系统硕士研究生入学考试模拟试题参考答案(电子)

  • 62 次阅读
  • 3 次下载
  • 2025/5/26 1:30:46

cobegin

process producer_i begin

L1:生产3个整数; P(SPUT); P(S1);

buf[putptr]:=整数; putptr:=(putptr+1) mod 10; buf[putptr]:=整数; putptr:=(putptr+1)mod 10; buf[putptr]:=整数; putptr:=(putptr+1)mod 10; V(SGET); V(SGET); V(SGET); V(S1); GOTO L1; end;

process consumer_j VAR y:integer; begin

L2:P(SGET); P(S2); Y:=buf[getptr]:

getptr:=(getptr+1)mod 10; count:=count+1; if count=3 then begin count:=0;

V(SPUT); end; V(S2);

消费一个整数y; COTO L2; end;

coend.

2. 有如图所示的工作模型。其中有3个进程P0、P1、P2和3个缓冲区B0、B1、B2。进程间借助于相邻缓冲区传递信息,Pi每次从Bi中取一条消息,经加工送义B(i+1) mod 3中。

29

B0、B1、B2分别可存放3、2、2个消息。初始时,仅B0有一个消息。用P、V操作写出P0、P1、P2的同步及互斥流程。(北京理工大1999) B0

P0

P2

B2 B1 P1 解:

本题中,有3组生产者---消费者,第一组 P2为生产者,P0为消费者,使用缓冲区B0;第二组 P0为生产者,P1为消费者,使用缓冲区B1;第三组 P1为生产者,P2为消费者,使用缓冲区B2。P2每生产一个产品放入B0,P0从B0取出一个产品加工后放入B1。然后,P0又变成第二组的生产者,而P1为消费者,工作过程类似,直到第三组生产者---消费者进程。注意,每个Pi均要与Bi和B(i+1)两个缓冲区联系。

对B0、B1、B2可设置互斥信号量mutex0、mutex1、mutex2。由于缓冲区容量均大于1,可把B0、B1、B2构造成环形队列,相应的输入指针为in0、in1、in2,而输出指针为out0、out1、out2。empty0、empty1、empty2分别代表B0、B1、B2空缓冲个数,而full0、full1、full2分别代表B0、B1、B2装满消息的缓冲区个数,已知初始时B0中装了一个消息。 var

mutex0 ,mutex1,mutex2:semaphore; empty0,empty1,empty2:semaphore; full0,full1,full2:semaphore;

in0,in1,in2,out0,out1,out2:integer; mutex0 :=mutex1:=mutex2:=1;

empty0:=empty1:=empty2:=2; /*B0为三个缓冲区,二个是空的 full0:=1;full1:=full2:=0; /*B0中有一个是满的

in0:=1;in1:=in2:=0; /*in0=1是因B0中已有一消息 cobegin

process P0 begin repeat P(full0); P(mutex0);

从B0(out0)取一个消息; out0:=(out0+1) mod 3; V(mutex0); V(empty0);

30

加工消息; P(empty1); P(mutex1);

加工消息送B1(in1); in1:=(in1+1) mod 2

V(mutex1); V(full1); until false; end;

process P1 begin repeat P(full1); P(mutex1);

从B1(out1)取一个消息; out1:=(out1+1) mod 2; V(mutex1); V(empty1); 加工消息; P(empty2); P(mutex2);

加工消息送B2(in2); in2:=(in2+1) mod 2

V(mutex2); V(full2); until false; end;

process P2 begin repeat P(full2); P(mutex2);

从B2(out2)取一个消息; out2:=(out2+1) mod 2; V(mutex2); V(empty2); 加工消息; P(empty0); P(mutex0);

加工消息送B0(in0); in0:=(in0+1) mod 3

V(mutex0); V(full0); until false;

31

end; coend.

3. 有n个进程将字符读入到一个容量为80的缓冲区中(n>1),当缓冲区满后,由另一个进程Pb负责一次取走这80个字符。这种过程循环往复,请写出n个读入进程(P1, P2,?Pn)和Pb的动作序列。(可以用文字或表达式来描述动作序列,并假设Pi每次读一个字符到缓冲区中。)(大连理工2002) 解:

var mutex,empty,full:semaphore;

count,in:integer

buffer:array[0..79] of char; mutex:=1;empty:=80;full:=0; count:=0;in:=0; cobegin

process P i(i=1,...,n))

begin

L: 读入一字符到x; P(empty); P(mutex);

Buffer[in]:=x; in:=(in+1) mod 80; count++;

if (count==80) then

{count:=0;V(mutex);V(full);} else V(mutex); goto L; end; process Pb begin

P(full); P(mutex);

读出字符从buffer[0]; … 读出字符从buffer[79]; in:=0; V(mutex);

for j:=1 to 80 do V(empty);

end; coend.

4. 有座东西方向架设、可双向通行的单车道简易桥,最大载重负荷为4辆汽车。请定义合适的信号量,正确使用PV操作,给出任一车辆通过该简易桥的管理算法,解答中请回答下列问题:(南京大学2003)

32

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

cobegin process producer_i begin L1:生产3个整数; P(SPUT); P(S1); buf[putptr]:=整数; putptr:=(putptr+1) mod 10; buf[putptr]:=整数; putptr:=(putptr+1)mod 10; buf[putptr]:=整数; putptr:=(putptr+1)mod 10; V(SGET); V(SGET); V(SGET); V(S1); GOTO L1; end; process consumer_j VAR y:integer; begin L2:P(SGET); P(S2); Y:=buf[getptr]: getptr:=(getptr+1)mod 10; count:=count+1;

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com