网站大量收购独家精品文档,联系QQ:2885784924

山大操作系统实验5案例.doc

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
进程同步实验 张咪 软件四班 一、实验目的 总结和分析示例实验和独立实验中观察到的调试和运行信息,说明您对与解决非对称性互斥操作的算法有哪些新的理解和认识? 为什么会出现进程饥饿现象?本实验的饥饿现象是怎样表现的?怎样解决并发进程间发生的饥饿现象?您对于并发进程间使用消息传递解决进程通信问题有哪些新的理解和认识?根据实验程序、调试过程和结果分析写出实验报告。 二、实验要求 理发店问题:假设理发店的理发室中有3个理发椅子和3个理发师,有一个可容纳4个顾客坐等理发的沙发。此外还有一间等候室,可容纳13位顾客等候进入理发室。顾客如果发现理发店中顾客已满(超过20人),就不进入理发店。 在理发店内,理发师一旦有空就为坐在沙发上等待时间最长的顾客理发,同时空出的沙发让在等候室中等待时间最长的的顾客就坐。顾客理完发后,可向任何一位理发师付款。但理发店只有一本现金登记册,在任一时刻只能记录一个顾客的付款。理发师在没有顾客的时候就坐在理发椅子上睡眠。理发师的时间就用在理发、收款、睡眠上。 请利用linux系统提供的IPC进程通信机制实验并实现理发店问题的一个解法。 三、实验环境?? 实验环境均为Linux操作系统,开发工具为gcc和g++。 四、实验思路? 约束: 设置一个count变量来对顾客进行计数,该变量将被多个顾客进程互斥地访问并修改,通过一个互斥信号量mutext来实现。 count 20时,就不进入理发店。 7 count 20时,count++,顾客申请等候室,进入等候室等待,用一个room信号量控制。然后等待申请沙发,用一个sofa信号量控制。然后申请椅子。 3 count 7时,count++,顾客坐在沙发上等待,等待申请椅子。 count 3时,count++,顾客坐在椅子上等待理发。 2.只有在理发椅空闲时,顾客才能做到理发椅上等待理发师理发,否则顾客便必须等待;只有当理发椅上有顾客时,理发师才可以开始理发,否则他也必须等待。可通过信号量empty和full来控制。 3.理发师为顾客理发时,顾客必须等待理发的完成,并在理发完成后理发师唤醒他,使用一个信号量finish来控制; 4. 顾客理完发后必须向理发师付费,并等理发师收费后顾客才能离开;而理发师则需等待顾客付费,并在收费后唤醒顾客以允许他离开,这可分别通过两个信号量payment和receipt来控制。 初值:计数 int count 0 信号量empty 3;full 0;room 13;sofa 4;finish 0;pay 0;receipt 0; mutex 1; 理发师进程 while 1 wait full ; //等待理发椅上有顾客 剪头发 signal finish ; //通知顾客理发完成 wait pay ; //等待顾客付费 wait(mutex); //在任一时刻只能记录一个顾客的付款 收费 signal(mutex); signal receipt ; //通知顾客收费完毕 顾客进程 wait mutex ; //count既用于判断,也要修改,所以为临界资源,用mutex管理互斥 if count 20 //顾客大于20人 signal mutex ; 离开理发店 else //顾客小于20人 count count+1;//进入理发店 if count 7 //count 7,说明理发椅和沙发上都有人,需要到等待室等待 signal(mutex); wait room ;//申请进入等待室 在等待室等 wait sofa ; //申请沙发 signal(room);//释放等待室 坐在沙发上等 wait(empty);//等待理发椅为空 申请到理发椅 signal sofa ; //释放沙发 else if(count 3) //说明理发椅上都有人,需要坐到沙发上等待 signal(mutex); wait(sofa);//申请沙发 坐在沙发上等 wait(empty);//等待理发椅为空 申请到理发椅 signal(sofa);//释放沙发 else //count 3,可以坐到理发椅上等待 signal(mutex); wait empty ; //申请理发椅 坐在理发椅上等待理发 signal full ; //通知理发师开始理发 理发 wait finish ; //等待理发完毕 付款 signal payment ; //通知理发师已付款 wait receipt ; //等待理发师收款 理发师收费完成,顾客离开理发椅 signal empty ; //释放理发椅 wait mutex ; //对count 临界资源操作,用mutex完成互斥 count c

文档评论(0)

yy558933 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档