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

操作系统分章习题(4)

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

第二章进程管理

END PB:BEGIN

L2:P(full1);

P(mutex1); get from buffer 1; V(avail1); V(mutex1);

P(avail2); P(mutex2); put to buffer 2; V(full2); V(mutex2); goto L2 ; END PC:BEGIN

L3:P(full2);

P(mutex2); get from buffer 2; V(avail2); V(mutex2); print RECORD goto L3 ; END PAREND END

3. 有三个进程,Reader进程读入数据number1,将其放入缓冲器B1,Executor进程将B1中数据取出,处

理成数据number2,将其放入缓冲器B2,Printer进程将number2数据取出打印,假设B1和B2只能存放一个数据,用P、V操作管理这三个进程的执行。 解:解:采用P、V操作的同步算法如下:

BEGIN

semaphore empty1, full1, empty2, full2 ; empty1.vale = empty2.value = 1 ; ful2.value = full2.value = 0 ; PARBEGIN Reader:BEGIN

L1:read number1 ;

P(empty1) ; B1=number1 ; V(full1) ; goto L1; END

Executor:BEGIN

L2:P(full1) ;

take number1 from B1 ;

15

第二章进程管理

V(empty1) ;

Process number1-->number2 ; P(empty2) ; B2=number2 ; V(full2) ; goto L2; END

Printer:BEGIN

L3:P(full2);

take number2 from B2 ; V(empty2) ; Print(number2) ; goto L3; END

COEND END

4. 假定系统有三个并发进程read, move和print共享缓冲器B1和B2。进程read负责从输入设备上读信息,

每读出一个记录后把它存放到缓冲器B1中。进程move从缓冲器B1中取出一记录,加工后存入缓冲器B2。进程print将B2中的记录取出打印输出。缓冲器B1和B2每次只能存放一个记录。要求三个进程协调完成任务,使打印出来的与读入的记录的个数,次序完全一样。请用PV操作,写出它们的并发程序。(注:本题与第3题是同一个题,与第5题类似) 解:参考程序如下: begin

SR, SM1, SM2, SP: semaphore; B1, B2 : record;

SR:=1; SM1:=0; SM2=1; SP:=0; cobegin

process read X : recoed; begin

R: X:=从输入设备上读入的一个记录; P(SR); B1:=X; V(SM1); goto R; end;

process move Y : record; begin

M: P(SM1); Y :=B1;

V(SR); 加工Y中的记录; P(SM2); B2 := Y;

16

第二章进程管理

V(SP); goto M; end; process print Z : record; begin P: P(SP);

Z := B2; V(SM2); 打印Z中的记录; goto P; end; coend; end;

5. 今有3个并发进程R、M、P,它们共享一个缓冲器B。进程R负责从输入设备读入信息,每读一个记

录后把它存放在缓冲器B中。进程M在缓冲器B中加工进程R存入的记录。进程P把加工后的记录打印出来。缓冲器B中每次只能存放一个记录,当记录被加工输出后,缓冲器B中又可以存放一个新的记录。为协调它们的工作,采用PV操作进行管理。 解:semaphore SR,SM,SP;

SR=1; SM=0; SP=0; parbegin Process R {

while (1) {

从输入设备读入信息X; P(SR); //看看缓冲区B是否是空的 B=X; //信息存入缓冲区B V(SM); //通知M,缓冲区B中已有记录 } }

Process M {

while (1) {

P(SM); //测试R是否已在B中存放信息 在缓冲器B中加工进程R存入的记录; V(SP); //通知P缓冲区B中的信息已可打印 } }

Process P {

while (1) {

P(SP); //测试M是否已将信息加工好 从B中取M加工后的信息Y;

V(SR); //通知R,缓冲区B已可房信息 Print(Y); //打印信息Y

17

第二章进程管理

} }

parend

6. 若一只盘子一次只能放一个水果,A只往盘中放苹果,B只往盘中放梨子,C只从盘中取苹果,D只

从盘中取梨子。试用:(1) 信号量和P、V操作;(2) 管程,写出同步算法。 解:(1) 采用P、V操作的同步算法如下:

semaphore SAB=1; //A、B的资源信号量,同时又是它们的互斥信号量 semaphore SC=0; //C的资源信号量(用于与A同步) semaphore SD=0; //D的资源信号量(用于与B同步) begin

parbegin

process A: //进程A的算法描述 {

while(true) { 取一个苹果;

wait(SAB); //测试盘子是否为空 将一苹果放入盘中;

signal(SC) //通知C盘中已有苹果(可能唤醒C) } }

process C: {

while(true) {

wait(SC); //测试盘子是否有苹果 从盘中取出苹果;

signal(SAB); //通知A(或B)盘子一空(可能唤醒A或B) 消费该苹果; } }

process B: //进程B的算法描述 {

while(true) { 取一个梨子;

wait(SAB); //测试盘子是否为空 将一梨子放入盘中;

signal(SD) //通知D盘中已有梨子(可能唤醒D) } }

process D: {

while(true) {

wait(SD); //测试盘子是否有梨子 从盘中取出梨子;

signal(SAB); //通知A(或B)盘子一空(可能唤醒A或B) 消费该梨子;

18

第二章进程管理

}

}

parend end

(2) 采用管程的同步算法如下:

首先定义管程MPC,该管程可描述如下: type MPC=monitor

var flag: integer; //flag=0:盘中无水果;=1盘中有苹果;=2盘中有梨子 empty: condition; //用于A或B等待空盘子

W: array[1..2] of condition //W[1]用于等待苹果,W[2]用于等待梨子 procedure entry put(integer k) begin

if flag>0 then empty.wait; //生产者A或B进程阻塞 flag=k;

放一k号水果入盘中; //设1号水果为苹果,2号水果为梨子 if W[k].queue then full.signal; //若有等待k号水果者,则唤醒之

end

procedure entry get(integer k) begin

if flag<>k then W[k].wait; //消费者C或D进程阻塞 从盘中取k号水果; flag := 0;

if empty.queue then empty.signal; //若等待队列非空,则唤醒队首的一个生产者进程 end begin

flag :=0; //初始化内部数据 end

A、B、C、D四个进程的同步算法可描述如下: parbegin Process A begin

任取一个苹果; MPC.put(1); end

Process B begin

任取一个梨子; MPC.put(2); end

Process C begin

MPC.get(1); 吃苹果; end

Process D

19

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

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