操作系统典型题目讲解 下载本文

3、一组生产者进程和一组消费者进程共享10个缓冲区,每个缓冲区可以存放一个整数;生产者进程每次一次性向3个缓冲区写入3个整数,消费者进程每次从缓冲区取出一个整数。用信号量实现进程的同步关系。 4、写者优先的读者写者问题:

wmutex:semaphore=1 //读者与写者之间、写者与写者之间互斥使用共享数据

S:semaphore=1 //当至少有一个写者准备访问共享数据时,它可使后续的读者等待

写完成

S2:semaphor=1 //阻塞第二个以后的等待读者

readcount,writecount: semaphore = 0,0; //当前读者数量、写者数量 mutex1 :semaphore = 1 //多个读者互斥使用readcount mutex2 :semaphore = 1 //多个写者互斥使用writecount Cobegin:

Reader: begin Repeat Wait(S2); wait(S);

wait(mutex1)

if readcount=0 then wait(wmutex); readcount++; signal (mutex1); signal(S); signal(S2); reading… wait(mutex1); readcount--;

if readcount=0 then signal(wmutex); signal(mutex1); until false; begin; writer: begin repeat;

wait(mutex2);

if writecount=0 then wait(S); writecount++;

signal (mutex2); wait(wmutex); writing…

signal(wmutex); wait(mutex2); writecount--;

if writecount=0 then signal(S);

signal (mutex2); until false; end;

13

coend;

5、有座可双向通行的单车道桥,最大载重负荷为4辆汽车。请给出任一辆车通过该桥的管理算法。

6、设公共汽车上,司机和售票员的活动分别是:

司机的活动:启动车辆; 正常行车; 到站停车; 售票员的活动:

关车门; 售票; 开车门;

在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?用P、V操作实现它们的同步。

设两个信号量S和C,初值为S=0;C=0;

司机: L1: 正常行车 售票员: L2: 售票

到站停车 P(S) V(S) 开车门 P(C) 关车门 启动开车 V(C) GO TO L1 GO TO L2

7、桌子上有一个空盘子,允许存放一只水果,爸爸可以向盘中放苹果,妈妈向盘子中放橘子,女儿专门吃盘子中的苹果,儿子专门吃盘子中的橘子。规定当盘子空的时候一次只能放一只水果,请用信号量实现他们之间的同步与互斥。 S, S1, S2 :semaphore=1,0,0; Cobegin:

Process Father:

Begin:

L1: P(S);

Put Apple; V(S1); GO TO L1; End; Process Mother:

Begin:

L2: P(S);

Put Orange; V(S2); GO TO L2; End; Process Son:

Begin:

14

L3: P(S2);

Get Orange; V(S);

GO TO L1; End;

Process Daughter:

Begin:

L4: P(S1); Get Apple; V(S);

GO TO L4; End; CoEnd;

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

(1) 每个发送进程一次发送一个消息,写入一个缓冲区,缓冲区大小等于消息长度; (2) 对每一个消息,B1,B2,…,Bn都必须接收一次,读入各自的数据区内; (3)m个缓冲区都满时,发送进程等待;没有可读的消息时,接收进程等待。

解答:本题是生产者——消费者问题的一个变形,一组生产者A1,A2,…….An1和一组消费者B1,B2,……Bn2公用m个缓冲区,每个缓冲区只要写一次,但需要读n2次,因此,我们可以把这一组缓冲区看成n2组缓冲区,每个发送者需要同时写n2组缓冲区,而每一个接收者只需读它自己对应的那组缓冲区中的对应单元。 Mutex,empty[n2],full[n2]:semaphore; Mutex=1; //多进程互斥使用缓冲区

empty[0,1,……n2]={m,m,……m}; full[0,1,…..n2]={0,0,……0}; int I; Cobegin:

Process Ai Begin: Loop:

Int I;

For ( I=0; I

将消息放入缓冲区; v(Mutex);

for( I=0; I

Process Bi Begin:

15

Loop:

P (full[I]); P(Mutex);

从消息缓冲区取出消息; v(Mutex); v(empty[I]); Goto Loop; End;

CoEnd;

9、进程A、B、C坐在圆桌旁讨论问题(面朝圆桌),每个人都从其右边那个人的信箱里取得讨论的问题,回答完一个问题后提出一个新问题放在左边的信箱中。假设A右边的信箱可放3个问题,B右边的信箱可以放2个问题,C右边的信箱可以放3个问题,初始时A右边的信箱中有2个问题。用信号量写出三个人讨论问题的同步算法。

A信箱A信箱BC信箱CB

10、战地指挥官通过无线电不断向他的三个士兵下达作战指令,但是他必须在得到所有士兵对前一条指令的“确认”之后才能下达新的指令。请用信号量或管程进行指挥官和士兵之间的协同管理。

11、有三个并发进程R,M,P,它们共享了一个可循环使用的缓冲区B,该缓冲区共有N个单元。进程R负责从输入设备读信息,每读一个字符后,把它存入缓冲区B的一个单元中;进程M负责处理读入的字符,若发现读入的字符中有空格符是,则把它改成“,”;进程P负责吧处理后的字符取出并打印输出。当缓冲区单元中的字符被进程P取出后,则又可用来存放下一次读入的字符。用P,V操作写出能正确并发执行的程序。

12、有4个进程A,B,C,D共享一个缓冲区,进程A负责循环地从文件读一个整数放入缓冲区,进程B从缓冲区取出MOD 3为0的整数并累计求和;进程C从缓冲区取出MOD 3为1的整数并累计求和;进程D从缓冲区取出MOD 3为2的整数并累计求和.请用PV操作写出能够正确执行的程序。

2.5 进程通信

1、在UNIX中,()用于吧一个进程的输出连接到另一个进程的输入(普通文件;索引文件;目录文件;管道文件) 2、关于进程通信的说法,判断:

(1)进程通信有两种方式,直接通信和间接通信。 (2)直接通信固定在一对进程之间。

16