《操作系统附加题答案.pptx》由会员分享,可在线阅读,更多相关《操作系统附加题答案.pptx(11页珍藏版)》请在第壹文秘上搜索。
1、进程同步问题操作系统附加题作业由三个进程由三个进程getget,copycopy和和putput以及两个缓冲区以及两个缓冲区buffer1buffer1和和buffer2buffer2完成完成 一项输入一项输入/ /输出操作。进程输出操作。进程getget的功能是把一张卡片上的信的功能是把一张卡片上的信息从读卡机上读进息从读卡机上读进buffer1buffer1;进程;进程copycopy的功能是把的功能是把buffer1buffer1中的中的信息复制到信息复制到buffer2buffer2;进程;进程putput的功能是取出的功能是取出buffer2buffer2中的信息并中的信息并从打印机
2、上打印输出。试用从打印机上打印输出。试用P P、V V操作完成这三个进程间的尽可操作完成这三个进程间的尽可能并发正确执行的关系能并发正确执行的关系( (用程序或框图表示用程序或框图表示) ),并指明信号量的,并指明信号量的作用和初值。作用和初值。某寺庙,有小和尚、老和尚若干。有一水缸,由小和尚提水入某寺庙,有小和尚、老和尚若干。有一水缸,由小和尚提水入缸老和尚饮用。水缸可容十桶水,水取自同一井中。水井径窄,缸老和尚饮用。水缸可容十桶水,水取自同一井中。水井径窄,每次只能容一个桶取水。水桶总数为每次只能容一个桶取水。水桶总数为3 3个。每次入、取水仅为一个。每次入、取水仅为一桶,且不可同时进行。
3、试给出有关取水、入水的算法描述。桶,且不可同时进行。试给出有关取水、入水的算法描述。 semaphore empty=10;/ 表示缸中目前还能装多少桶水,初始时能装10桶水semaphore full=0;/ 表示缸中有多少桶水,初始时缸中没有水semaphore buckets=3;/ 表示有多少只空桶可用,初始时有3只桶可用semaphore mutex_well=1;/ 用于实现对井的互斥操作semaphore mutex_bigjar=1; / 用于实现对缸的互斥操作young_monk() while(1) P(empty); P(buckets); go to the well;
4、 P(mutex_well); get water; V(mutex_well); go to the temple; P(mutex_bigjar); pure the water into the big jar; V(mutex_bigjar); V(buckets); V(full); old_monk() while() P(full); P(buckets); P(mutex_bigjar); get water; V(mutex_bigjar); drink water; V(buckets); V(empty); 47. 47. 系统中有多个生产者进程和多个消费者进程,共系统中
5、有多个生产者进程和多个消费者进程,共享一个能存放享一个能存放 1000 1000 件产品的环形件产品的环形 缓冲区(初始为缓冲区(初始为空)。当缓冲区未满时,生产者进程可以放入其生产的空)。当缓冲区未满时,生产者进程可以放入其生产的一件产品,否则等待;一件产品,否则等待; 当缓冲区未空时,消费者进程当缓冲区未空时,消费者进程可以从缓冲区取走一件产品,否则等待。要求一个消费可以从缓冲区取走一件产品,否则等待。要求一个消费者者进程从进程从缓冲区连续取出缓冲区连续取出 10 10 件产品后,其他消费者进件产品后,其他消费者进程才可以取产品。请使用信号量程才可以取产品。请使用信号量 P P,V(wai
6、t()V(wait(), signal()signal()操作实现进程间的互斥与同步,要求写出完操作实现进程间的互斥与同步,要求写出完整的过程,并说明所用信号量的含义和整的过程,并说明所用信号量的含义和 初值。初值。semaphore mutex1=1; semaphore mutex2=1; semaphore empty=n; semaphore semaphore mutex1=1; semaphore mutex2=1; semaphore empty=n; semaphore full=0; full=0; producerproducer()()while(1while(1)生产生
7、产一个产品一个产品; ;P(emptyP(empty););/判断缓冲区是否有空位判断缓冲区是否有空位P(mutex2P(mutex2););/互斥访问缓冲区互斥访问缓冲区 把把产品放入缓冲区产品放入缓冲区; ;V(mutex2V(mutex2););/互斥访问缓冲区互斥访问缓冲区V(fullV(full););/产品的数量加产品的数量加 1 1 consumerconsumer()()while(1while(1)P(mutex1P(mutex1) )/连续取连续取 10 10 次次for(for(intint i = 0; i = 10; +i)i = 0; i = 10; +i)P(fullP(full););/判断缓冲区是否有产品判断缓冲区是否有产品P(mutex2P(mutex2););/互斥访问缓冲区互斥访问缓冲区 从从缓冲区取出一件产品缓冲区取出一件产品; ;V(mutex2V(mutex2););/互斥访问缓冲区互斥访问缓冲区V(emptyV(empty););/腾出一个空位腾出一个空位 消费消费这件产品这件产品; ; V(mutex1V(mutex1) )