课程设计报告。
操作系统原理。
银行家算法。
银行家算法。
一、银行家算法原理。
银行家算法是一种最有代表性的避免死锁的算法。要解释银行家算法,必须先解释操作系统安全状态和不安全状态。
安全状态:如果存在一个由系统中所有进程构成的安全序列p1,…,pn,则系统处于安全状态。安全状态一定是没有死锁发生。
不安全状态:不存在一个安全序列。不安全状态不一定导致死锁。那么什么是安全序列呢?
安全序列:一个进程序列是安全的,如果对于每一个进程pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程pj (j < i ) 我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。
当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。
在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态,便可以避免发生死锁。
银行家算法的基本思想是分配资源之前,判断系统是否是安全的;若是,才分配。它是最具有代表性的避免死锁的算法。
二、算法的数据结构。
1)可利用资源向量**ailable
是个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目。如果**ailable[j]=k,则表示系统中现有rj类资源k个。
2)最大需求矩阵max
这是一个n×m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果max[i,j]=k,则表示进程i需要rj类资源的最大数目为k。
3)分配矩阵allocation
这也是一个n×m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果allocation[i,j]=k,则表示进程i当前已分得rj类资源的数目为k。
4)需求矩阵need
这也是一个n×m的矩阵,用以表示每一个进程尚需的各类资源数。如果need[i,j]=k,则表示进程i还需要rj类资源k个,方能完成其任务。
其中need[i,j]=max[i,j]-allocation[i,j]
三、程序流程图。
四、程序**。
#include
using namespace std;
#include<>
#include<>
#define false 0
#define true 1
int max[100][100]=;各进程所需各类资源的最大需求。
int **aliable[100]=;系统可用资源。
char name[100]=;资源的名称。
int allocation[100][100]=;系统已分配资源。
int need[100][100]=;还需要资源
int request[100]=;请求资源向量
int temp[100]=;存放安全序列
int work[100]=;存放系统可提供资源
int m=100;//作业的最大数为100
int n=100;//资源的最大数为100
void showdata()/显示资源矩阵
int i,j;
cout<<"系统目前可用的资源[**aliable]:"for(i=0;i cout< for (j=0;j cout< cout< cout<<"max allocation need"< cout<<"进程名 ";
for(j=0;j<3;j++)
cout< for(i=0;i
int changdata(int i)//进行资源分配。
int j;
for (j=0;j
return 1;
int safe()/安全性算法。
int i,k=0,m,apply,finish[100]=;
int j;
int flag=0;
work[0]=**aliable[0];
work[1]=**aliable[1];
work[2]=**aliable[2];
for(i=0;i
for(i=0;i
cout<<"系统是安全的!" for(i=0;i cout< return 0; void share()/利用银行家算法对申请资源对进行判定。 char ch; int i=0,j=0; ch='y'; cout<<"请输入要求分配的资源进程号(0-" cout<<"请输入进程 " for (j=0;j if(ch=='y') void addresources() //添加资源。 int n,flag; cout<<"请输入需要添加资源种类的数量:"; cin>>n; flag=n; n=n+n; for(int i=0;i showdata(); safe(); void delresources() //删除资源 char ming; int i,flag=1; cout<<"请输入需要删除的资源名称:"; do while(flag); for(int j=i;j n=n-1; showdata(); safe(); void addprocess() //添加作业。 int flag=m; m=m+1; cout<<"请输入该作业的最打需求量[max]" showdata(); safe(); int main()/主函数。 信息与计算科学。操作系统原理。课程设计报告。题目 银行家算法程序设计。班级 姓名 专业 银行家算法程序设计。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 ... 银行家算法的模拟。1 实验目的。银行家算法是避免死锁的一种重要方法。通过编写一个模拟动态资源分配的银行家算法程序,进一步深入理解死锁 产生死锁的必要条件 安全状态等重要概念,并掌握避免死锁的具体实施方法。2 任务及要求。编程序模拟银行家算法,要求能体现算法的全过程。3 算法及数据结构。3.1 算法的... 课程名称 操作系统。设计题目 银行家算法模拟。院系。班级。设计者。学号。指导教师。设计时间 2013.12.23 2013.12.27 昆明学院。姓名院 系 信息技术。专业 计算机科学与技术学号 任务起止日期 2013.12.23 2013.12.27 课程设计题目 银行家算法模拟 课程设计要求及任...银行家算法课程设计
银行家算法课程设计
银行家算法课程设计