#中国计量学院操作系统课程设计(银行家算法+哲学家进餐) 下载本文

操作系统课程设计报告书

共享资源分配与银行家算法

哲学家进餐死锁问题及避免算法的实现

辅导老师:

班级: 姓名: 学号:

共享资源分配与银行家算法

一、 课程设计目的和意义

银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。为实现银行家算法,系统必须设置若干数据结构。所以,通过编写一个模拟动态资源分配的银行家算法程序,进一步深入理解死锁、产生死锁的必要条件、安全状态等重要概念,并掌握避免死锁的具体实施方法。

二、 方案设计及开发过程

1. 课程设计背景

此次课程设计的主要内容是模拟实现资源分配。同时要求编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并使用适当的算法,有效的防止和避免死锁的发生。

具体用银行家算法实现资源分配。要求如下:

(1) 设计一个3个并发进程共享3类不同资源的系统,进程可动态地申请资源和释放资源,系统按各进程的申请动态地分配资源。

(2) 设计用银行家算法和随机分配算法,实现资源分配的两个资源分配程序,应具有显示或打印各进程依次要求申请的资源数以及依次分配资源的情况。

(3) 确定一组各进程依次申请资源数的序列,在相同的情况下分别运行上述两种资源分配程序,观察运行结果。

2. 算法描述

程序一开始初始化个进程,打印出菜单,然后让用户选择随机算法还是银行家算法,然后分别进行不通的算法操作。 随机算法:

设进程I提出请求Request[N],则银行家算法按如下规则进行判断 (1) 如果Request[N]<=AVAILABLE,则转(2);否则,出错。 (2) 系统分配资源,修改相关数据: AVAILABLE=AVAILABLE-REQUEST ALLOCATION=ALLOCATION+REQUEST NEED=NEED-REQUES (3) 系统执行安全性检查 银行家算法:

设进程I提出请求Request[N],则银行家算法按如下规则进行判断。 (1)如果Request[N]<=NEED[I,N],则转(2);否则,出错。 (2)如果Request[N]<=AVAILABLE,则转(3);否则,出错。 (3)系统试探分配资源,修改相关数据: AVAILABLE=AVAILABLE-REQUEST ALLOCATION=ALLOCATION+REQUEST NEED=NEED-REQUEST

(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。

3. 数据结构

int need[10][3]; int max[10][3]; int allocation[10][3]; int available_temp[3]; int available[3]; int path[10]; int is_save;

//

//最大需求 //已分配

//可用,临时变量,用户尝试性分配request资源 //可用

//记录安全序列

//是否产生安全序列标示符

4. 主函数说明

//初始化need,max,allocation,available,及判断初始状态是否有安全序列

void init();

//打印出菜单

//打印安全序列及分配过程

//改程序核心函数,用深度优先搜索查找安全序列 //银行家算法入口 //随机分配算法入口 //主程序入口

void showMenu(); void print_sav_seq(); void dfs(int idx); void banker(); void ramdon(); int main();

5. 算法流程图

(主函数)