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

操作系统原理试题库2015

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

P(avail); //看看箱子中是否还有放车架的位置 P(mutex);

车架放入箱中; V(mutex); V(fulla); //通知工人3,箱子中多了个车架 V(availb); //箱子中允许放的车轮数增1 }

}

process worker2( ) {

while (1) {

加工一个车轮; P(availb); P(avail); //看看箱子中是否还有放车架的位置 P(mutex);

车轮放入箱中; V(mutex); V(fullb); //通知工人3,箱子中多了个车架 V(availa); } }

process worker3( ) {

while (1) {

P(availa); P(mutex);

从箱中取一个车架; V(mutex); V(avail); P(availb); P(mutex);

从箱中取一个车轮; P(mutex); V(avail); P(availb); P(mutex);

从箱中再取一个车轮; V(mutex); V(avail);

组装为一台车; } } parend 45

5分

7分

10分

``020450253101601

有如图所示的工作模型:

三个进程P0、P1、P2和三个缓冲区B0、B1、B2,进程间借助相邻缓冲区传递消息:P0每次从B0中取出一条消息经加工后送入B1中,P1每次从B1中取出一条消息经加工后送入B2中,P2每次

B0 P0 P2 B2 P1 从B2中取出一条消息经加工后送入B0中。B0,B1,B2分别可存放3,2,2个消息。初始时B0中有2个消息,B1 ,B2中各有1个消息。用P、V操作写出P0,P1,P2的同步及互斥流程。 ``020450253101600

解:semaphore empty0,full0,empty1,full1,empty2,full2,mutex;

empty0=1;full0=2; //冲区B0有2个消息,还可放1个消息 empty1=1; full1=1; //冲区B1有1个消息,还可放1个消息 empty2=1; full2=1; //冲区B2有1个消息,还可放1个消息 mutex=1; //互斥信号量 3分 parbegin Process P0 {

while (1) {

P(full0); //看看B0中是否有消息 P(mutex); //互斥访问B0 从缓冲区B0中取一个消息x; V(mutex);

V(empty0); //B0中空出一个存放消息的位置 加工消息x;

P(empty1); //看看B1中是否可放一个消息 P(mutex); //互斥访问B1 将加工后的x存入缓冲区B1; V(mutex); V(full1); //B1中增加一个消息 6分 } }

Process P1 {

while (1) {

P(full1); //看看B1中是否有消息 P(mutex); //互斥访问B1 从缓冲区B1中取一个消息y;

46

B1

V(mutex); V(empty1); //B1中空出一个存放消息的位置 加工消息y; P(empty2); //看看B2中是否可放一个消息 P(mutex); //互斥访问B2 将加工后的x存入缓冲区B2; V(mutex); V(full2); //B2中增加一个消息 }

}

Process P2 {

while (1) {

P(full2); //看看B2中是否有消息 P(mutex); //互斥访问B2 从缓冲区B2中取一个消息z; V(mutex);

V(empty2); //B2中空出一个存放消息的位置 加工消息z;

P(empty0); //看看B0中是否可放一个消息 P(mutex); //互斥访问B0 将加工后的z存入缓冲区B0; V(mutex); V(full0); //B0中增加一个消息 } } parend

8分

10分

``020450263101501

有一材料保管员,他保管笔和纸若干。有A、B两组学生,A组学生每人都备有纸,B组学生每人备有笔。任一学生只要能得到另一种材料就可以写信。有一个可以放一张纸或一支笔的小盒,当小盒中无物品时,保管员就可任意放一张纸或一支笔共学生取用,每次允许一个学生从中取出自己所需要的材料,当学生从盒子中取走材料后允许保管员再放一件材料,请用信号量和P、V操作,写出他们并发执行时能正确工作的算法程序。 ``020450263101500

解:semaphore empty, fulla, fullb;

empty=1; fulla=fullb=0; 3分 parbegin

process 保管员 {

while (true) {

任取一种物品x; P(empty); //准备往小盒中放物品,若小盒不空则阻塞

47

将x放入小盒中;

if (x是笔) V(fulla);//通知A组学生小盒中放了笔(可能唤醒一个A组学生) else V(fullb); //通知B组学生小盒中放了纸 }

}

process Ai ( i = 1, 2, ... ) //A组学生进程 {

P(fulla); //看看小盒中是否有笔,若无则阻塞 从小盒中取出笔;

V(empty); //通知保管员,小盒已空。若保管员因小盒不空而阻塞,则唤醒之 用笔盒纸写信; }

process Bj ( j = 1, 2, ... ) //A组学生进程 {

P(fullb); //看看小盒中是否有纸,若无则阻塞 从小盒中取出纸;

V(empty); //通知保管员,小盒已空。若保管员因小盒不空而阻塞,则唤醒之 用笔盒纸写信; } parend

6分

8分

10分

``020450274101801

另一个经典同步问题(patil, 1971):三个吸烟者在一个房间内,还有一个香烟供应者。为了制造和抽掉香烟,每个吸烟者需要三样东西:烟草、纸和火柴,供应者有丰富的货物提供。三个吸烟者中,第一个有自己的烟草,第二个有自己的纸,第三个有自己的火柴。供应者随机地将两样东西放在桌子上,允许一个吸烟者进行对健康不利的吸烟。当吸烟者完成吸烟后唤醒供应者,供应者再把两样东西放在桌子上,唤醒一个吸烟者。试采用信号量和P、V操作,编写他们同步工作的算法程序。 ``020450274101800

解:定义4个信号量用于供应者与3个吸烟者的同步:S0为供应者的同步信号量;S1、S2和S3分

别为第一个吸烟者、第二个吸烟者和第三个吸烟者的资源信号量。供应者随机取的两样东西是纸和火柴,则执行V(S1)通知第一个吸烟者;两样东西是烟草和火柴,则执行V(S2)通知第二个吸烟者;两样东西是烟草和纸,则执行V(S3)通知第三个吸烟者。算法描述如下: semaphore S0, S1, S2, S3; S0=S1=S2=S3=0; 2分 parbegin

供应者:begin

L0:

随机地取两样东西x, y放在桌子上; if (x, y是纸和火柴) V(S1); //通知第一个吸烟者 else if (x, y是烟草和火柴) Vl(S2); //通知第二个吸烟者 else V(S3); //通知第三个吸烟者 P(S0) ; //供应者阻塞,等待吸烟者唤醒 goto L0; 4分 end

48

第一个吸烟者:begin

L1: P(S1); //看看供应者是否在桌上放了纸和火柴

从桌上取纸和火柴; 加工香烟; 抽烟; V(S0); // 唤醒供应者 goto L1; end

第二个吸烟者:begin

L2: P(S2); //看看供应者是否在桌上放了烟草和火柴

从桌上取烟草和火柴; 加工香烟; 抽烟; V(S0); // 唤醒供应者 goto L2; end

第三个吸烟者:begin

L3: P(S1); //看看供应者是否在桌上放了烟草和纸

从桌上取烟草和纸; 加工香烟; 抽烟; V(S0); // 唤醒供应者 goto L3; end

parend

6分

8分

10分

``020450283101601

设有三组进程Pi、Qj、Rk,其中Pi、Qj构成一对生产者-消费者,共享一个由M1个缓冲区构成的循环缓冲buf1。Qj、Rk构成另一对生产者-消费者,共享一个由M2个缓冲区构成的循环缓冲buf2。如果Pi每次生产一个零件投入buf1,Qj每次从buf1中取两个零件组装成一个产品后投入buf2,Rk每次从buf2中取出三个产品包装出厂。试采用信号量和P、V操作编写他们同步工作的算法程序。 ``020450283101600

解:对于Pi、Qj ,设置资源信号量empty1、full1用于它们的同步,互斥信号量mutex1用于它们对

下标变量的互斥访问;对于Qj、Rk ,设置资源信号量empty2、full2用于它们的同步,互斥信号量mutex2用于它们对下标变量的互斥访问。同步算法描述如下: semaphore empty1, full1, mutex1, empty2, full2, mutex2; int in1, out1, in2, out2 ;

empty1=M1; empty2=M2; mutex1=mutex2=1; full1=full2=0; in1=out1=in2=out2=0; 3分 parbegin

process Pi (i=1, 2, 3, ... ) {

while(1) {

生产一个产品x;

49

操作系统原理试题库1.0

第一章 操作系统引论 ...................................................................................... 1 第二章 进程管理 ............................................................................................ 10 第三章 处理机调度与死锁 ............................................................................ 74 第四章 存储器管理 ...................................................................................... 109 第五章 设备管理 .......................................................................................... 135 第六章 文件管理 .......................................................................................... 147 第七章 操作系统接口 .................................................................................. 172

【注】试题标识(流水号)中的节号仅供参考,可依照汤小丹等编著的《计算机操作系统》(第三版)

作调整。

第一章 操作系统引论

``010110011020101

计算机操作系统的功能是 。

A.把源程序代码转换为目标代码 B.实现计算机用户之间的相互交流 C.完成计算机硬件与软件之间的转换

D.控制、管理计算机系统的资源和程序的执行 ``010110011020100 D

``010110021020101

操作系统是一组 。

A.文件管理程序 ``010110021020100

C

``010110032020101

在操作系统中,用户界面指的是 。

A.硬件接口、软件接口和操作环境 C.硬件接口、命令接口和操作环境 ``010110032020100 B

``010110042020101

以下描述与操作系统无关的是 。 A.方便用户的程序集合

B.控制和管理计算机系统的硬件和软件资源 C.计算机系统的硬件和软件资源的集合 D.合理地组织计算机工作流程 ``010110042020100 C

``010110051020101

以下关于操作系统作用的叙述中,不正确的是 。

A.管理系统资源 C.改善人机界面 ``010110051020100 D

1

B.中断处理程序 C.资源管理程序 D.设备管理程序

B.命令接口、程序接口和操作环境 D.硬件接口、命令接口和程序接口

B.控制程序执行

D.提高用户软件运行速度

``010110061020101

从用户的观点看,操作系统是 。

A.用户与计算机之间的接口 B.控制和管理计算机资源的软件 C.合理地组织计算机工作流程的软件

D.由若干层次的程序按一定的结构组成的有机体 ``010110061020100 A

``010110072020101

下面各项中, 不是引入操作系统的最主要目的。

A.方便用户使用

B.更有效地利用软、硬件资源 D.改善系统性能

C.及时响应用户请求

``010110072020100 C

``010110082020101

操作系统在计算机系统中处于 之间的位置。

A.计算机硬件和软件 C.处理机和用户

``010110082020100 C

``010110092020101

操作系统提供给用户程序的接口是 。

A.命令解释程序

B.系统调用

C.P、V操作

D.对话框

``010110092020100 B

``010110102020101

操作系统的最主要设计目标是___________。

A.方便性和有效性

B.方便性和可扩展性 D.有效性和开放性

C.有效性和可扩展性

B.计算机硬件和用户 D.外部设备和处理机

``010110102020100 A

``010110112020101

配置了操作系统的计算机是一台比原来的物理计算机功能更强大的计算机,这样的计算机只是一台逻辑上的计算机.称为 计算机。

A.虚拟 ``010110112020100 A

2

B.物理 C.并行 D.共享

``010110122020101

操作系统是对 进行管理的软件。

A.系统软件

B.系统硬件

C.计算机资源

D.计算机程序

``010110122020100 C

``010110131020101

从用户的观点看,操作系统是 。

A.用户与计算机之间的接口 C.合理组织计算机工作流程

``010110131020100 A

``010110143020101

操作系统为用户程序完成与 的工作。

A.硬件无关和应用无关 C.硬件无关和应用相关

B.硬件相关和应用无关 D.硬件相关和应用相关 B.控制和管理计算机系统的资源 D.一个大型的工具软件

``010110143020100 B

``010110153020401

有甲、乙两道算题,每道需执行1小时(其中处理器的工作时间为12分钟)。若它们在多道系统中执行,甲、乙两道题总共需执行80分钟,则处理器的利用率为 。

A.50% B.40% C.30% D.20% ``010110153020400 C

``010210013020101

_________不是分时系统的特点。

A.多个用户是经过网络连接,同时使用计算机系统 B.各用户可同时请求系统服务

C.各用户的请求彼此独立,互不干扰 D.用户以会话方式控制自己的程序运行 ``010210013020100 A

``010210022020101

在 的控制下,计算机系统能及时处理由过程控制反馈的数据,并作出响应。

A.批处理操作系统 C.分时操作系统 ``010210022020100 B

B.实时操作系统 D.多处理机操作系统

3

``010210032020101

分时操作系统的主要目的是 。

A.计算机系统的交互性 C.计算机系统的可靠性 ``010210032020100

``010210042020101

多道批处理系统的主要缺点是 。

A.CPU利用率低 ``010210042020100

``010210052020101

分时操作系统的特点是 。

A.交互性、同时性(多路性)、独立性、及时性 B.可靠性、交互性、独立性、及时性 C.可靠性、交互性、独立性、及时性

D.交互性、同时性(多路性)、独立性、动态性 ``010210052020100

``010210062020101

操作系统允许在一台主机上同时连接多台终端,多个用户可以通过各自的终端同时交互

地使用计算机。 A.网络 ``010210062020100

``010210071020101

在下列操作系统中,对响应时间要求最高的是 。

A.批处理系统 ``010210071020100

``010210082020101

如果分时系统的时间片一定,那么 ,则响应时间越长。

A.内存越大 ``010210082020100

4

B.计算机系统的实时性 D.提高软件的运行速度

A

B.不能并发执行 C.缺少交互性 D.以上都不是

C

A

B.分布式 C.分时 D.实时

C

B.分时系统 C.实时系统 D.网络操作系统

C

B.内存越少 C.用户数越少 D.用户数越多

D

V(SM); }

//通知M,缓冲区B中已有记录 6分

}

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 } }

parend

8分

10分

``020450214101601

进程A1,A2,...,An1通过m个缓冲区向进程B1,B2,...,Bn2不断地发送消息。发送和接收工作遵循如下规则:

① 每个发送进程一次发送一个消息,写入一个缓冲区,缓冲区大小与消息长度一样; ② 对每个消息,B1,B2,...,Bn2都需各接收一次,读入到各自的数据区内; ③ m个缓冲区都满时,发送进程等待,没有可读的消息时,接收进程等待。 试用P、V操作组织正确的发送和接收操作。

提示:这是P-C问题变形。把这一组缓冲区看成n2组缓冲区。 ``020450214101600 解:设置一个信号量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; }

40

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

while (1) { ......

for (int i=0;i

将消息放入缓冲区; V(mutex);

for (i=0;i

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

``020450223101501

一组生产者进程和一组消费者进程共享9个缓冲区,每个缓冲区可以存放一个整数。生产者进程每次一次性向3个缓冲区写入整数,消费者进程每次从缓冲区取出一个整数。请用信号量和P、V操作写出并发进程能正确执行的算法程序。 ``020450223101500

41

解:semaphore empty=9; //生产者的资源信号量,表示空缓冲区个数

seamphore full=0; //消费者的资源信号量,表示满缓冲区个数 seamphore mutex=1; //互斥信号量,用于互斥访问缓冲区(或共享变量i或j) int i=0; //生产者使用是缓冲区下标 int j=0; //消费者使用是缓冲区下标 4分 parbegin

process producerm (m=1, 2, 3, ?) begin

int a,b,c; //该生产者使用的局部变量 repeat

生产者获得3个整数a, b, c ;

P(empty); P(empty); P(empty); //得到3个空缓冲区 P(mutex); //生产者互斥访问共享变量i buffer[i]=a; //整数a存入缓冲区 i=(i+1) mod 9; buffer[i]=b; //整数b存入缓冲区 i=(i+1) mod 9; buffer[i]=c; //整数c存入缓冲区 i=(i+1) mod 9; V(mutex);

V(full); V(full); V(full); 7分 until false end

process consumer k (k=1, 2, 3, ?) begin int x; repeat

P(full); //看看缓冲区是否有整数 P(mutex); //消费者互斥访问共享变量j x=buffer[j]; //从缓冲区取整数到x中 j=(j+1) mod 9 V(mutex); V(empty); //空缓冲区数增1 consume x; 10分 until false end parend

``020450234101801 有n个输入进程、m个计算进程和p个输出进程,通过循环缓冲区A和循环缓冲区B进行数据传送,如下图所示。 输入进程1 输入进程2 计算进程1 计算进程2 输出进程1 输出进程2 ? 输入进程n 缓冲区A ? 计算进程m 42 ? 缓冲区B 输出进程p

已知缓冲区A有N个缓冲块,缓冲区B有M个缓冲块。输入进程每次输入1个数据块存入缓冲区A的1个缓冲块中;计算进程每次从缓冲区A取出1个数据块,处理后的数据块存入缓冲区B的1个缓冲块中;输出进程每次从缓冲区B中取出1个数据块进行输出操作。试用P、V操作实现进程间的同步与互斥。

``020450234101800

解:semaphore mutex1, mutex2, empty1, full1, empty2, full2;

int in1, out1, in2, out2; mutex1=1; //互斥信号量,用于互斥访问共享变量in1和out1 mutex2=1; //互斥信号量,用于互斥访问共享变量in2和out2 empty1=N; //同步信号量,表示缓冲区A的空缓冲区个数 empty2=M; //同步信号量,表示缓冲区B的空缓冲区个数 full1=0; //同步信号量,表示缓冲区A的满缓冲区个数 full2=0; //同步信号量,表示缓冲区B的满缓冲区个数 in1=out1=in2=out2=0; //共享变量,表示缓冲区的下标变量 parbegin

process inputi ( ) //n个输入进程,i=1, 2, ... , n {

while (1) {

读入一个数据块X; P(empty1); //判断缓冲区A是否有空闲位置放数据块,若无则等待 P(mutex1); //互斥访问共享变量in1和缓冲区A bufferA[in1]=X; in1=(in1+1)%M; V(mutex1); V(full1); } }

process computej ( ) //m个计算进程,j=1, 2, ... , m {

while (1) {

P(full1); //判断缓冲区A中是否有可取的数据块,若无则等待 P(mutex1); //互斥访问out1和缓冲区A Y=bufferA[out1]; out1=(out1+1)%M; V(mutex1); V(empty1); //通知输入进程,缓冲区A中已被取走一个数据块 处理数据块Y; P(empty2); //判断缓冲区B是否有空位置存放数据块,若无则等待 P(mutex2); //互斥访问共享变量in2和缓冲区B bufferB[in2]=处理后的数据块Y; in2=(in2+1)%N; V(mutex2); V(full2); 43

3分 5分 8分

}

}

process outputk ( ) //p个输出进程,k=1, 2, ... , p {

while (1) {

P(full2); //判断缓冲区B中是否有可取的数据块,若无则等 P(mutex2); //互斥访问共享变量out2和缓冲区B Z=bufferB[out2]; out2=(out2+1)%N; V(mutex2); V(empty2); } } parend

10分

``020450244101701

设自行车生产线上有一只箱子,其中有N个位置(N≥3),每个位置可存放一个车架或一个车轮;又设有三个工人,其活动分别为:

工人1活动 工人2活动 工人3活动 ↓ ↓ ↓

加工一个车架 加工一个车轮 箱中取一个车架 ↓ ↓ ↓

车架放入箱中 车轮放入箱中 箱中取两个车轮 ↓ 组装为一台车 试用PV操作实现三个工人的合作。

【提示】工人1和工人2向箱子中放车架或车轮的活动,除了受到箱子容量的限制外,还应考虑车

架和车轮的数量差,即不允许只放车架或只放车轮,因为那样可能会引起死锁。显然,工人1放车架时最好应留出2个放车轮的空位;同样,工人2放车轮时至少应留出1个空位放车架。因此,若count1和count2分别代表车架数和车轮数,则不妨规定-(N-1)≤count1-count2≤N-2 ``020450244101700

解:semaphore mutex, avail, availa, availb, fulla, fullb;

mutex=1; //互斥信号量,用于访问共享变量count1和count2 avail=N; //同步信号量,用于表示箱子中空闲位置数 availa=N-2; //同步信号量,用于表示箱子中可放车架的数量 availb=N-1; //同步信号量,用于表示箱子中可放车轮的数量 fulla=0; //同步信号量,用于表示箱子中已放的车架数量 fullb=0; //同步信号量,用于表示箱子中已放的车轮数量 3分 parbegin

process worker1( ) {

while (1) {

加工一个车架; P(availa); //看看箱子中是否还允许放车架

44

``020450104101500

semaphore empty, ful1a, fullb, fullc; empty=1; //开始时容器是空的,可以放一种原料 fulla=0; //开始时容器中无桔子精,用于阻塞P1 fullb=0; //开始时容器中无糖,用于阻塞P2 fullc=0; //开始时容器中无水,用于阻塞P3 2分 parbegin

process 供应商 {

while (true) {

随机地取一种原料x; P(empty); //看看容器是否空,不空则等待 将x放入容器中;

if (x是桔子精) V(fulla); //通知(或唤醒)P1 else if (x是糖) V(fullb); //通知(或唤醒)P2 else V(fullc); //通知(或唤醒)P3 4分 } }

process P1 {

while (true) {

P(fulla); //看看容器中是否有桔子精,若无则阻塞 从容器中取出桔子精;

V(empty); //通知供应商,容器空了。若供应商因容器不空而阻塞,则唤醒之 用三种原料配制成桔子水,装瓶出售; 6分 } }

process P2 {

while (true) {

P(fullb); //看看容器中是否有糖,若无则阻塞 从容器中取出糖;

V(empty); //通知供应商,容器空了。若供应商因容器不空而阻塞,则唤醒之 用三种原料配制成桔子水,装瓶出售; 8分 } }

process P3 {

while (true) {

P(fullc); //看看容器中是否有水,若无则阻塞 从容器中取出糖;

V(empty); //通知供应商,容器空了。若供应商因容器不空而阻塞,则唤醒之 用三种原料配制成桔子水,装瓶出售; 10分 }

30

} parend

``020450114101501

某工厂有两个生产车间和一个装配车间,两个生产车间分别生产A、B两种零件,装配车间的任务是把A、B两种零件装配成产品。两个生产车间每生产一个零件后都要分别把它们送到装配车间的货架F1、F2上,F1存放零件A,F2存放零件B,F1与F2的容量均为可以存放10个零件。装配工人每次从货架上取一个A零件和一个B零件,然后组装成产品。请用信号量和P、V操作进行正确的管理。

``020450114101500

semaphore mutex, empty1, empty2, full1, full2; mutex=1; //互斥信号量,用于互斥使用货架

empty1=10; //同步信号量,表示货架F1可容纳的零件数 empty2=10; //同步信号量,表示货架F2可容纳的零件数 full1=0; //同步信号量,表示货架F1已放的零件数 full2=0; //同步信号量,表示货架F1已放的零件数 parbegin

process workerAi ( ) //第一个生产车间的工人进程,i=1, 2, ... , n {

while (1) {

生产一个零件A; P(empty1); //测试货架F1是否可放零件A P(mutex);

将一个零件A放到货架F1上; V(mutex); V(full1); } }

process workerBj ( ) //第二个生产车间的工人进程,j=1, 2, ... , m {

while (1) {

生产一个零件B; P(empty2); //测试货架F2是否可放零件B P(mutex);

将一个零件B放到货架F2上 V(mutex); V(full2); } }

process workerCi ( ) //装配车间的工人进程,i=1, 2, ... , k {

while (1) {

P(full1); //测试货架F1是否可放零件A P(mutex);

31

4分 6分 8分

从货架F1上取一个零件A V(mutex); V(empty); P(full2); P(mutex);

从货架F2上取一个零件B V(mutex); V(empty);

用零件A、B组装成一个产品; }

} parend

10分

``020450123101201

有三个并发进程A、B和C,共享一个缓冲器F。F中每次只能存放一个数。进程A每次产生一个随机数R,将其存入F中。若存放到F中的数是5的倍数,则由进程B将其取出并打印,否则由进程C将被5除后的余数打印出来。为防止数的丢失和重复取同一个数,请用信号量和P、V操作进行正确的管理。 ``020450123101200 begin

S1,S2,S3:semaphore; F : integer;

S1:=1; S2:=0; S3:=0; 4分 cobegin process A begin

L1: 产生随机数R; P(S1) ; F:= R;

if R mod 5=0 then V(S2);

else V(S3); 6分 goto L1; end;

process B begin

L2: P(S2); x := F; V(S1); print x; 8分 goto L2; end;

process C begin

32

L3: P(S3); y := F; V(S1) ;

y := y mod 5; print y; goto L3; end; coend; end;

10分

``020450133101201

今有一个文件F供进程共享,现把这些进程分成A、B两组,规定同组的进程可以同时读文件F;但当有A组(或B组)的进程在读文件F时就不允许B组(或A组)的进程读文件F。试用P、V操作来进行管理。 ``020450133101200

begin

S1,S2,SAB:semaphore; C1,C2:integer;

S1 := 1;S2 := 1;SAB := 1;C1 := 0;C2 := 0; 4分 parbegin

Process Ai (i = 1,2,3,...) begin

P(S1);

C1 := C1 + 1 ;

if C1 = 1 then P(SAB); V(S1); Read file F ; P(S1);

C1 := C1 – 1 ;

if C1 = 0 then V(SAB) ; V(S1); 7分 end;

Process Bi (i = 1,2,3,...) begin

P(S2);

C2 := C2 + 1 ;

if C2 = 1 then P(SAB); V(S2); Read file F ; P(S2);

C2 := C2 – 1 ;

if C2 = 0 then V(SAB) ; V(S2); 10分 end;

33

parend; end;

``020450144101501

有P1、P2、P3三个进程共享一个表格F,P1对F只读不写,P2对F只写不读,P3对F先读后写。进程可同时读F,但有进程写时,其他进程不能读和写。请用信号量和P、V操作,编写三个进程能正确工作的算法程序。 ``020450144101500

semaphore Rmutex, mutex;

Rmutex=mutex=1; //前者用于互斥访问共享变量Rcount,后者用于写互斥 int Rcount=0; //读者计数变量 parbegin process P1 {

P(Rmutex); //互斥访问共享变量Rcount Rcount=Rcount+1; //读者数增1

if (Rcount==1) P(mutex); //第一个读者应与写者互斥 V(Rmutex); read F; P(Rmutex);

Rcount=Rcount-1; //读者离开,读者数减1

if (Rcount==0) V(mutex); //最后一个写者离开时应允许写者写 V(Rmutex); }

process P2 {

P(mutex); write F;

V(mutex); }

process P3 {

P(Rmutex); //前半部分与P1相同 Rcount=Rcount+1;

if (Rcount==1) P(mutex); V(Rmutex); read F; P(Rmutex);

Rcount=Rcount-1;

if (Rcount==0) V(mutex); V(Rmutex); P(mutex); //后半部分与P2相同 write F;

V(mutex); 34

4分 6分 8分 分

10

} parend

``020450153101501

假定一个阅览室可供50个人同时阅读。读者进入和离开阅览室时都必须在阅览室入口处的一个登记表上登记,阅览室有50个座位,规定每次只允许一个人登记或注销登记。 要求:(1)用PV操作描述读者进程的同步算法(登记、注销可用自然语言描述);

(2)指出算法中所用信号量的名称、作用及初值。 ``020450153101500 解:(1)用PV操作描述读者进程的同步算法如下:

semaphore mutex=1, seat=50; 2分 parbigin

process readeri (i=1, 2, 3, ?) begin

读者来到阅览室; P(seat); //看看阅览室是否有空位置 4分 P(mutex); //登记需互斥 在登记表上登记; V(mutex); 6分 在阅览室阅览资料; P(mutex);

在登记表上注销; V(mutex);

V(seat); //阅览室空座位数增1,必要时唤醒等待进入阅览室的读者 8分 该读者离开; end parend

(2)互斥信号量mutex,其初值为1,用于互斥使用登记表;资源信号量seat,其初值为50,

用于表示阅览室空座位的数量。 10分

``020450162101501

在一个盒子里,混装了数量相等的黑白围棋子。现在用自动分拣系统把黑子、白子分开,设分拣系统有两个进程P1和P2,其中P1拣白子,P2拣黑子。规定每个进程每次拣一子;当进程在拣时,不允许另一个进程取拣;当一个进程拣了一子时,必须让另一进程去捡。假设从拣白子开始。试写出量进程能正确并发执行的算法程序。 ``020450162101500

semaphore mutex, S1, S2; mutex=1; //互斥信号量

S1=1; //P1的同步信号量,用于与P2同步,从P1拣第一个白子开始 S2=0; // P2的同步信号量,用于与P1同步 4分 parbegin Process P1 {

while (1) {

35

P(S1);

P(mutex); //拣子必须互斥 拣一白子; V(mutex); V(S2); //通知P2可以拣一黑子了 }

7分

}

Process P2 {

while (1) { P(S2); //看看P1是否已捡完一个白子 P(mutex); //拣子必须互斥 拣一黑子; V(mutex); V(S1); //通知P1可以拣一白子了 } } parend

10分

``020450175101501

仅有k个进程,它们的标号依次为1,2,?,k,允许它们同时读文件file,但必须满足条件:参加同时读文件的进程的标号之和需小于或等于k,请使用:(1) 信号量与P、V操作,编写协调多进程读文件的算法程序。 ``020450175101500

semaphore mutex=1; //互斥信号量,用于互斥访问共享变量sum semaphore S=0; //用于阻塞不能读文件的进程 int sum=0; //用于记录和的值,若和大于k,则在S上阻塞 int count=0; //用于记录在S上阻塞的进程数 4分 Parbegin

process Pi (i=1,2,3, ..., k) {

L1: P(mutex);

if (i+sum>k) {

count ++; //阻塞进程数增1 V(mutex); //允许其它进程读 P(S); //本进程阻塞 goto L1; //进程被唤醒后从L1重新开始执行 } else {

sum=sum+i; V(mutex); }

36

Read File; P(mutex); sum=sum-i; while (count>0) {

V(S); count --; }

V(mutex); }

Parend

//唤醒所有在S上阻塞的进程

//也可只唤醒一个阻塞进程,但并发度降低

10分

``020450182101401 有三个进程PA、PB和PC协作解决文件打印问题:PA将文件记录从磁盘读入主存的缓冲区buffer1,每执行一次读一个记录;PB将缓冲区1的记录复制到缓冲区buffer2,每执行一次复制一个记录;PC将缓冲区buffer2的内容打印出来,每执行一次打印一个记录。缓冲区的大小和一个记录大小一样。试用P、V操作来保证文件的正确打印。 ``020450182101400 解:BEGIN

semaphore mutex1,mutex2,avail1,avail2,full1,full2; mutex1 := 1;mutex2 := 1; avail1 := 1;avail2 := 1; full1 := 0;full2 := 0; 4分 PARBEGIN PA:BEGIN

L1:read from disk;

P(avail1); P(mutex1); put to buffer 1; V(full1); V(mutex1); goto L1; 6分 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);

37

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

8分

10分

``020450193101501

由三个进程get,copy和put以及两个缓冲区buffer1和buffer2完成一项输入/输出操作。进程get的功能是把一张卡片上的信息从读卡机上读进buffer1;进程copy的功能是把buffer1中的信息复制到buffer2;进程put的功能是取出buffer2中的信息并从打印机上打印输出。试用P、V操作完成这三个进程间的尽可能并发正确执行的关系(用程序或框图表示),并指明信号量的作用和初值。

``020450193101500

解:可设置6个信号量mutex1,mutex2,empty1,empty2,full1,full2。其中:

mutex1和mutex2是互斥信号量,初值为1,分别用于对buffer1和buffer2的互斥访问; empty1和empty2为同步信号量,初值为1,分别表示buffer1和buffer2是否空闲,1表示空闲,0表示不空闲;

full1和full2为同步信号量,初值为0,分别表示buffer1和buffer2中是否有可取用的信息,1表示有可取用的信息,0表示无可取用的信息。 2分 semaphore mutex1, mutex2, empty1, empty2, full1, full2 ; mutex1=mutex2=1; //互斥信号量 empty1=empty2=1; //生产者进程的同步信号量 full1=full2=0; //消费者进程的同步信号量 5分 parbegin

process get( ) //读进程(生产者进程) {

while (1) {

从读卡机读入一张卡片的信息; P(empty1) //看看buffer1是否空闲 P(mutex1); //互斥访问buffer1 将信息放入buffer1; V(mutex1); V(full1); 7分 } }

38

process copy( ) //复制进程(既是消费者又是生产者进程) {

while (1) {

P(full1) //看看buffer1是否有信息可取 P(mutex1); //互斥访问buffer1 从buffer1中复制出信息; V(mutex1);

V(emtpy1); //通知get,buffer1中的信息已取走(可能唤醒get) P(empty2); //看看buffer2是否空闲 P(mutex2); //互斥访问buffer2 将复制的信息放入buffer2; V(mutex2); V(full2); //通知put,buffer2中已有信息 } }

process put( ) //输出进程(消费者进程) {

while (1) { P(full2); //测试buffer2中是否有信息 P(mutex2); //互斥访问buffer2 从buffer2中取出信息; V(mutex2);

V(empty2); //通知copy,buffer2中的信息已取走 } } parend

9分

10分

``020450202101401

今有3个并发进程R、M、P,它们共享一个缓冲器B。进程R负责从输入设备读入信息,每读一个记录后把它存放在缓冲器B中。进程M在缓冲器B中加工进程R存入的记录。进程P把加工后的记录打印出来。缓冲器B中每次只能存放一个记录,当记录被加工输出后,缓冲器B中又可以存放一个新的记录。为协调它们的工作,采用PV操作进行管理。 ``020450202101400

解:semaphore SR,SM,SP;

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

while (1) {

从输入设备读入信息X; P(SR); //看看缓冲区B是否是空的 B=X; //信息存入缓冲区B

39

百度搜索“yundocx”或“云文档网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,云文档网,提供经典综合文库操作系统原理试题库2015在线全文阅读。

操作系统原理试题库2015.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.yundocx.com/wenku/181861.html(转载请注明文章来源)
Copyright © 2018-2022 云文档网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:370150219 邮箱:370150219@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:7 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219