计算机操作系统(第四版)汤小丹课后答案完整版

count:=count-1;

if notfull.quene then notfull.signal; end

begin in:=out:=0; count:=0 end

在利用管程解决生产者一消费者问题时,其中的生产者和消费者可描述为:producer: begin pepeat

produce an inem in nestp PC.put(item); until false; end

consumer: begin repeat

PC.get(item);

consume the item in enxtc; until false; end

31 .什么是 AND 信号量?试利用

AND 信号量写出生产者一消费者问题的解法。

答:为解决并行带来的死锁问题,在

wait

操作中引入

AND

条件,其基本思想是将进

程在整个运行过程中所需要的所有临界资源,

一次性地全部分配给进程,

用完后一次性释放。

解决生产者-消费者问题可描述如下

:

var mutex,empty,full: semaphore:=1,n,0;

buffer: array[0,...,n-1] of item; in,out: integer:=0,0; begin parbegin

producer: begin repeat

produce an item in nextp;

wait(empty);

wait(s1,s2,s3,...,sn); //s1,s2,...,sn 为执行生产者进程除 empty 外其余的条件 wait(mutex);

buffer(in):=nextp; in:=(in+1) mod n; signal(mutex); signal(full);

signal(s1,s2,s3,...,sn); until false; end

consumer: begin

repeat wait(full);

wait(k1,k2,k3,...,kn); //k1,k2,...,kn

为执行消费者进程除

full 外其余的条件

wait(mutex);

nextc:=buffer(out); out:=(out+1) mod n; signal(mutex); signal(empty);

signal(k1,k2,k3,...,kn);

consume the item in nextc; until false; end parend end

32 .什么是信号量集?试利用信号量集写出读者一写者问题的解法。

答:对 AND 信号量加以扩充,形成的信号量集合的读写机制。 解法: Var RN integer;

L,mx: semaphore:=RN,1; begin parbegin reader:begin repeat

Swait(L,1,1); Swait(mx,1,1);

perform read operation;

Ssignal(L,1); until false end

writer:begin repeat

Swait(mx,1,1;L,RN,0); perform write operation; Ssignal(mx,1);

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4