操作系统同步例题(共7页).doc

上传人:飞****2 文档编号:13659749 上传时间:2022-04-30 格式:DOC 页数:7 大小:39.50KB
返回 下载 相关 举报
操作系统同步例题(共7页).doc_第1页
第1页 / 共7页
操作系统同步例题(共7页).doc_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《操作系统同步例题(共7页).doc》由会员分享,可在线阅读,更多相关《操作系统同步例题(共7页).doc(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上13. 对于生产者消费者问题,假设缓冲区是无界的,试用信号灯与PV操作给出解法。答:由于是无界缓冲区,所以生产者不会因得不到缓冲区而被阻塞,不需要对空缓冲区进行管理,可以去掉在有界缓冲区中用来管理空缓冲区的信号量及其PV操作。semaphore mutex_in=1;semaphore mutex_out=1;semaphore empty=0;int in=0,out=0;生产者活动:while(1)produce next product;P(mutex_in);add the product to bufferin;in+;v(mutex_in);V(empty

2、); 消费者活动:while(1)P(empty);P(mutex_out);take the product from bufferout;out+;V(mutex_out);14. 设有一个可以装A、B两种物品的仓库,其容量无限大,但要求仓库中A、B两种物品的数量满足下述不等式:-MA物品数量B物品数量N其中M和N为正整数。 试用信号灯和PV操作描述A、B两种物品的入库过程。答:已知条件 -MA物品数量B物品数量N 可以拆成两个不等式,即A物品数量B物品数量N,B物品数量A物品数量M。这两个不等式的含义是:仓库中A物品可以比B物品多,但不能超过N个;物品可以比A物品多,但不能超过M个。se

3、maphore a=n;semaphore b=m;void main()createprocess(A,);createprocess(B,);A物品入库:void A()while(1)P(a);A物品入库;V(b);B物品入库:void B()while(1)P(b);B物品入库;V(a);15. 试用信号灯与PV操作实现司机与售票员之间的同步问题。设公共汽车上有一个司机和一个售票员,其活动如下图所示。 为了安全起见,显然要求: (1)关车门后方能启动车辆;(2)到站停车后方能开车门。亦即“启动车辆”这一活动应当在“关车门”这一活动之后,“开车门”这一活动应当在“到站停车”这一活动之后。

4、解:如果进程P2尚未推进到处时,进程P1已经推进到处,则P1应等待直到P2推进到处为止;同样,如果进程P1尚未推进到处时,进程P2已经推进到处,则P2应等待直到P1推进到处为止。如果进程P1在处发生了等待,则当进程P2执行到处时应将P1唤醒;同样,如果进程P2在处发生了等待,则当进程P2执行到处时应将P1唤醒。用信号量和P、V操作解决这一问题,需要定义两个信号量,一个信号量start表示是否允许司机启动车辆,另一个信号量open表示是否允许售票员开车门。初始状态是车停在始发站,车门开着,等待乘客上车。因此,两个信号量的初值都是0。semaphore start=0;semaphore open

5、=0;司机的活动:P1: doP(start); 启动车辆;正常行车;到站停车;V(open);while (1);售票员的活动:P2: do关车门;V(start); 售票;P(open);开车门;while (1);16. 设有A、B、C三组进程,它们互斥地使用某一独占型资源R,使用前申请,使用后释放。资源分配原则如下:(1) 当只有一组申请进程时,该组申请进程依次获得R;(2) 当有两组申请进程时,各组申请进程交替获得R,组内申请进程依次获得R;(3) 当有三组申请进程时,各组申请进程轮流获得R,组内申请进程依次获得R。试用信号灯和PV操作分别给出各组进程的申请活动程序段和释放活动程序段

6、。解:int free=1;/设备状态标志semaphore mutex=1;semaphore qa=qb=qc=0; /各组等待队列int counta=countb=countc=0;/等待队列长度A组申请:P(mutex);if(free=1)free=0;V(mutex);elsecounta+;V(mutex);P(qa);A组释放:P(mutex);if(countb0)countb-;V(qb);elseif(countc0)countc-;V(qc);elseif(counta0)counta-V(qa);else free=1;A组进程活动可以给出B组和C组进程活动。17.

7、 设自行车生产线上有一只箱子,其中有N个位置(N3),每个位置可存放一个车架或一个车轮; 又设有三个工人,其活动分别为:工人1活动:do 加工一个车架;车架放入箱中;while(1)工人2活动:do 加工一个车轮;车轮放入箱中;while(1)工人3活动:do 箱中取一车架;箱中取二车轮;组装为一台车;while(1)试分别用信号灯与PV操作、管程、会合实现三个工人的合作,要求解中不含死锁。解:用信号灯与PV操作实现三个工人的合作,管程与会合解法可仿照给出。首先不考虑死锁问题,工人1与工人3、工人2与工人3构成生产者与消费者关系,这两对生产/消费关系通过共同的缓冲区相联系。从资源的角度来看,箱

8、子中的空位置相当于工人1和工人2的资源,而车架和车轮相当于工人3的资源。定义三个信号灯如下:semaphore empty=N;/空位置semaphore wheel=0;/车轮semaphore frame=0;/车架三位工人的活动分别为:工人1活动:do 加工一个车架;P(empty);车架放入箱中;V(frame);while(1)工人2活动:do 加工一个车轮;P(empty);车轮放入箱中;V(wheel);while(1)工人3活动:do P(frame);箱中取一车架;V(empty);P(wheel);P(wheel);箱中取二车轮;V(empty);V(empty);组装为一

9、台车;while(1)分析上述解法易见,当工人1推进速度较快时,箱中空位置可能完全被车架占满或只留有一个存放车轮的位置,而当此时工人3同时取2个车轮时将无法得到,而工人2又无法将新加工的车轮放入箱中;当工人2推进速度较快时,箱中空位置可能完全被车轮占满,而当此时工人3取车架时将无法得到,而工人1又无法将新加工的车架放入箱中。上述两种情况都意味着死锁。为防止死锁的发生,箱中车架的数量不可超过N-2,车轮的数量不可超过N-1,这些限制可以用两个信号灯来表达。semaphore s1=N-2;semaphore s2=N-1;如此,可以给出不含死锁的完整解法如下:工人1活动:do 加工一个车架;P(

10、s1);P(empty);车架放入箱中;V(frame);while(1)工人2活动:do 加工一个车轮;P(s2);P(empty);车轮放入箱中;V(wheel);while(1)工人3活动:do P(frame);箱中取一车架;V(empty);V(s1);P(wheel);P(wheel);箱中取二车轮;V(empty);V(empty);V(s2);V(s2);组装为一台车;while(1)详细描述还应考虑对箱子单元的描述以及访问互斥问题。建议车架放在箱子的一端,车轮放在箱子的另一端,车架与车轮都采用后进先出的管理方式。18. 一座小桥(最多只能承重两个人)横跨南北两岸,任意时刻同一

11、方向只允许一人过桥,南侧桥段和北侧桥段较窄只能通过一人,桥中央一处宽敞,允许两个人通过或歇息。试用信号灯和PV操作写出南、北两岸过桥的同步算法。解:桥上可能没有人,也可能有一人,也可能有两人。(a) 两人同时过桥(b) 两人都到中间(c) 南(北)来者到北(南)段共需要三个信号量,load用来控制桥上人数,初值为2,表示桥上最多有2人;north用来控制北段桥的使用,初值为1,用于对北段桥互斥;south用来控制南段桥的使用,初值为1,用于对南段桥互斥。semaphore load=2;semaphore north=1;semaphore south=1;tosouth()P(load);P

12、(north);过北段桥;到桥中间;V(north);P(south);过南段桥;到达南岸V(south);V(load);tonorth()P(load);P(south);过南段桥;到桥中间V(south);P(north);过北段桥;到达北岸V(north);V(load);19.某寺庙,有小和尚、老和尚若干庙内有一水缸,由小和尚提水入缸,供老和尚饮用。水缸可容纳 30 桶水,每次入水、取水仅为1桶,不可同时进行。水取自同一井中,水井径窄,每次只能容纳一个水桶取水。设水桶个数为5个,试用信号灯和PV操作给出老和尚和小和尚的活动。semaphore empty=30;/ 表示缸中目前还能装

13、多少桶水,初始时能装30桶水semaphore full=0;/ 表示缸中有多少桶水,初始时缸中没有水semaphore buckets=5;/ 表示有多少只空桶可用,初始时有5只桶可用semaphore mutex_well=1;/ 用于实现对井的互斥操作semaphore mutex_bigjar=1; / 用于实现对缸的互斥操作young_monk()while(1)P(empty);P(buckets);go to the well;P(mutex_well);get water;V(mutex_well);go to the temple;P(mutex_bigjar);pure t

14、he 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);20. 设系统中有5台类型相同的打印机,依次编号为15。 又设系统中有n个使用打印机的进程,使用前申请,使用后释放。 每个进程有一个进程标识,用于区别不同的进程。 每个进程还有一个优先数,不同进程的优先数各异。当有多个进程同时申请时,按照进程优先数由高到低的

15、次序实施分配。 试用信号灯和PV操作实现对于打印机资源的管理,即要求编写如下函数和过程:(1) 函数 require(pid,pri): 申请一台打印机。参数pid为进程标识,其值为1到n的整数; pri为进程优先数,其值为正整数; 函数返回值为所申请到打印机的编号,其值为1到5的整数;(2) 过程 return(prnt): 释放一台打印机。参数prnt为所释放打印机的编号,其值为1到5的整数。解:#define N 5bool flagN+1;/flag0表示可用打印机数,/flagi表示第i号打印机的状态(1=i0)flag0-;for(int i=1;iN+1;i+)if(flagi=1)flagi=0;break;V(mutex_flag);return i;elseV(mutex_flag);p(mutex_queue);将进程pid按其优先数插入到等待队列queue中;V(mutex_queue);return(int print)P(mutex_flag);if(queue=NULL)flag0+;flagprint=1;V(mutex_flag);elseV(mutex_flag);p(mutex_queue);将print分配给queue队首进程;queue下移;V(mutex_queue);专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁