操作系统第二章作业讲解

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

第二章习题讲解

1、进程之间存在着哪几种制约关系?各是什么原因引起的?下列活动分别属于哪种制约关系?

(1)若干同学去图书馆借书;(2)两队举行篮球比赛;(3)流水线生产的各道工序;(4)商品生产和社会消费。

答:进程之间存在着直接制约与间接制约这两种制约关系,其中直接制约(同步)是由于进程间的相互合作而引起的,而间接制约(互斥)则是由于进程间共享临界资源而引起的。(1)若干同学去图书馆借书,是间接制约,其中书是临界资源;(2)两队举行篮球比赛,是间接制约,其中蓝球是临界资源;(3)流水线生产的各道工序,是直接制约,各道工序间需要相互合作,每道工序的开始都依赖于前一道工序的完成;(4)商品生产和社会消费,是直接制约,两者也需要相互合作:商品生产出来后才可以被消费;商品被消费后才需要再生产。

2、试写出相应的程序来描述下图所示的前趋图

var a,b,c,d,e,f:semaphore:=0,0,0,0,0,0;

begin S1; signal(a); signal(b); signal(c); end;

begin wait(a); S2; end;

begin wait(b); S3; signal(d); end;

begin wait(c); S4; end;

begin wait(d); S5; signal(e); signal(f); end;

begin wait(e); S6; end;

begin wait(f); S7; end;

3、已知一个求值公式(A2+3B)/(B+5A),若A、B已赋值,试画出该公式求值过程的前趋图,并使用信号量描述这些前趋关系。

答:根据求值公式,假设:

S1: X1=A*A

S2: X2=3*B

S3: X3=5*A

S4: X4=X1+X2

S5: X5=B+X3

S6: X6=X4/X5

var a,b,c,d,e:semaphore:=0,0,0,0,0;

begin S1; signal(a); end;

begin S2; signal(b); end;

begin S3; signal(c); end;

begin wait(a); wait(b); S4; signal(d); end

begin wait(c); S5; signal(e); end

begin wait(d); wait(e); S6; end

4、桌上有一只能容纳一个水果的盘子;爸爸专向盘子中放苹果(apple),妈妈专向盘子中放桔子(orange),一个儿子专等吃盘子中的桔子,一个女儿专等吃盘子里的苹果,1)试用信号量实现他们的同步关系;2)如果有两个家庭的爸爸、妈妈、儿子、女儿和二只盘子呢?会需要专门的实现吗?

var empty,apple,orange:semaphore:= 1,0,0;

说明:empty与apple表示盘子为空与盘子中放入了苹果,用于表示爸爸与女儿间的同步关系;empty与orange表示盘子为空与盘子中放入了桔子,用于表示妈妈与儿子间的同步关系;

答案:1)使用记录型信号量

2)使用记录型信号量

var mutex,empty,apple,orange:semaphore:=1,2,0,0;

dish: array[0,1] of fruit;

repeat

producer an orange;

wait(empty);

wait(mutex);

if dish[in]==apple or dish[in]==orange then

in:=(in+1) mod 2;

disk[in]:=orange;

in:=(in+1) mod 2;

signal(mutex);

signal(orange);

Until false

end repeat

wait(orange);

wait(mutex);

if dish[out]==apple then

out:=(out+1) mod 2;

get an orange from dish[out]; out:=(out+1) mod 2;

signal(mutex);

signal(empty);

Eat an apple;

Until false

end

5、试用信号量实现课件92页,司机与售票员进程的同步关系

driver:begin

repeat

drive a bus;

arrive at bus station;

signal(stop);

rest;

wait(door);

Until false

end conductor:begin

repeat

sell tickets;

wait(stop);

Open the door; Close the door signal(door); Until false

end

6、试用信号量解决读者—写者问题,使得写者与读者优先级根据到达顺序确定。1)典型错误代码讲解:不增加任何信号量

Var rmutex, wmutex:semaphore∶=1,1;

Readcount:integer∶ =0;

begin

parbegin

Reader:begin

repeat

wait(rmutex);

if Readcount=0 then wait(wmutex);

Readcount∶ = Readcount+1;

signal(rmutex);

perform read operation;

wait(rmutex);

Readcount∶= Readcount-1;

if Readcount=0 then signal(wmutex);

相关文档
最新文档