操作系统答案 2015-6-6(8)

2019-01-05 12:36

区\代码,用于恢复未被访问标志. 26、

同步机构应遵循哪些基本准则?为什么?

a. 空闲让进. b. 忙则等待. c. 有限等待. d. 让权等待. 27、

试从物理概念上来说明记录型信号量和wait和signal操作?

(有待讨论). 28、

你认为整型信号量机制和记录型信号量机制,是否完全遵循了同步机构

的四条准则?

a. 在整型信号量机制中,未遵循\让权等待\的准则.

b. 记录型信号量机制完全遵循了同步机构的\空闲让进,忙则等待,有限等待,让权等待\四条准则.

28

29、 在生产者-消费者问题中,如果缺少了signal(full)或signal(empty),对

执行结果会有何影响?

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

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(mutex); buffer(in):=nextp; in:=(in+1) mod n; signal(mutex); /* ************** */ signal(full); /* ************** */ until false; end

consumer: begin repeat wait(full); wait(mutex); nextc:=buffer(out); out:=(out+1) mod n; signal(mutex);

29

/* ************** */ signal(empty); /* ************** */ consume the item in nextc; until false; end parend end 30、

在生产者-消费者问题中,如果将两个wait操作即wait(full)和

wait(mutex)互换位置;或者是将signal(mutex)与signal(full)互换位置结果会如何? 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(mutex); buffer(in):=nextp; in:=(in+1) mod n;

signal(full); signal(mutex);

until false; end

30

consumer: begin repeat

wait(full); wait(mutex);

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

signal(mutex); signal(empty);

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

a. 对于生产者进程来说,如wait(empty)和wait(mutex)互换位置后,如执行wait(mutex)成功,则不允许其他生产者或消费者进来:此时,再执行wait(empty)时,发现没有空的缓冲区,因此会等待空的缓冲区;也即:生产者进程等待在wait(empty)这一位置,不再向下执行;

与此同时,由于此时的mutex为0,消费者不能进入缓冲区,也自然不能取走产品,所以消费者会等待在缓冲区外面;

因此,生产者在等待消费者来缓冲区并取走产品,但却 不释放缓冲区的进入权;而消费者等待生产者释放缓冲区的进入权,以便取走产品,是满的缓冲区变成空,从而使得生产者能够放产品;但生产者没有释放进入缓冲区的权限;导致死锁。

b.对于消费者进程,如果而wait(full)与wait(mutex)互换,也会造成死锁;情况类似于生产者的互换,不再赘述。

b. 而signal(mutex)与signal(full)互换位置后,从逻辑上来说应该是一样的.

31

31、 我们为某临界区设置一把锁W,当W=1时,表示关锁;W=0时,表示

锁已打开.试写出开锁原语和关锁原语,并利用它们去实现互斥. 开锁原语: unlock(W): W=0; 关锁原语: lock(W):

if(W==1) do no_op; W=1;

利用开关锁原语实现互斥: var W: semaphore:=0; begin parbegin process : begin repeat lock(W);

critical section unlock(W); remainder section until false; end parend 32、

试修改下面生产者-消费者问题解法中的错误:

producer: begin repeat . .

producer an item in nextp; wait(mutex);

wait(full); /* 应改为wait(empty),而且还应该在wait(mutex)的前面 */

32


操作系统答案 2015-6-6(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:西南科技大学网络教育学院

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: