课程名称: 操作系统
设计题目: 银行家算法
院系: 信息技术学院
班级: 2011级1班
设计者: 111
学号: 201111010111111
指导教师: 11111
设计时间: 12.22——12.27
昆明学院。姓名:1111院(系):信息技术学院。
专业:计算机科学与技术学号:20111101011111
任务起止日期: 12月22日—12月27日。
课程设计题目: 银行家算法。
课程设计要求及任务描述:
1:对课程设计题目进行确定。
2:对所给资料进行整理和复习。
3:查找资料,并作出实验计划拟定。
4:根据资料类容画出流程图,分析流程图是否合理。
5:根据流程图写**程序,调试程序是否正确。
6:对调试结果进行分析,整理与修改。
7:进行答辩,整理课程设计内容。
8:写出完整的课程设计报告。
工作计划及安排:
第一天:查找资料,做好初步实验计划。
第二天:完成流程图设计。
第三天:完成**的编写。
第四天:调试程序。
第五天:完成实验报告。
指导教师签字。
年月日 课程设计(大作业)成绩。
学号:2011110101111姓名:1111指导教师:1111
课程设计题目:
银行家算法模拟。
完成情况总结:
本次设计中首先要解决的问题是对所做题目的理解。简单的文字描述总是生涩难懂,像银行家算法这一问题,如果单看题目要求往往不知如何下手,更不要谈下一步的设计过程。但倘若联系实际生活中银行贷款这一现象,再来看问题时,一切开始显得清晰,再加上老师的指点,便可以把自己究竟该作何工作搞清楚。
这也给我一启示,我们要解决的诸多问题都源自生活,若要解决它,联系实际是个很不错的选择。
明白了需求,下一个难点是如何通过软件实现。我所做的银行家算法这一题目,为了防止死锁,需要进行大量的判断,这也导致了一个问题,即在进行调试时,一旦出现问题,往往难以找到问题所在,针对这一问题,我编写了一些监测行(请参看源程序),这样能比较容易的找到问题的原因所在,这也是此次课程设计中在编程方面的一个收获。
通过本次课程设计,我对软件的开发的过程有了较为深入的了解,虽然只是对一个问题的简单模拟,但麻雀虽小五脏俱全,我对相关问题的解决已经有了一定的认识,对软件技术这门课程也有了更为透彻的感悟。本次课程设计,锻炼了我分析问题和解决问题的能力,为今后相关问题的解决积累了宝贵经验,也增强了自己的耐心与自信,受益匪浅。
指导教师评语:
成绩:填表时间指导教师签名:
课程设计(大作业)报告。
一、 题目分析。
银行家算法基本原理:操作系统在每一次分配之前都要进行以下操作,判断当前的资源请求是否安全,如果安全则实施分配,否则不予分配。
第1步:操作系统对提出资源请求的进程按所请求的资源数目实施预分配,修改剩余资源数组、资源分配矩阵和剩余资源请求矩阵;
第2步:将剩余资源数组代入剩余需求矩阵中与各元素进行比较,找到可以满足其所有资源需求的某个进程将它加入到安全序列中;
第3步:将该进程运行结束后释放的资源累加到剩余资源数组中;
第4步:再重复第两步。若所有进程都能够进入安全序列,则此次分配可以实施,否则系统将会处于不安全状态,因而不能实施分配。如果不能实施分配,则将系统还原到预分配之前的状态。
2. 设计步骤和方法。
1) 设计数据结构:剩余资源数组**ailable,如**ailable [j] =k表示资源rj现有k个。
2) 设计数据结构:最大资源请求矩阵max,如max [i][j] =k表示进程pi最多可申请k个类型为rj的资源。
3) 设计数据结构:资源分配矩阵allocation,定义每个进程现在所分配的各种资源类型的数量,如allocation [i][j] =k表示进程pi现在分配了k个类型为rj的资源。
4) 设计数据结构:剩余资源请求矩阵claim,定义每个进程还需要的剩余的资源数,如claim [i][j] =k表示进程pi还需要申请k个类型rj的资源。其中,claim [i][j] =max[i][j] -allocation[i][j]。
5) 设计函数完成功能:系统内资源总数已知、各进程对各类资源最大需求数目已知、已分配资源数目已知的前提下,某进程提出各类资源的需求量时能判断状态是否安全,以决定是否予以分配。
二、 程序设计。
1. 数据结构设计。
#include <>
int **ailable[100]; 可利用资源数组。
int max[50][100]; 最大需求矩阵。
int allocation[50][100]; 分配矩阵。
int need[50][100需求矩阵。
int request[50][100]; m个进程还需要n类资源的资源量。
int finish[50];
int p[50];
int m,n;
2. 函数设计。
int safe
int i,j,l=0;
int work[100]; 可利用资源数组。
for (i=0;i work[i]=**ailable[i];
for (i=0;i finish[i]=0;
for (i=0;i
if (l==m)
int main()
int i,j,mi;
cout<<"输入进程的数目:";
cin>>m;
cout<<"输入资源的种类:";
cin>>n;
cout<<"输入每个进程最多所需的各类资源数,按照"< for (i=0;i for(j=0;jcin>>max[i][j];
cout<<"输入每个进程已经分配的各类资源数,按照"< for (i=0;i
cout<<"请输入各个资源现有的数目:";
for (i=0;i cin>>**ailable[i];
safe();
while (1)
for (i=0;i
if (safe())
cout<<"同意分配请求~~~n";
elsefor (i=0;ifinish[i]=0;
char flag标志位。
cout<<"是否再次请求分配?是请按y/y,否请按n/n";
while (1)
if (flag=='y'||flag=='y')
continue;
else break;
3. 流程图。
4. **。
#include <>
int **ailable[100]; 可利用资源数组。
int max[50][100]; 最大需求矩阵。
int allocation[50][100]; 分配矩阵。
int need[50][100需求矩阵。
int request[50][100]; m个进程还需要n类资源的资源量。
int finish[50];
int p[50];
int m,n;
int safe
int i,j,l=0;
银行家算法课程设计
信息与计算科学。操作系统原理。课程设计报告。题目 银行家算法程序设计。班级 姓名 专业 银行家算法程序设计。1.绪论 2 2.需求分析 2 2.1 功能需求 2 2.2 数据需求 2 3.总体设计 2 3.1 功能模块设 2 3.2 系统设计方案 3 3.3 开发工具 4 4.详细设计 4 4.1 ...
银行家算法 课程设计
课程设计报告。操作系统原理。银行家算法。银行家算法。一 银行家算法原理。银行家算法是一种最有代表性的避免死锁的算法。要解释银行家算法,必须先解释操作系统安全状态和不安全状态。安全状态 如果存在一个由系统中所有进程构成的安全序列p1,pn,则系统处于安全状态。安全状态一定是没有死锁发生。不安全状态 不...
银行家算法课程设计
银行家算法的模拟。1 实验目的。银行家算法是避免死锁的一种重要方法。通过编写一个模拟动态资源分配的银行家算法程序,进一步深入理解死锁 产生死锁的必要条件 安全状态等重要概念,并掌握避免死锁的具体实施方法。2 任务及要求。编程序模拟银行家算法,要求能体现算法的全过程。3 算法及数据结构。3.1 算法的...