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

操作系统分章习题(6)

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

第二章进程管理

Bi ( ) //i=1,2,...,n2 {

while (1) {

...... P(full[i]); P(mutex); 将消息从缓冲区取出; V(mutex); V(empty[i]); ...... } }

parbegin A1( ); A2( ); ...... An1( ); B1( ); B2( ); ...... Bn2( ); parend

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

buffer中发消息时,只有当P2,P3,P4进程都读取这条消息后P1才可向buffer中发送新的消息。试用管程机制描述四个进程的动作过程。 解:定义管程如下(用伪代码):

type P_C=monitor

var flag : array[2..4] of integer; cc: array[1..4] of condition;

procedure put() //P1调用此过程将消息放入缓冲区 begin

if flag[2]+flag[3]+flag[4]>0 then cc[1].wait; 将消息放入缓冲区buffer; for i := 2 to 4 do begin

flag[i] := 1;

if cc[i].queue then cc[i].signal; end

end

procedure get(integer i) //P2、P3、P4调用此过程从buffer中取消息 begin

if flag[i]=0 then cc[i].wait; //若buffer中无消息则等待 从buffer中取消息; flag[i] := 0;

25

第二章进程管理

if flag[2]+flag[3]+flag[4] = 0 and cc[1].queue then cc[1],signal;

end begin

flag[2]:= flag[3]:= flag[4]:= 0; //初始化数据 end

采用管程描述P1、P2、P3、P4四个进程的活动如下: parbegin P1( ) begin repeat

生成一个消息; P_C.put( ); until false end P2( ) begin repeat

P_C.get(2);

消费从缓冲区中取到的消息; until false end P3( ) begin repeat

P_C.get(3);

消费从缓冲区中取到的消息; until false end P4( ) begin repeat

P_C.get(4);

消费从缓冲区中取到的消息; until false end parend

13. 某自动质量检测系统有三个进程Q、A、B组成。进程Q每次取一件产品检测,把检测后的产品存放

在货架F上,F的容量为每次只能存放一件产品。若货架上存放的是合格产品则让进程A取出,并在产品上贴标签后包装;若货架上存放的是不合格产品则让进程B取出后,将其丢入废物箱。回答下列问题:

(1)写出用PV操作管理时应定义的信号量及初值:①。

(2)完成下列算法中的填空,使它们能按上述要求正确地并发执行。 进程Q: 取一件产品检测;

②;

进程A: _____⑤; y:=F中产品 ;

26

进程B: ____⑦;

z:=F中产品;

第二章进程管理

F:=检测后的产品 ______⑥; ____⑧;

把产品丢入废物箱;

If F=合格产品then③ 对产品贴标签且包装; else④

解:(1) ①定义信号量empty,fulla,fullb,初值分别为1,0,0。

(2) ② P(empty); ③ V(fulla); ④ V(fullb);

⑤ P(fulla); ⑥ V(empty); ⑦ P(fullb); ⑧ V(empty);

14. 系统有三个进程Read,Write1,Write2共享一个整数缓冲器B,B中每次只能存放一个整数。Read进程每

次启动输入设备输入一个整数到n。若n中是奇数,则由进程Write1将其取出打印;若n中是偶数,则由进程Write2将其取出打印。规定输入与打印整数的个数和次序完全一致。 要求:(1)完善如下程序,在下列A、B空白处填入有关语句,并说明物理意义。

begin S, SO, SE: semaphore;

n: integer; S:=1; SO:=0; SE:=0; Parbegin process Read Begin

L1:从输入设备读一整数到n; P(S); B:=n; if n mod 2=1 then V(SO) else V(SE); goto L1 end;

process Write1 begin

L2: P(SO);

Y:=B;

(A) ; print Y; goto L2 end;

process Write2 begin

L3: (B) ; Z:=B; V(S); Print Z; goto L3 end; Parend; end;

(2)说明信号量S,SO,SE作用及它们的初值的物理意义。

27

第二章进程管理

(3)Read进程中V(SO)与V(SE)对调,程序功能将发生什么变化。 解:(1) (A) V(S) (B) P(SE)

(2) 信号量S,SO,SE作用是实现进程Read、Write1和Write2之间的同步。信号量S的初值为1,表示

开始时缓冲器B是空的,可以存放一个整数,当缓冲器B中存有整数时,其值变为0;信号量SO的初值为0,表示开始时缓冲器B中没有奇数,当缓冲器B中存有一个奇数时,SO的值变为1;信号量SE的初值为0,表示开始时缓冲器B中没有偶数,当缓冲器B中存有一个偶数时,SE的值变为1。

(3) Read进程中V(SO)与V(SE)对调,程序功能将变为:若缓冲器中存放的整数n为奇数时,则由进

程Write2将其取出打印;若n中是偶数,则由进程Write1将其取出打印。 15. (2009全国试题)三个进程P1、P2、P3互斥使用一个包含N(N>0)个单元的缓冲区。P1每次用produce( )

生成一个正整数并用put( )送入缓冲区某个单元中;P2每次用getodd( )从缓冲区中取出一个奇数并用countodd( )统计奇数个数;P3每次用geteven( )从缓冲区中取出一个偶数并用counteven( )统计偶数个数。请用信号量机制实现这三个进程的同步与互斥活动,并说明所定义的信号量的含义。要求用伪代码描述。(本题与第9题、第14题实际上是同一题)

解:定义P1的资源信号量empty来表示缓冲区中空单元个数,用于P1与P2、P3的同步;定义P2的资源信

号量S1来表示缓冲区中奇数的个数,用于P2和P1的同步;定义P3的资源信号量S2来表示缓冲区中偶数的个数,用于P3和P1的同步;定义互斥信号量mutex,用于三个进程互斥访问缓冲区。算法描述如下:

var empty,s1,s2,mutex: semaphore := N,0,0,1; Parbegin P1: begin

x :=produce( ); /* 生成一个数 */ P(empty); /* 判断缓冲区是否有空单元 */ P(mutex); /* 是否有进程访问缓冲区 */ put( ); /* 将生成的数送入缓冲区的某个单元 */ if x mod 2=0 then V(S2); /* 如果是偶数,向P3发出信号 */ else

V(S1); /*如果是奇数,向P2发出信号 */ V(mutex); end P2: begin

P(S1); /* 缓冲区中是否有奇数 */ P(mutex); getodd( ); V(empty); /* 向P1发出信号 */ V(mutex); countodd( ); /* 原答案将此行放在临界区中,因只有P2调用,不需互斥,故移至此 */ end P3: begin

P(S2); P(mutex); geteven( ); V(empty); V(mutex);

28

第二章进程管理

counteven( ); end Parend

16. 设有n个缓冲区构成的循环缓冲区,每个缓冲区能容纳一个整数。写进程Writer把整数逐个存入缓冲

区,读进程Reader则逐个从缓冲区中读出并打印输出,要求打印的与输入的完全一样,即个数、次序、数值一样。试问:

(1)写进程与读进程间具体的制约关系如何? (2)用PV操作写出这两个进程的同步算法程序。

解:(1) 写进程与读进程间具体的制约关系是同步和互斥关系。

(2) 采用PV操作的同步算法程序如下: semaphore mutex, empty, full; mutex=1; //互斥信号量,用于两个进程互斥访问缓冲区 empty=n; //同步信号量,表示空闲缓冲区的数量 full=0; //同步信号量,表示放有整数的缓冲区个数 parbegin

process Writer( ) {

while (1) {

produce_an_integer( ); P(empty); P(mutex);

write_an_integer_to_buffer( ); V(mutex); V(full); } }

process Reader( ) {

while (1) {

P(full); P(mutex);

get_an_integer_from_buffer( ); V(mutex); V(empty);

print_an_integer( ); } } parend 17. 一组生产者进程和一组消费者进程共享9个缓冲区,每个缓冲区可以存放一个整数。生产者进程每次

一次性向3个缓冲区写入整数,消费者进程每次从缓冲区取出一个整数。请用:(1)信号量和P、V操作;(2)管程,写出并发进程能正确执行的算法程序。 解:(1) 信号量和P、V操作的算法描述如下:

semaphore empty=9; //生产者的资源信号量,表示空缓冲区个数 seamphore full=0; //消费者的资源信号量,表示满缓冲区个数 seamphore mutex=1; //互斥信号量,用于互斥访问共享变量i或j

29

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

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