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

操作系统分章习题(5)

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

第二章进程管理

begin

MPC.get(2); 吃梨子; end parend

7. 设自行车生产车间有两个货架,货架A可以存放8个车架,货架B可以存放20个车轮;又设有4个工人,

他们的活动是重复劳动,分别为:工人1 加工一个车架放入货架A中;工人2、3分别加工车轮放入货架B中(每人每次放入1个车轮);工人4从货架A中取一个车架,再从货架B中取两个车轮,组装成一辆自行车。试用PV操作实现四个工人的合作。

【分析】信号量Aempty表示货架A的空位数,其初值为8;信号量Afull表示货架A上存放的车架数,其初

值为0;信号量Bempty表示货架B的空位数,其初值为20;信号量Bfull表示货架B上存放的车轮数,其初值为0;信号量mutex用于互斥(初值为1)。

解:BEGIN

semaphore Aempty,Bempty,Afull,Bfull,mutex;

Aempty := 8;Bempty:= 20;Afull:= 0;Bfull:= 0;mutex :=1; PARBEGIN

Worker1:BEGIN

L1:生产1个车架;

P(Aempty); //测试货架A是否有空位置 P(mutex); //互斥使用货架A 车架放到货架A; V(Afull); //货架A上的车架数增1,必要时唤醒等待的进程 V(mutex); goto L1; END

Worker2、3:BEGIN

L2:生产1个车轮;

P(Bempty); //测试货架B是否有空位置 P(mutex); //互斥使用货架B 车轮放到货架B; V(Bfull); //货架B上的车轮数增1,必要时唤醒等待的进程 V(mutex); goto L2; END

Worker4:BEGIN

L3:P(Afull); //测试货架A上是否有车架

P(Bfull);P(Bfull); //测试货架B上是否有2个车轮 P(mutex);

取1个车架;取2个车轮; V(Aempty); //货架A空位置增1 V(Bempty);V(Bempty);//货架B空位置增2 V(mutex);

组装成一辆自行车; goto L3; END

20

第二章进程管理

PAREND

END

8. 假定有一个成品仓库,总共能存放8台成品,生产者进程把生产成品放入仓库,消费者进程从仓库中

取出成品消费。为了防止积压,仓库满时就停止生产。由于仓库搬运设备只有一套,故成品的存入和取出只能分别进行,试用P、V操作来实现该方案。 解:semaphore mutex, empty, full ;

mutex=1; //互斥信号量 empty=8; //生产者进程的同步信号量 full=0; //消费者进程的同步信号量 parbegin

process Pi //生产者进程 {

while (1) {

生产一个成品x; P(empty) //看看仓库是否还有空间可放成品 P(mutex); //互斥使用搬运设备 用搬运设备将成品放入仓库; V(full); //仓库中成品数增1(可能唤醒一个消费者) V(mutex); } }

process Cj //消费者进程 {

while (1) {

P(full) //看看仓库是否有成品 P(mutex); //互斥使用搬运设备 用搬运设备将成品从仓库取出;

V(emtpy); //仓库中可放成品数增1(可能唤醒一个生产者) V(mutex); } } parend 9. 有三个进程R、W1、W2共享一个缓冲器B,而B中每次只能存放一个数。当B中无数时,进程R

可将从输入设备上读入的数存放到缓冲器B中;若存放到B中的是奇数,则允许进程W1将其取出打印;若存放到B中的是偶数,则允许进程W2将其取出打印;同时规定:进程R必须等缓冲器中的数被取出后才能再存放下一个数;进程W1或W2对每次存入缓冲器的数只能打印一次;W1和W2都不能从空的缓冲器中取数。用P、V操作作为同步机制写出三个并发进程的同步算法。(动作部分可用文字描述) 解:semaphore S,S1,S2;

S=1; S1=S2=0; parbegin Process R {

while (1) {

从输入设备上读入的数x;

21

第二章进程管理

P(S); B=x;

if (x%2==1) V(S1); //若是奇数,则通知W1 else V(S2); //若是偶数,则通知W2 }

}

Process W1 {

while (1) {

P(S1); y=B; V(S); Print(y); } }

Process W2 {

while (1) {

P(S2); y=B; V(S); Print(y); } }

parend

//看看缓冲器B中是否有奇数 //从缓冲器B中取奇数存于y

//通知R,缓冲器已空,可以在往里存数了 //打印

//看看缓冲器B中是否有偶数 //从缓冲器B中取偶数存于y

//通知R,缓冲器已空,可以在往里存数了

10. 进程P1使用缓冲区buffer向进程P2,P3,P4发送消息(如图2-1所示),要求每当Pl向buffer中

发消息时,只有当P2,P3,P4进程都读取这条消息后P1才可向buffer中发送新的消息。试用信号量机制描述如下图所示进程的动作过程。(本题是下题的特例)

P2 P1 buffer P3 P4 图2-1

解:设P1、P2、P3、P4的资源信号量分别为S1、S2、S3、S4

semaphore S1,S2,S3,S4;

S1.value=3;S2.vale=S3.vale=S4.value=0; (3分) parbegin process P1 {

while (condition) {

P1生成一个消息;

22

第二章进程管理

P(S1);P(S1);P(S1); P1将消息存入缓冲区buffer; V(S2);V(S3);V(S4); }

}

process Pi(i=2,3,4) {

while (condition) {

P(Si);

Pi从buffer中取出消息; V(S1);

Pi消费(使用)该消息; } }

parend

另一解法如下(此法更一般化,可用来解下题):

semphore S1[3], S[3]; for (i=0;i<3;i++) { S1[i]=1; S[i]=0; }

parbegin process P1 {

while (1) {

P1生成一个消息;

for (i=0;i<3;i++) P(S1[i]); //看看P2~P4是否将消息取走 P1将消息存入缓冲区buffer;

for (i=0;i<3;i++) V(S[i]); //通知P2~P4缓冲区buffer中已有消息 } }

Process P2 {

while(1) { P(S[0]); //看看buffer中是否已有消息 从buffer中取出消息;

V(S1[0]); //通知P1,P2已从缓冲区buffer中取走消息 消费(使用)该消息; } }

Process P3 {

while(1) { P(S[1]); //看看buffer中是否已有消息

23

第二章进程管理

从buffer中取出消息;

V(S1[1]); //通知P1,P3已从缓冲区buffer中取走消息 消费(使用)该消息; }

}

Process P4 {

while(1) { P(S[2]); //看看buffer中是否已有消息 从buffer中取出消息;

V(S1[2]); //通知P1,P4已从缓冲区buffer中取走消息 消费(使用)该消息; } }

parend

11. (北大1994年试题)进程A1,A2,...,An1通过m个缓冲区向进程B1,B2,...,Bn2不断地发送

消息。发送和接收工作遵循如下规则: ① 每个发送进程一次发送一个消息,写入一个缓冲区,缓冲区大小与消息长度一样; ② 对每个消息,B1,B2,...,Bn2都需各接收一次,读入各自的数据区内; ③ m个缓冲区都满时,发送进程等待,没有可读的消息时,接收进程等待。 试用P、V操作组织正确的发送和接收操作。(上题是本题的特例) 【分析】这是P-C问题变形。把这一组缓冲区看成n2组缓冲区。

解:设置一个信号量mutex实现诸进程对缓冲区的互斥访问;两个信号量数组empty[n2]和full[n2]描述n2组缓冲区的使用情况。mutex初值为1,数组empty的元素初值为m,数组full的元素初值为0。

var mutex: semaphore :=1;

empty,full: array[0..n2-1] of semaphore; i: integer;

for (i=0;i

empty[i]=m;full[i]=0; }

Aj ( ) //j=1,2,...,n1 {

while (1) { ......

for (int i=0;i

for (i=0;i

24

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库操作系统分章习题(5)在线全文阅读。

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