操作系统 总复习题(4)

2019-08-31 18:15

void f2() {

y=6; ③

} main() { }

4、何谓临界区?下面给出的实现两个进程互斥的算法安全吗?为什么? #define TRUE 1 #define FALSE 0 int flag[2];

flag[0]=flag[1]=FALSE; enter-crtsec(int i) { }

leave-crtsec(int i); { }

flag[i]=FALSE; while(flag[1-i]; flag[i]=TRUE;

cobegin{f1();f2();} x=x+1; ④

15

process 0 {

.....

enter-crtsec(0); IN CRITICAL SECTION

leave-crtsec(0); ..... }

process 1 {

.....

enter-crtsec(1); IN CRITICAL SECTION

leave-crtsec(1); ..... }

5、某车站售票厅,任何时刻最多可容纳10名购票者进入,当售票厅中少于10名购票者时,则厅外的购票者可立即进入,否则需在外面等待。若把一个购票者看作一个进程,请回答下列问题:

(1)若用信号量机制来管理这些并发进程时,写出信号量的初值以及信号量各种取值的含义。

(2)根据所定义的信号量,把应执行的wait和signal操作填入下面程序Pi中,以保证进程能够正确地并发执行。

parbegin P1 ∶ Pi ∶ P10 parend

16

procedure Pi (i = 1,2, ? ,10) begin 进入售票厅; 购票; 退出; end

(3)若欲购票者最多为n个人,写出信号量可能的变化范围(最大值和最小值)。

6、在解决“生产者—消费者”问题时,设信号量mutex用于生产者与消费者的互斥,初值为1;设 empty是生产者的信号量,表示缓冲区中空单元数,初值为n;设 full是消费者的信号量,表示缓冲区中非空单元数,初值为0。

(1)用下列算法在解决“生产者—消费者”同步问题时会产生死锁吗?

parbegin producer ; consumer ; parend

procedure producer begin

procedure consumer

begin repeat 生产数据; wait(mutex) ; wait(empty);

wait(mutex);

wait(full);

repeat

送数据到空缓冲区中; signal(full); signal(mutex);

取缓冲区某单元数据;

signal(empty); signal(mutex);

消费数据;

forever

forever end

end

(2)若有可能,则说明在什么情况下会产生死锁?

17

7、有一个售票厅只能容纳200人,当少于200人时,可以进入;否则需要在外等候。若将每一个购票者作为一个进程Pi,请用wait和signal操作描述购票者的行为。 Pi { }

8、有一个阅览室,共有100个座位,读者进入后必须先在一张登记表上登记,登记表要求互斥使用,读者离开时要删掉登记的信息。试问: (1) 为描述读者的动作,应设置几个信号量,初值为多少? (2) 用wait()和signal()操作描述并发读者进程之间的关系。

读者() {

while(1) {

填写登记表;

进入阅览室; 读书;

退出浏览室;

删除登记表; } }

9、某由西向东的单行车道有一卡脖子的路段AB,为保证行车的安全需设计一个自动管理系统,管理原则如下:

当AB段之间无车行驶时,可让到达A点的一辆车进入AB段行驶;当AB段有车行驶时,让到达A点的车等待;当在AB段行驶的车驶出B点后,可让等待在A点的一辆车进入AB段。 请回答下列问题:

(1)把每一辆需经过AB段的车辆看作是一个进程,则这些进程在AB段执行时,它们之间的关系应是同步还是互斥?

(2)用信号量操作管理AB段时,应怎样定义信号量,给出信号量的初值以及用信号量对

18

进入购票厅; 买票; 退出;

车辆行为的描述。

10、假设有三个进程:P1、P2、P3以及两个缓冲区Buf1和Buf2。每个缓冲区每次都只能存放一个数据。

进程P1不断生产数据并填入第一个缓冲区Buf1(每次生产一个数据);

进程P2不断从第一个缓冲区Buf1中取出一个数据,然后填入第二个缓冲区Buf2中; 进程P3不断地从第二个缓冲区Buf2中取出数据并消费掉(每次取出一个)。 如图所示。三个进程并发执行时,需要采取同步措施: P1等到Buf1为空的时候才可以填入数据,否则就需要等待;

P2需要等Buf1中有数据以后才可以将数据取出,并且P2需要等Buf2为空的时候再将数据填入Buf2中。而P3需要等Buf2有数据的时候将数据取出。

由于每个缓冲区每次都只能存取一个数据,所以三个进程之间不需要考虑互斥。现采用信号量机制来保证三个程序的同步。信号量的定义如下,请将这些信号量的wait、signal操作填入下面程序中适当的位置。

定义信号量并给出初值: P1() { While (TRUE) { 生产1个数据; 将数据填入Buf1中; } } }

19

P1 P2 P3 Buf1 Buf2 P2() { While(TRUE) { 从Buf1中取一个数据; 将数据填入Buf2中; } P3() { While (TRUE) { 从Buf2中取1个数据; 消费掉该数据; }


操作系统 总复习题(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:00147 - 人力资源管理(一)自学考试

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: