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

内容发布更新时间 : 2024/4/27 2:56:16星期一 下面是文章的全部内容请认真阅读。

P2: { }

}

X=1;y=0;

If x>=1 then y=y+1; Z=y;

x=0;t=0;

If x<=1 then t=t+2; U=t;

8、双进程临界区问题的算法,其中布尔型数组blicked[2]初始值为{false,false},整型turn初始值为0,id代表进程编号(0,1),请说明正确否?(违反忙则等待原则) Do{

blocked[id]=true; While(turn!=id) { }

编号为id的进程的临界区 Blocked[id]=false;

编号为id的进程的非临界区 }while(true);

9、在具有N个进程的系统中,允许M个进程(N≥M≥1)同时进入它们的临界区,其信号量S的值的变化范围是(),处于等待状态的进程数最多是()个。 10、判断以下解决双进程临界区问题的算法是否正确: Process Pi(i=0,1):

Do{

Flag[i]=true; While(flag[1-i]);

critical section flag[i]=false;

While(blocked[1-id]); Turn=id;

remainder section

}while(1);

11

11、用V操作唤醒一个等待进程时,被唤醒进程的状态变为()。(选项:运行;等待;就绪;完成)

12、若有3个进程共享一个互斥段,每次最多允许两个进程进入互斥段,则信号量的变化范围是()。 13、关于进程同步与互斥的说法,判断:

(1)进程的同步与互斥都涉及到并发进程访问共享资源的问题。 (2)进程的同步是进程互斥的一种特殊情况。

(3)进程的互斥是进程同步的特例,互斥进程是竞争共享资源的使用,而同步进程之间必然存在依赖关系。

(4)进程互斥和进程同步有时候也称为进程同步。 14、判断:临界区是不可中断的程序。

15、判断:如果在加锁法实现互斥时,将未进入临界区的进程排队等待,从而让其有被再调度 的机会,加锁法和P、V原语实现互斥时其效果是相同的。

16、由于并发进程执行的随机性,一个进程对另一个进程的影响是不可预测的,甚至造成结果的不正确,下面对造成不正确的因素的描述正确的是:()(选项:与时间有关;与进程占用的处理机有关;只与执行速度有关;只与外界的影响有关)

17、有两个优先级相同的进程A、B如下,令信号量S1和S2的初值均为0,已知Z=3,则A、B并发运行结束后X、Y、Z的值分别是:

A Y=2; Y=Y+3; V(S1); Z=Y+0; P(S2); Z=Y+Z; B X=2; X=X+3; P(S1); X=X+Y; V(S2); Y=Y+Z; 18、信号量是一个整型变量,可在其上做加1或减1的操作。

2.4 经典进程同步问题

1、一个供应商用汽车给某超市送货,并把汽车上的货物用超市的三轮车运到仓库中,超市的工作人员也用三轮车从仓库中取货去出售。假设共有3辆三轮车,仓库中只能容纳10辆三轮车的货物,且每次从汽车上取货只能共给一辆三轮车,仓库也只能容纳一辆三轮车进入。用信号量实现向仓库中送货及从仓库中取货的同步算法。 2、有一个仓库,可以存放A、B两种产品,但要求:

① 每次只能存入一种产品(A或B); ② A产品数量-B产品数量

其中M、N是正整数,使用P、V操作描述产品A与产品B的入库过程。

12

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