银行家算法课程设计

发布 2022-10-01 22:29:28 阅读 4236

课程名称: 操作系统。

设计题目: 银行家算法模拟。

院系。班级。

设计者。学号。

指导教师。设计时间: 2013.12.23 ——2013.12.27

昆明学院。姓名院(系):信息技术。

专业:计算机科学与技术学号:任务起止日期:2013.12.23——2013.12.27

课程设计题目:银行家算法模拟

课程设计要求及任务描述:

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)设计函数完成功能:系统内资源总数已知、各进程对各类资源最大需求数目已知、已分配资源数目已知的前提下,某进程提出各类资源的需求量时能判断状态是否安全,以决定是否予以分配。

工作计划及安排:

12月23日:查找相关资料,明确实验目的和实验原理;

12月24日:绘制程序流程图;

12月25日:数据结构设计和函数设计;

12月26日:编写程序**,编写实验报告;

12月27日:实验答辩,打印实验报告。

指导教师签字。

年月日 课程设计(大作业)成绩。

学号姓名指导教师:

课程设计题目:银行家算法模拟。

完成情况总结:

我本次课程设计就是得用银行家算法来避免“死锁”。银行家算法就是一个分配资源的过程,使分配的序列不会产生死锁。此算法的中心思想是:

按该法分配资源时,每次分配后总存在着一个进程,如果让它单独运行下去,必然可以获得它所需要的全部资源,也就是说,它能结束,而它结束后可以归还这类资源以满足其他申请者的需要。

本次程序就是按照上面的思路展开的。基本功能都实现了,但是因为时间上的仓促,本课程设计的存在着以下不足:一、不能实现并发操作,即当总资源同时满足几个进程所需要的资源数时,这些进程不能同时进行,只能一一按进程顺序执行。

二、扫描进程顺序单一,只能按进程到来的顺序(即编号)来扫描,从而产生的安全顺序只能是在这个顺序的基础上产生的,而其实安全顺序是有多个的。三、对进程数和资源数进行的数量进行了限制。四、运行程序后,界面较差,进程数,所需要资源数,已分配资源数,能用资源数,不能一目了然。

指导教师评语:

成绩:填表时间指导教师签名:

课程设计(大作业)报告。

一、题目分析。

1.1银行家算法的思路。

先对用户提出的请求进行合法性检查,即检查请求的是不大于需要的,是否不大于可利用的。若请求合法,则进行试分配。最后对试分配后的状态调用安全性检查算法进行安全性检查。

若安全,则分配,否则,不分配,恢复原来状态,拒绝申请。

1.2 具体步骤。

1)可以输入某系统的资源以及t0时刻进程对资源的占用及需求情况的表项,以及t0时刻系统的可利用资源数。

2)对t0时刻的进行安全性检测,即检测在t0时刻该状态是否安全。

3)进程申请资源,用银行家算法对其进行检测,分为以下三种情况:

a. 所申请的资源大于其所需资源,提示分配不合理不予分配并返回。

b. 所申请的资源未大于其所需资源,但大于系统此时的可利用资源,提示分配不合理不予分配并返回。

c. 所申请的资源未大于其所需资源,亦未大于系统此时的可利用资源,预分配并进行安全性检查:

a. 预分配后系统是安全的,将该进程所申请的资源予以实际分配并打印后返回。

b. 与分配后系统进入不安全状态,提示系统不安全并返回。

4) 对输入进行检查,即若输入不符合条件,应当报错并返回重新输入。

二、程序设计。

数据结构设计。

2.1.1概要设计。

a. 可利用资源向量**ailable。这是一个含有n个元素的数组,其中的每一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和**而动态地改变。

如果**ailable[j]=k,则表示系统中现有rj类资源k个。

b. 最大需求矩阵max。这是一个m*n的矩阵,它定义了系统中n个进程中每一个进程对m类资源的最大需求。如果max[i,j]=k,则表示进程i需要rj类资源的最大数目为k。

c. 已分配矩阵allocation。这也是一个m*n的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。

如果allocation[i,j]=k,则表示进程i当前已分得rj类资源的数目为k。

d. 需求矩阵need。这也是一个n*m的矩阵,用以表示每一个进程尚需的各类资源数。如果need[i,j]=k,则表示进程i还需要rj类资源k个,方能完成其任务。

e. 工作数组work.。这是一个含有n个元素的数组,它代表可以提供分配的资源数,初始值是**ailable中的数值,随着资源的**,它的值也会改变,公式是work[i]=work[i]+allocation[i]。

2.1.2程序模块划分。

1) 数据的初始化:

根据提示输入最大需求矩阵(max),可利用资源量(**ailable),已分配矩阵(allocation)所需的数据。

2) 输出所对应的矩阵:

根据输入的数据输出对应的矩阵,并且计算出需求矩阵(need),将完整的算法需要的数据呈现给操作者。

3) 试分配:

根据操作者所输入的进程号已经请求,对系统进行时分配。

4) 安全测试:

当试分配完成时可进行安全性测试,当进程间是安全的时候则可以输出相应的安全序列。如果错误,则可以回到数据的初始化状态。

5) 数据判断:

当输入的数据不符合规定时,可以对该数据进行判断,不符合条件重新输入,例如:if(!(0<=in&&in<=t-1)),在程序中,用于判断所输入的进程号是否满足要求,如果不满足要求通过该语句输出“cout<<"该进程不存在,重新输入"<2.2函数设计。

void input();用于输入的函数。

void print();用于输出显示矩阵的函数。

void tryfenpei(int i);/试分配函数。

void checksafe(int x);/安全检测函数。

void refenpei(int i);/恢复数据函数。

通过switch语句对所调用的函数进行判断。

switch(choice)

2.3 程序流程图。

数据初始化流程图。

安全性流程图。

2.4 **。

#include <>

#define m 10资源类型数。

#define n 50进程数。

void input用于输入的函数。

void print用于输出显示矩阵的函数。

void tryfenpei(int i试分配函数。

void checksafe(int x安全检测函数。

void refenpei(int i恢复数据函数。

/定义初始化数组。

int **ailable[m可利用资源向量

max[n][m最大需求矩阵。

allocation[n][m已分配矩阵。

need[n][m需求矩阵

request[m申请各类资源数量。

int c,t资源数和进程数。

int in用户选择的进程号。

void mainmain函数。

int choice选择操作序号。

char ch='y是否要继续操作。

cout<<"输入资源类型数:";

cin>>c;

cout<<"输入进程数:";

cin>>t;do

if(ch=='y'||ch=='y')

cout<<"银行家算法"

银行家算法课程设计

信息与计算科学。操作系统原理。课程设计报告。题目 银行家算法程序设计。班级 姓名 专业 银行家算法程序设计。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 算法的...