77范文网 - 专业文章范例文档资料分享平台

20120229-操作系统作业及参考答案

来源:网络收集 时间:2018-12-26 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

《操作系统》作业及参考答案-20120229

1、 在生产者—消费者问题中,如果缺少了signal(full)或signal(empty),对执行结果将会有

何影响? 参考答案:

如果缺少signal(full),那么表明从第一个生产者进程开始就没有改变信号量full 值,

即使缓冲池产品已满,但full 值还是0,这样消费者进程执行wait(full)时认为缓冲池是空而被放入进程等待队列,消费者进程一直处于等待状态。

如果缺少signal(empty),假设在生产者进程向n个缓冲区投满产品后消费者进程才开始从中取产品,这时empty=0,full=n,那么每当消费者进程取走一个产品empty 值并不改变,直到缓冲池取空了,empty 值也是0,即使目前缓冲池有n 个空缓冲区,生产者进程要想再往缓冲池中投放产品也会因为申请不到空缓冲区被阻塞。

2、 在生产者-消费者问题中,如果将2个P操作,即P(full)和P(mutex)互换位置,或者P(empty)

和P(mutex)互换位置,其后果如何?如果将2个V操作,即V(full)和V(mutex)互换位

置,或者V(empty)和V(mutex)互换位置,其后果又会如何?

参考答案:

如果对调生产者(或消费者)进程中的两个P操作可能会发生死锁。(考虑系统中缓冲区全满时,若一生产者进程先执行了wait(mutex)操作并获得成功,则当再执行wait(empty)操作时,它将因失败而进入阻塞状态,它期待消费者进程执行signal(empty)来唤醒自己,在此之前,它不可能执行signal(mutex)操作,从而使试图通过执行wait(mutex)操作而进入自己的临界区的其他生产者和所有消费者进程全部进入阻塞状态,这样容易引起系统死锁。) 如果对调生产者(或消费者)进程中的两个V操作,只是影响进程对临界资源的释放次序,而不会引起系统死锁,因此可以互换位置。 3、 试修改下面生产者—消费者问题解法中的错误:

参考答案: producer: begin repeat …

producer an item in nextp;

1

wait(mutex);

wait(full); /* 应为wait(empty),而且还应该在wait(mutex)的前面 */ buffer(in):=nextp;

/* 缓冲池in指针应前移: in:=(in+1) mod n; */ signal(mutex); /* signal(full); */ until false; end

consumer: begin

repeat

wait(mutex);

wait(empty); /* 应为wait(full),而且还应该在wait(mutex)的前面 */ nextc:=buffer(out);

out:=out+1; /* 考虑循环,应改为: out:=(out+1) mod n; */ signal(mutex);/* signal(empty); */

consumer item in nextc; until false; end

4、 试利用记录型信号量写出一个不会出现死锁的哲学家进餐问题的算法。

参考答案:(略,请参考课件)

5、 在测量控制系统中的数据采集任务时,把所采集的数据送往一单缓冲区;计算任务从该单缓冲区中取出数据进行计算。试写出利用信号量机制实现两任务共享单缓冲区的同步算法。

参考答案:

解法一:.

Var mutex, empty, full: semaphore:=1, 1, 0; gather: begin repeat ……

gather data in nextp; wait(empty); wait(mutex); buffer:=nextp; signal(mutex); signal(full); until false; end compute: begin repeat …… wait(full);

2

wait(mutex); nextc:=buffer; signal(mutex); signal(empty);

compute data in nextc; until false;

end

解法二:

Var empty, full: semaphore:=1, 0; gather:

begin repeat ……

gather data in nextp; wait(empty); buffer:=nextp; signal(full); until false; end compute: begin repeat …… wait(full); nextc:=buffer; signal(empty);

compute data in nextc; until false; end

6、 设有n个进程共享一个程序段,对于如下两种情况,请问所采用的信号量初值是否相同?

各是多少?信号量的值的变化范围如何?

(1)如果每次只允许一个进程进入该程序段;

(2)如果每次最多允许m个进程(m≤n)同时进入该程序段。

参考答案:

(1)由于每次只允许一个进程进入该程序段,因此可以将该程序段看成是临界资源,应设初值为1的信号量。当没有进程进入该程序段时,信号量的值为1;当有一个进程进入该程序段且没有进程等待进入该程序段时,信号量的值为0;当有一个进程进入该程序段且有一个进程等待进入该程序段时,信号量的值为-1;最多可能有n-1个进程等待进入该程序段,所以信号量的取值范围是:-(n-1)≤信号量≤1

(2)由于每次最多允许m个进程进入该程序段,因此可以将这个程序段看成是m个程序段,每个进程使用一个程序段,应设初值为m的信号量。当没有进程进入该程序段时,信号量的值为m;当有一个进程进入该程序段且没有进程等待进入该程序段时,信号量的值为m-1;当有m个进程进入该程序段且有一个进程等待进入该程序段时,信号量的

3

值为-1;最多可能有n-m个进程等待进入该程序段,所以信号量的取值范围为:-(n-m)≤信号量≤m。

4

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库20120229-操作系统作业及参考答案在线全文阅读。

20120229-操作系统作业及参考答案.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/390199.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: