操作系统实验报告--华科

操作系统实验报告--华科

ID:39289234

大小:75.05 KB

页数:5页

时间:2019-06-29

操作系统实验报告--华科_第1页
操作系统实验报告--华科_第2页
操作系统实验报告--华科_第3页
操作系统实验报告--华科_第4页
操作系统实验报告--华科_第5页
资源描述:

《操作系统实验报告--华科》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验一哲学家就餐问题一、实验目的1、熟练使用VC++6.0编译环境,调试并正确运行程序。2、理解哲学家就餐问题中出现的问题,进而掌握死锁的必要条件。3、理解源程序中产生和防止死锁的算法,及相关窗口操作。4、熟悉哲学家就餐问题流程。5、在VC++6.0环境下编译哲学家就餐问题演示程序,考虑其他解决死锁方法.二、实验原理1、问题描述有五个哲学家围坐在一圆桌旁,桌中央有一盘通心粉,每人面前有一只空盘子,每两人之间放一只筷子。每个哲学家的行为是思考,感到饥饿,然后吃通心粉。为了吃通心粉,每个哲学家必须拿到两只筷子,并且每

2、个人只能直接从自己的左边或右边去取筷子。2、分配方式方式一(不会进入死锁)仅当一个哲学家左右两边的筷子都可用时,才允许他拿筷子。这样要么一次占有两只筷子(所有线程需要的资源)进行下一步的吃通心粉,然后释放所有的资源;要么不占用资源,这样就不可能产生死锁了。方式二(会进入死锁)当筷子(资源)可用时,先分配左边的筷子,等待一会后再分配右边的筷子,由于这个过程中,左边的筷子一直没有释放,就有可能产生死锁了。3、程序运行说明程序运行过程中会弹出一个MessageBox提示操作者操作:1)第一个对话框用于选择运行模式a.选

3、择yes表示采用的是运行的防止死锁的方式,这样的话整个程序可以一直运行下去,不会产生死锁。b.选择no表示运行产生死锁的方式会弹出第二个对话框。2)第二个对话框用于选择运行时,线程运行的时间a.选择res线程时间比较短,很快就可以死锁b.选择no线程时间跟选择yes时候的时间差不多,产生死锁的时间稍微长一点。三、实验过程及分析1、伪代码:1)不发生死锁的方式(要么一下占用两支筷子,要么不占用)varmutexleftchopstick,mutexrightchopstick;beging:resting;wait

4、ing;p(mutexleftchopstick);//先改变左手筷子信号量p(mutexrightchopstick);//马上改变右手筷子信号量GetResource(leftchopstick,rightchopstick);eating;v(mutexleftchopstick);v(mutexrightchopstick);end2)发生死锁的方式(一旦可以占用筷子,就马上占用)varmutexleftchopstick,mutexrightchopstick;beging:resting;waitin

5、g;p(mutexleftchopstick);//改变左手筷子信号量GetResource(leftchopstick);//获取左手筷子p(mutexrightchopstick);//改变右手筷子信号量GetResource(rightchopstick);//获取右手筷子eating;v(mutexleftchopstick);v(mutexrightchopstick);end2、代码分析:1)不发生死锁的方式:先确定两只筷子均没被占用才获取筷子,这样就打破了死锁的必要条件。2)发生死锁的方式:有筷子即

6、占用,看似效率很高,但因为资源有限,且不可抢占,很容易发生死锁。四、思考题(1).其他解决死锁的方案1.一个方法是引入秘书,哲学家必须经过他的允许才能拿起餐叉。因为秘书知道哪只餐叉正在使用,所以他能够作出判断避免死锁。为了演示这种解法,假设哲学家依次标号为A至E。如果A和C在吃东西,则有四只餐叉在使用中。B坐在A和C之间,所以两只餐叉都无法使用,而D和E之间有一只空余的餐叉。假设这时D想要吃东西。如果他拿起了第五只餐叉,就有可能发生死锁。相反,如果他征求秘书同意,秘书会让他等待。这样,我们就能保证下次当两把餐叉空

7、余出来时,一定有一位哲学家可以成功的得到一对餐叉,从而避免了死锁。相当于引入一个对各进程的调度者,使之有序。2.规定在拿到左侧的筷子后,先检查右面的筷子是否可用。如果不可用则先放下左侧筷子,等一段时间再重复整个过程。分析:当出现以下情形,在某一个瞬间,所有的哲学家都同时启动这个算法,拿起左侧的筷子,而看到右侧筷子不可用,又都放下左侧筷子,等一会儿,又同时拿起左侧筷子……如此这样永远重复下去。对于这种情况,所有的程序都在运行,但却无法取得进展,即出现饥饿,所有的哲学家都吃不上饭。3.规定哲学家按顺序就餐,这样虽能避

8、免死锁,但效率不高。(2)考虑演示程序是怎样实现在随机调度进程时间、控制进程延迟时间、关闭进程时间的,找出相关函数,变量,并说明。答:程序是通过运用函数Sleep(P_DELAY)来实现对进程调度、延迟、关闭时间的控制的,其中变量P_DELAY的值为rand()/25*10,其会产生0到1/25*10之间的一个随机数作为随机时间。五、实验总结本次实验主要是帮助我们提高阅读

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。