操作系统实验报告(哲学家问题)

更新时间:2023-10-16 09:30:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

操作系统实验报告: 哲学家问题 管理系 2001级工程管理 朱毅 0701013

操作系统实验报告

实验者:朱毅 学号:0701013

实验题目:哲学家问题

设有5个哲学家,共享一张放有5把椅子的桌子,每人分得一把椅子。但是,桌子上总共只有5支筷子,在每人两边分开各放一支。哲学家们在肚子饥饿时才试图分两次从两边拾起筷子就餐。

条件:

(1) 只有拿到两支筷子时,哲学家才能吃饭。

(2) 如果筷子已在他人手上,则哲学家必须等他人吃完之后才能拿到筷子。 (3) 任一哲学家在自己未拿到两支筷子吃饭之前,决不放下自己手中的筷子。 试:

(1) 描述一个保证不会出现两个邻座同时要求吃饭的通信算法。

(2) 描述一个既没有两邻座同时吃饭,又没有人饿死(永远拿不到筷子)的算法。 (3) 在什么情况下,5个哲学家全部吃不上饭?

开发环境:Microsoft Visual Foxpro 6.0 算法描述:

数据环境:

表 KUAIZI 相应字段:

筷子号 状态(逻辑型) 使用者桌号 表 ZHEXUEJIA 相应字段:

哲学家名 所属状态 拥有左筷子(逻辑型) 拥有右筷子(逻辑型) 桌号 表 FANGAN 相应字段 方案

表的具体内容请参见 DAIMA.DOC 文件

本程序解决死锁的关键:

从苏格拉底开始往黑格尔依次处理,对每人的处理一次进行到底,从而肯定必然有一人完全占有资源,避免了死锁,其实质就是按照5个哲学家的座位号作为绝对的优先级进行资源的先后分配。

初始状态:选择算法 (以下两算法不同之处用黑体标识) 算法一:

(1) 保证不会出现两个邻座同时要求吃饭的通信算法。

1、 由操作人员按“有人饿了”按钮,控制是否有哲学家肚子饿了。

2、 出现复选框和“确定”按钮,挑选哲学家后,按“确定”后确认选择。当做出

一个选择后,该哲学家左右两边的哲学家则不能被选中(通过对复选框的ENABLED属性控制),若取消选中,则该哲学家左右两边的哲学家 (在该哲学家的另一邻居也未被选中为前提) 还原为可选状态。 3、 “确认”后执行以下步骤:

第 1 页 共 3 页

操作系统实验报告: 哲学家问题 管理系 2001级工程管理 朱毅 0701013

① 从苏格拉底到黑格尔依次检验其是否是此次被选中 ②若是此次被选中,进行以下步骤:

a 改变 表KUAIZI 和 表ZHEXUEJIA 中相应的字段: ZHEXUEJIA:

所属状态由F(Full)改为H(Hungry)

b执行PROG1,分配给这些饥饿的哲学家筷子,若左边有筷子,取之,并标识“拥有左筷子”;若右边有筷子,取之,并标识“拥有右筷子”。 改变表KUAIZI中筷子的状态为.T.(使用中),并标志相应的使用者桌号。

c若哲学家已分配两支筷子,改变桌面筷子的可视化(通过VISIBLE属性控制)

d 在3个时钟控件TIMER中挑选一个未用的,用于控制哲学家吃饭时间倒计时。

4、 时钟控件:

①若时间已经用完(TIMETEMP=0)则进行以下步骤

a修改表ZHEXUEJIA和表KUAIZI,置“拥有左筷子”、“拥有右筷子”为.F.,并改“所属状态”为F(Full),改变相应的筷子状态为.F.(闲) b取消复选框的选中状态,并置为可选 c改变桌面筷子的可视状态

d检验左邻座的左邻座状态是否为‘F’(Full),若为F,则取消左邻居的不可被选中的状态,用同样的方法处理右邻座。

②若时间未用完,继续消耗时间 TIMETEMP=TIMETEMP-1

算法二:

(2) 既没有两邻座同时吃饭,又没有人饿死(永远拿不到筷子)的算法。

1、 由操作人员按“有人饿了”按钮,控制是否有哲学家肚子饿了。

2、 出现复选框和“确定”按钮,挑选哲学家后,按“确定”后确认选择。 3、 “确认”后执行以下步骤:

① 从苏格拉底到黑格尔依次检验其是否是此次被选中 ②若是此次被选中,进行以下步骤:

a 改变 表KUAIZI 和 表ZHEXUEJIA 中相应的字段: ZHEXUEJIA:

所属状态由F(Full)改为H(Hungry)

b执行PROG1,分配给这些饥饿的哲学家筷子,若左边有筷子,取之,并标识“拥有左筷子”;若右边有筷子,取之,并标识“拥有右筷子”。 改变表KUAIZI中筷子的状态为.T.(使用中),并标志相应的使用者桌号。

c若哲学家已分配两支筷子,改变桌面筷子的可视化(通过VISIBLE属性控制)

d 在3个时钟控件TIMER中挑选一个未用的,用于控制哲学家吃饭时间倒计时。

4、 时钟控件:

①若时间已经用完(TIMETEMP=0)则进行以下步骤

a修改表ZHEXUEJIA和表KUAIZI,置“拥有左筷子”、“拥有右筷子”为.F.,并改“所属状态”为F(Full),改变相应的筷子状态为.F.(闲) b取消复选框的选中状态,并置为可选

第 2 页 共 3 页

操作系统实验报告: 哲学家问题 管理系 2001级工程管理 朱毅 0701013

c改变桌面筷子的可视状态

d检验左邻座的左邻座状态是否为‘F’(Full),若不为F,说明左邻在等待,把筷子分配给他,用同样的方法处理右邻座。

e分配筷子后,判断该邻座是否拥有2支筷子,若拥有,改变表KUAIZI 和表ZHEXUEJIA 的相应字段,改变筷子的可视化,并激活一个未用的时钟用于控制该邻座的倒计时。

②若时间未用完,继续消耗时间 TIMETEMP=TIMETEMP-1

(3) 5个哲学家全部吃不上饭的情况:

当有4个或5个哲学家各自占有有一支筷子的时候会出现该情况。

实验小结:

本次实验按照题设要求完成相应的预定目标。通过本次实验中,我在以下方面的认识得以进一步的加强:

1、 通过本程序的编写加深了对死锁问题的认识,并体间接地验了解决的方法。

2、 加深了对程序中全局变量和局部变量区别的认识。 3、 对变量命名还比较凌乱,有待于进一步系统化。

管理科学与工程系 2001级 工程管理 朱毅 0701013 2003年12月12日

第 3 页 共 3 页

本文来源:https://www.bwwdw.com/article/g6df.html

Top