- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统报告62597new.doc
操作系统实验报告
实验一 哲学家就餐问题
一、实验目的:
1、熟练使用VC++6.0编译环境,调试并正确运行程序。
2、理解哲学家就餐问题中出现的问题,进而掌握死锁的必要条件。
3、理解源程序中产生和防止死锁的算法,及相关窗口操作。
二、实验原理:
1、问题描述
有五个哲学家围坐在一圆桌旁,桌中央有一盘通心粉,每人面前有一只空盘子,每两人之间放一只筷子。每个哲学家的行为是思考,感到饥饿,然后吃通心粉。为了吃通心粉,每个哲学家必须拿到两只筷子,并且每个人只能直接从自己的左边或右边去取筷子。
2、分配方式
方式一(不会进入死锁)
仅当一个哲学家左右两边的筷子都可用时,才允许他拿筷子。这样要么一次占有两只筷子(所有线程需要的资源)进行下一步的吃通心粉,然后释放所有的资源;要么不占用资源,这样就不可能产生死锁了。
方式二(会进入死锁)
当筷子(资源)可用时,先分配左边的筷子,等待一会后再分配右边的筷子,由于这个过程中,左边的筷子一直没有释放,就有可能产生死锁了。
3、程序运行说明
程序运行过程中会弹出一个MessageBox提示操作者操作:
1)第一个对话框用于选择运行模式
a.选择yes 表示采用的是运行的防止死锁的方式,这样的话整个程序可以一直运行下去,不会产生死锁。
b.选择no 表示运行产生死锁的方式会弹出第二个对话框。
2)第二个对话框用于选择运行时,线程运行的时间
a. 选择 res 线程时间比较短,很快就可以死锁
b.选择no 线程时间跟选择yes 时候的时间差不多,产生死锁的时间稍微长一点。
三、实验过程及分析:
1、伪代码:
1) 不发生死锁的方式(要么一下占用两支筷子,要么不占用 )
var mutexleftchopstick,mutexrightchopstick;
beging:
resting;
waiting;
p(mutexleftchopstick); //先改变左手筷子信号量
p(mutexrightchopstick); //马上改变右手筷子信号量
GetResource(leftchopstick,rightchopstick);
eating;
v(mutexleftchopstick);
v(mutexrightchopstick);
end
2) 发生死锁的方式(一旦可以占用筷子,就马上占用)
var mutexleftchopstick,mutexrightchopstick;
beging:
resting;
waiting;
p(mutexleftchopstick); //改变左手筷子信号量
GetResource(leftchopstick); //获取左手筷子
p(mutexrightchopstick); //改变右手筷子信号量
GetResource(rightchopstick); //获取右手筷子
eating;
v(mutexleftchopstick);
v(mutexrightchopstick);
end
代码运行结果
1.选择Y
选择N
2、代码分析:
1)不发生死锁的方式:先确定两只筷子均没被占用才获取筷子,这样就打破了死锁的必要条件。
2)发生死锁的方式:有筷子即占用,看似效率很高,但因为资源有限,且不可抢占,很容易发生死锁。
四、思考题:
其他解决死锁的方案
规定其中一名哲学家先改变右手筷子的信号量,先获取右手筷子。这样,这名哲学家左手的筷子就有可能空闲出来,成为左边科学家的空闲右手筷子,此一环永远不会发生死锁。
五、实验总结:
本次实验主要是帮助我们提高阅读理解C语言程序的能力,虽然在前面的课堂学习中,老师已经详细解释了这个哲学家就餐问题的算法思路,但课下我们还是要花费很大功夫来把伪代码看懂。
从这次实验中,了解到了对于不同的分配方式,有的可能会导致死锁的发生,而有的则会避免产生死锁。若从程序的存储效率和运行效率来考虑是话,源程序所给的伪代码已是一种很好的解决方法。但解决死锁的方案有多种,这需要我们在以后的实践中去不断探索,以得到最佳的解决方法。
实验二 阅读者和写入者问题
实验目的:
熟练使用VC++6.0编译环境,调试并正确运行程序。
理解阅读者和写入者中出现的问题,进而掌握信号量的使用。
理解源程序中管理阅读者和写入者权限的算法,及相关窗口操作。
实验原理:
1、问题描述:
有一个公用的
文档评论(0)