操作系统练习题new

}

coend

get() { }

compute() { }

while(计算工作未完成) { }

p(Sf);

从缓冲区中取出数据; v(Se); 进行数据计算; while (采集工作未完成) { }

采集一个数据: p(Se);

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

图2.7给出了四个进程合作完成某一任务的前趋图,试说明这四个进程间的同步关系,并用P、V操作描述它。P35

图2.7 四个合作进程的前趋图

解:图2.7说明任务启动后S1先执行。当S1结束后,S2、S3可以开始执行。S2、S3

完成后,S4才能开始执行。为了确保这一执行顺序,设三个同步信号量b2、b3、b4分别

表示进程S2、S3、S4是否可以开始执行,其初值均为0。这四个进程的同步描述如下:

int b2=0; /*表示进程S2是否可以开始执行*/ int b3=0; /*表示进程S3是否可以开始执行*/

第 21 页 共 37 页

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

cobegin

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

S1 ( ) {

v(b2); v(b3); } S2 ( ) {

p(b2); ┇

v(b4); }

S3 ( ) {

p(b3): ┇ v(b4); }

S4 ( ) {

p(b4);

p(b4); /*因在S2及S3完成时均对b4做了v操作,因此这里要用两个p操作*/ ┇ }

8. 桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子,儿子专

等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者用,请用P、V原语实现爸爸、儿子、女儿三个并发进程的同步。

[分析及相关知识] 在本题中,爸爸、儿子、女儿共用一个盘子,且盘中一次只能放一个水果.当盘子为空时,爸爸可将一个水果放入果盘中。若放入果盘中的是桔子,则允许儿子

第 22 页 共 37 页

吃,女儿必须等待;若放入果盘中的是苹果,则允许女儿吃,儿子必须等待。本题实际上是生产者—消费者问题的一种变形。这里,生产者放入缓冲区的产品有两类,消费者也有两类,每类消费者只消费其中固定的一类产品。

解:在本题中,应设置三个信号量S、So、Sa,信号量S表示盘子是否为空,其初值 为1;信号量So表示盘中是否有桔子,其初值为0;信号量Sa表示盘中是否有苹果,其初 值为0。同步描述如下: int S=1; int Sa=O: int So=O: main( ) { cobegin father(); son();

dau

>>灞曞紑鍏ㄦ枃<<
12@gma联系客服:779662525#qq.com(#替换为@)