中原工学院信息商务学院 操作系统课程设计报告
操 作 系 统 课 程 设 计
报 告
课程设计名称:银行家算法的模拟实现 专 业:计算机科与技术(软件工程方向)
班 级:软件***班 学 号:*** *
学生 姓名:锦超 9817 指导 教师:杨**
2010 年 6 月 26 日星期六
中原工学院信息商务学院 操作系统课程设计报告 目录 一、实验目的…………………………………………………………………2 二、实验内容…………………………………………………………………2 三、实验步骤…………………………………………………………………3 (1) 需求分析…………………………………………………………………….3 (2) 概要设计…………………………………………………………………….3 (3) 详细设计…………………………………………………………………….3 (4) 调试分析……………………………………………………………………11 (5) 测试结果……………………………………………………………………11 (6)使用说明:………………………………………………………………….15 四、实验总结…………………………………………………………………15 五、附录:程序清单………………………………………………………15 六、参考资料………………………………………………………………….26 - 1 -
中原工学院信息商务学院 操作系统课程设计报告 银行家算法的模拟实现 一、 实验目的
( 1)了解进程产生死锁的原因,了解为什么要进行死锁的避免。
(2)掌握银行家算法的数据结构,了解算法的执行过程,加深对银行家算法的 理解。 二、 实验内容
编制银行家算法通用程序 ,并检测所给状态的系统安全性 。 ( 1)银行家算法中的数据结构 :
可利用资源向量 Available。这是一个含有 m 个元素的数组 ,其中的 每一个元素代表一类可利用的资源数目 ,其初始值是系统中所配置的该类 全部可用资源的数目 ,其数值随该类资源的分配和回收而动态地改变 。Available[j]=K,则表示系统中现有 Rj 类资源 K 个 。
最大需求矩阵 Max 。这是一个 n*m 的矩阵 ,它定义了系统中 n 个进程 中的每一个进程对 m 类资源的最大需求 。如果 Max[i,j]=K,则表示进程 i 需要 Rj 类资源的最大数目为 K。
分配矩阵 Allocation。这也是一个 n*m 的矩阵 ,它定义了系统中每一 类资源 当前已分配给没一进程的资源数 。如果 Allocation[i ,j]=K ,则 表示 进程 i 当前已分得 Rj 类资源的数目为 K。
需求矩阵 Need。这也是一个 n*m 的矩阵 ,用以表示每一个进程尚需的 各类资源数 。如果 Need[i,j]=K,则表示进程 i 还需要 Rj 类资源 K 个 ,方 能完成其任务 。 上述三个矩阵存在如下关系 :
Need[i,j]= Max[i,j]- Allocation[i,j] 2)银行家算法
设 Request[i] 是进程 Pi 的请求向量 ,如果 Request[i ,j]=K,表示 进程 Pi 需要 K 个 Rj 类型的资源 。当 Pi 发出资源请求后 ,系统按下述步 骤进行检查 :
如果 Request[i ,j]<= Need[i,j] ,便转向步骤 2;否则认为出错 , 因为它所需要的资源数已超过它所宣布的最大值 。
- 2 -
中原工学院信息商务学院 操作系统课程设计报告 二、 实验步骤 (1)需求分析 编写银行家算法通用程序 ,并检测所给状态的系统安全性 ,可利用资 源向量 Available 。这是一个含有 N 个元素的数组 ,其中的每一个元素代 表一类可利用的资源数 ,其初始值是系统中所配置的该类全部可用资源的 数目 ,其数值随该类资源的分配和回收而动态地改变 。 最大需求矩阵 Max 这是一个 M*N 的矩阵 ,它定义了系统中 M 个进程中 的每一个进程对 N 类资源的最大需求 。如果 Max[i][j]=K ,则表示进程 i 需要 Rj 类资源的最大数目为 K。 分配矩阵 Allocation。这也是一个 n*m 的矩阵 ,它定义了系统中每一 类资源 当前已分配给没一进程的资源数 。如果 Allocation[i][j]=K ,则 表示 进程 i 当前已分得 Rj 类资源的数目为 K。 需求矩阵 Need。这也是一个 M*N 的矩阵 ,用以表示每一个进程尚需的 各类资源数 。如果 Need[i][j]= Max[i][j]- Allocation[i][j],则表示 i 个进程对 j 类资源需求量 ,方能完成其任务 。 设 Request[i] 是进程 Pi 的请求向量 ,如果 Request[i][j]=K,表示 进程 Pi 需要 K 个 Rj 类型的资源 。当 Pi 发出资源请求后 ,系统按下述步 骤进行检查 : 如果 Request[i][j]<= Need[i][j],便转向步骤 2;否则认为出错 , 因为它所需要的资源数已超过它所宣布的最大值 ,不能进行资源分配 。 (2)概要设计 从主函数开始,通过调用函数 system(\改变字体以颜色,密码函数 mima( ),进入银行家算法系统,通过调用 SLEEP()函数暂缓进入系统时间并清 屏,接着使用 while 循环语句,在循环语句中首先调用 version()显示主菜单, 选择菜单项目,调用函数 system(\清理屏幕,最后使用 switch 语句分别 调用函数:1、初始化可用资源和进程并检查安全性函数 init();2、增加资源, 并 检 测 安 全 性 函 数 addresources();3 、 删 除 资 源 , 并 检 测 安 全 性 函 数 delresources(); 4、修改资源,并检测安全性函数 changeresources(); 5、分 配 资 源 , 并 检 测 安 全 性 函 数 share();6 、 增 加 进 程 , 并 检 测 安 全 性 函 数 addprocess();7、删除进程,并检测安全性函数 delprocess() 0、退出系统系统 函数 exit(0)。 (3)详细设计 1、此程序调用函数所用的头文件和全局变量 #include
- 3 -