操作系统习题(F.L)答案 下载本文

p1 ( );

p2 ( ); /*进程p1、p2并发执行*/ coend }

p1 ( ) /*第一个进程p1*/ {

while ( 1 ) {

other section 1 ; /*其他部分*/ do c1=1 – c2 ; while ( c2==0 );

critical section ; /*临界区*/ c1 =1; } }

p2 ( ) /*第二个进程p2*/ {

while ( 1 ) {

other section 2 ; /*其他部分*/ do

c2=1 – c1 ; while ( c1==0 );

critical section ; /*临界区*/ c2 =1; } }

13. ①写出P、V操作的定义。

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

14.设有八个程序prog1、prog2、…、prog8。它们在并发系统中执行时

有如图2.13所示的制约关系,试用P、V操作实现这些程序见的同步。 prog1 prog2 prog3 prog5

prog4

prog6 prog7 prog8

图2.13 进程并发执行的制约关系

15.有一个仓库,可以存放A和B两种产品,但要求: (1)每次只能存入一种产品(A或B); (2) - N﹤A产品数量 – B产品数量﹤M。

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

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

①每个发送进程一次发送一个消息,写入一个缓冲区,缓冲区大小等于消息长度;

②对每一个消息,B1、B2、…、Bn2都须各接收一次,读入各自的数据区内;

③m个缓冲区都满时,发送进程等待;没有可读的消息时,接收进程等待。

试用P、V操作组织正确的发送和接收工作。

解析题:

1.(1)程序是指令的有序集合,其本身没有任何运行的含义,它是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态的概念。

(2)程序的存在是永久的,而进程则是有生命期的,它因创建而产生,因调度而执行,因得不到资源而暂停,因撤消而灭亡。

(3)程序仅是指令的有序集合。而进程则由程序、数据和进程控制块组成。

(4)进程与程序之间不是一一对应的,即同一程序同时运行于若干不同的数据集合上,它将属于若干个不同的进程,而一个进程可以执行多个程序。

2.在本题中,应设置两个信号量Sf、Se,信号量Sf表示缓冲区中是否有可供打印计算结果,其初值为0;信号量Se用于表示缓冲区有无空位置存放新的信息,其初值为1。本题的同步描述如下: int Se=1; int Sf=0; {

cobegin get ( ) ;

compute ( ) ; coend }

get ( ) {

while (采集工作未完成) {

采集一个数据; P ( Se ) ;

将数据送入缓冲区中; V ( Sf ) ; } }

compute ( ) {

while (计算工作未完成) {

P ( Sf ) ;

从缓冲区中取出数据; V ( Se) ;

进行数据计算; } }

3.

4. 图2.7说明任务启动后S1先执行。当S1结束后,S2、S3可以开始执行。S2、S3完成后,S4才能开始执行。为了确保这一执行顺序,设三个同步信号量b2、b3、b4分别表示进程S2、S3、S4是否可以开始执行,其初值均为0。这四个进程的同步描述如下:

int b2=0; /* 表示进程S2 是否可以开始执行*/ int b3=0; /* 表示进程S3 是否可以开始执行*/ int b4=0; /* 表示进程S4 是否可以开始执行*/ main ( ) {

cobegin S1 ( );

S2 ( ); S3 ( ); S4 ( ); coend }

S1 ( ) {

v ( b2 ); v ( b3 ); }

S2 ( ) {

p ( b2 );

v ( b4 ); }

S3 ( ) { … …