操作系统应用题

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.2.3设有两道程序按A,B的优先次序运行,其内部计算和I/O操作的时间如下:

程序A使用30 ms CPU后使用40 ms I/OA,最后使用20 ms CPU;

程序B使用60 ms CPU后使用20 ms I/OB,最后使用30 ms CPU。

(1) 试画出按多道程序运行的时间关系图。

(2) 完成两道程序共花多少时间?它比单道运行节省多少时间?

分析:本题是关于多道程序设计的计算题。通过计算,可以更好地理解为什么要引入多道程序设计。

解:(1) 多道程序运行的并发执行时间关系如下图所示。

CPU

进程A进程A结束

进程B进程B结束

图多道程序运行的并发执行时间关系图

(2) 按单道程序运行时需花时间为:

30ms + 40ms + 20ms + 60ms +20ms + 30ms = 200ms

两道程序并发运行共花时间为:

30ms + 40ms + 20ms + 20ms + 30ms = 140ms

所以,完成两道程序并发运行共花140ms,它比单道运行节省60 ms时间。

3.2.2桌上有一个空盘,允许存放一个水果。爸爸可向盘中放苹果,也可向盘中放橘子,儿子专等吃盘中的橘子,女儿专等吃盘中的苹果。规定当盘空时一次放一个水果供吃者取用,请用P,V原语实现爸爸、儿子、女儿三个并发进程的同步。

分析:本题是检查对P,V原语掌握情况。本题的题意是:

①爸爸、儿子、女儿共用一个盘子,且盘中一次只能放一个水果。

②当盘空时,爸爸可将一个水果放入果盘中。

③若放入盘中的是橘子,允许儿子吃,女儿必须等待。

④若放入盘中的是苹果,允许女儿吃,儿子必须等待。

因此,上述问题实际上是生产者一消费者问题的一种变形。这里,生产者放入缓冲区的产品有两类,消费者也有两类,每类消费者只消费其中固定的一类产品。

P(S) :

S := S – 1

若S >= 0,则进程继续运行

若S < 0,则进程被阻塞,并将它插入该信号量的等待队列中。

V(S) :

S := S + 1

若S > 0,则进程继续运行

若S <= 0,则从信号量的等待队列中移出第一个进程,使其变为就绪状态,然后再返回原进程继续执行。

解:设置三个信号量:

S,初值为1,用于爸爸、儿子、女儿三个进程间的互斥,表示盘中是否为空。

SO ,初值为0,用于爸爸、女儿两个进程间的同步,表示盘中是否有橘子。 SA ,初值为0,用于爸爸、儿子两个进程间的同步,表示盘中是否有苹果。 三个进程之间的同步描述如下: father 进程 daughter 进程 son 进程 L1: L2: L3: P(S) P(SO) P(SA) 将水果放入盘中 从盘中取出橘子 从盘中取出苹果 if (放入是橘子) V(SO) V(S) V(S) else V(SA) 吃橘子 吃苹果 goto L1 goto L2 goto L3

3.2.3 如下图所示的是高级通讯原语SEND 和RECEIVE 不完整的框图。请填充适当的P ,V 操作,并说明所用信号量的意义和初值。

发送者 申请一消息区

消息送消息区

消息挂入消息链

V(S2)

从消息链上摘下一消息

消息送接收区

释放消息区

3.2.7 分析下面信号量解决五位哲学家进餐问题的同步算法是否满足同步机制的准则。若不满足,说明为什么,并给出满足同步机制准则的同步算法。

V AR fork;

ARRAY[0..4] OF semaphore;

fork[0] := fork[1] := fork[2] := fork[3] := fork[4] := 1;

Cobegin

Pi: REPEA T /第i个哲学家的生活过程/

Think FOR While;

P(fork[i] ) ;

P(fork[(i+1) MOD 5] ) ;

Eat FOR WHILE;

V(foth[i]) ;

V(fork[(i+1) MOD 5] ) ;

UNTIL false

Cbend

解:当每个哲学家都只拿到一把又子时,上述同步算法不满足同步机制的准则中的“有限等待”准则,故发生死锁。//每次一个进程

一种改进的算法如下:

V AR fork: ARRAY[0..4] of semaphore;

V AR mutex : semaphore;

fork[0] := fork[1] := fork[2] := fork[3] := fork[4] := 1;

mutex := l;

Cobegin

Pi: REPEA T /第i个哲学家的生活过程/

Think FOR While;

P(mutex) ;

P(fork[i] ) ;

P(fork[(i+1) MOD 5] ) ;

V(mutex) ;

Eat FOR WHILE;

V(foth[i]) ;

V(fork[(i+1) MOD 5] ) ;

UNTIL false

Cbend

应用题

1. 设公共汽车上,司机和售票员的活动如下图所示。 在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?并用信号量的P ,V 操作实现它的同步。

. S1:启动车辆与关车门 S2:开车门与下乘客 s3:开车门与上乘客

S1:启动车辆与关车门 S2:开车门与下乘客 s3:开车门与上乘客 Driver : conductor:

Do{ P(s3) 上乘客 Do{ 关车门

P (s1); V(s1)

启动车辆 售票 正常行车 P(s2) 到站停车 下乘客

}while(1); 开车门 V(s2) V(s3) }while(1);

9. 假设一个信箱只能存放一封信件,只要信箱为空,进程P1就产生信件并送入信箱,只要信箱中有信件,进程P2就不断从信箱中取出信件并进行处理。开始时,信箱为空。试用P ,V 操作表达进程P1,P2之间的关系。 Empty=1; full=0;mutax=1;

P1: p2: 产生信件

P(empty) P (full )

司机

售票员

相关文档
最新文档