
操作系统PV操作习题.doc
58页一、用P、V操作描述前趋关系P1、P2、P3、P4、P5、P6为一组合作进程,其前趋图如图2.3所示,试用P、V操作描述这6个进程的同步p23 图2.3说明任务启动后P1先执行,当它结束后P2、P3可以开始执行,P2完成后P4、P5可以开始执行,仅当P3、P4、P5都执行完后,P6才能开始执行为了确保这一执行顺序,设置5个同步信号量n、摄、f3、f4、g分别表示进程P1、P2、P3、P4、P5是否执行完成,其初值均为0这6个进程的同步描述如下: 图2.3 描述进程执行先后次序的前趋图 int f1=0; /*表示进程P1是否执行完成*/ int f2=0; /*表示进程P2是否执行完成*/ int f3=0; /*表示进程P3是否执行完成*/ int f4=0; /*表示进程P4是否执行完成*/ int f5=0; /*表示进程P5是否执行完成*/ main() { cobegin P1( ); P2( ); P3( ); P4( ); P5( ); P6( ); coend } P1 ( ) { ┇ v(f1); v(f1): } P2 ( ) { p(f1); ┇ v(f2); v(f2); ) P3 ( ) { p(f1); ┇ v(f3); } P4( ) { p(f2); ┇ v(f4); } P5 ( ) { p(f2); ┇ v(f5); } P6( ) { p(f3); p(f4); p(f5); ┇ } 二、生产者-消费者问题 p25 生产者-消费者问题是最著名的进程同步问题。
它描述了一组生产者向一组消费者提供产品,它们共享一个有界缓冲区,生产者向其中投放产品,消费者从中取得产品生产者-消费者问题是许多相互合作进程的一种抽象例如,在输入时,输入进程是生产者,计算进程是消费者;在输出时,计算进程是生产者,打印进程是消费者因此,该问题具有很大实用价值 我们把一个长度为n的有界缓冲区(n>0)与一群生产者进程P1、P2、…、Pm和一群消费者进程C1、C2、…、Ck联系起来,如图2.4所示假定这些生产者和消费者是互相等效的只要缓冲区未满,生产者就可以把产品送入缓冲区,类似地,只要缓冲区未空,消费者便可以从缓冲区中取走物品并消耗它生产者和消费者的同步关系将禁止生产者向满的缓冲区输送产品,也禁止消费者从空的缓冲区中提取物品 图2.4 生产者-消费者问题 为解决这一类生产者-消费者问题,应该设置两个同步信号量,一个说明空缓冲单元的 数目,用empty表示,其初值为有界缓冲区的大小n,另一个说明满缓冲单元的数目,用 full表示,其初值为0在本例中有P1、P2、…、Pm个生产者和C1、C2、…、Ck个消费者,它们在执行生产活动和消费活动中要对有界缓冲区进行操作。
由于有界缓冲区是一个临界资源,必须互斥使用,所以,另外还需设置一个互斥信号量mutex,其初值为1生产者-消费者问题的同步描述如下: int full=O; /*满缓冲单元的数目*/ int empty=n; /*空缓冲单元的数目*/ int mutex=1; /*对有界缓冲区进行操作的互斥信号量*/ main() { cobegin produceri();/*i=1,2,┅,m;j=l,2,┅,k*/ consumerj(); coend } produceri() /*i=1,2,┅,m*/ { while(生产未完成) { ┇ 生产一个产品; p(empty); p(mutex); 送一个产品到有界缓冲区; v(mutex); v(full); ) } consumerj() /*j=1,2,…,k*/ { while(还要继续消费) { p (full); p(mutex); 从有界缓冲区中取产品; v (mutex); v (empty); ┇ 消费一个产品; } } 三、在操作系统中,进程是一个具有一定独立功能的程序在某个数据集上的一次 __________。
A.等待活动 B.运行活动 C.单独操作 D.关联操作 答:B 四、多道程序环境下,操作系统分配资源以_______为基本单位 A.程序 B.指令 C进程 D.作业 答:C 五、对于两个并发进程,设互斥信号量为mutex,若mutex=O,则_____ A.表示没有进程进入临界区 B.表示有一个进程进入临界区 C.表示有一个进程进入临界区,另一个进程等待进入 D.表示有两个进程进入临界区 答:B 六、两个进程合作完成一个任务在并发执行中,一个进程要等待其合作伙伴发来消 息,或者建立某个条件后再向前执行,这种制约性合作关系被称为进程的____ A.同步 B.互斥 C. 调度 D.执行 答:A 七、为了进行进程协调,进程之间应当具有一定的联系,这种联系通常采用进程间交换数据的方式进行,这种方式称为______ A.进程互斥 B.进程同步 C进程制约 D.进程通信 答:D 八、在测量控制系统中,数据采集任务把所采集的数据送入一单缓冲区;计算任务从该单缓冲区中取出数据进行计算。
试写出利用信号量机制实现两者共享单缓冲区的同步算法P33 [分析及相关知识] 在本题中采集任务与计算任务共用一个单缓冲区.当采集 任务采集到一个数据后,只有当缓冲区为空时才能将数据送入缓冲区中存放,否则应等待缓冲区腾空;当缓冲区中有数据时,计算任务才能从缓冲区中取出数据进行计算,否则也应等待 本题实际上是一个生产者—消费者问题将生产者—消费者问题抽象出来,以另外 一种形式描述是一种常见的试题形式.只要对生产者—消费者问题有了深入的理 解,就不难解决此类试题 解;在本题中,应设置两个信号量Sf,Se,信号量Sf表示缓冲区中是否有可供打印的计算结果,其初值为0;信号量Se用于表示缓冲区有无空位置存放新的信息,其初值为1 本题的同步描述如下: int Se=l; int Sf=0; main() { cobegin get(); compute(); coend } get() { while (采集工作未完成) { 采集一个数据: p(Se); 将数据送入缓冲区中; v(Sf); } } compute() { while(计算工作未完成) { p(Sf); 从缓冲区中取出数据; v(Se); 进行数据计算; } } 九、图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是否可以开始执行*/ 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操作*/ ┇ } 十、桌上有一空盘,允许存放一只水果。
爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进程的同步P37 [分析及相关知识] 在本题中,爸爸、儿子、女儿共用一个盘子,且盘中一次只能放一个水果.当盘子为空时,爸爸可将一个水果放入果盘中若放入果盘中的是桔子,则允许儿子吃,女儿必须等待;若放入果盘中的是苹果,则允许女儿吃,儿子必须等待本题实际上是生产者—消费者问题的一种变形这里,生产者放入缓冲区的产品有两类,消费者也有两类,每类消费者只消费其中固定的一类产品 解:在本题中,应设置三个信号量S、So、Sa,信号量S表示盘子是否为空,其初值 为1;信号量So表示盘中是否有桔子,其初值为0;信号量Sa表示盘中是否有苹果,其初 值为0同步描述如下: int S=1; int Sa=O: int So=O: main( ) { cobegin father(); son(); daughter(): coend 。
