实验1银行家算法(1)

实 验 报 告

实验课程:

学生姓名: 学 号: 专业班级:

操作系统 20 级计算机科学与技术专业 班

2015年 月 日

实验一 银行家算法的模拟

一、实验目的

(1) 加深了解有关资源申请、避免死锁等概念。

(2) 体会和了解死锁和避免死锁的具体实施方法。

二、实验知识点

1.死锁的相关知识。

2.银行家算法。

3.系统安全性检查。

三、实验内容

1.设定系统提供资源的初始状况。

2.设定每次某个进程对各类资源的申请表示。

3.编制程序,依据银行家算法,决定其资源申请是否得到满足。

4.显示资源申请和分配时的变化情况。

四、设计理论描述

本设计的目的是通过编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效地防止和避免死锁地发生。要求如下:

(1) 模拟一个银行家算法;

(2) 初始化时让系统拥有一定的资源;

(3) 用键盘输入的方式申请资源;

(4) 如果预分配后,系统处于安全状态,则修改系统的资源分配情况;

(5) 如果预分配后,系统处于不安全状态,则提示不能满足请求,

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

银行家算法. 顾名思义是来源于银行的借贷业务,一定数量的本金要应多个客户的借贷周转,为了防止银行加资金无法周转而倒闭,对每一笔贷款,必须考察其是否能限期归还。在操作系统中研究资源分配策略时也有类似问题,系统中有限的资源要供多个进程使用,必须保证得到的资源的进程能在有限的时间内归还资源,以供其他进程使用资源。如果资源分配不得到就会发生进程循环等待资源,则进程都无法继续执行下去的死锁现象。

把一个进程需要和已占有资源的情况记录在进程控制中,假定进程控制块PCB其中“状态”有就绪态、等待态和完成态。当进程在处于等待态时,表示系统不能满足该进程当前的资源申请。“资源需求总量”表示进程在整个执行过程中总共要申请的资源量。显然,每个进程的资源需求总量不能超过系统拥有的资源总数, 银行算法进行资源分配可以避免死锁。

五、算法描述

1.银行家算法:

设进程i提出请求Request[n],则银行家算法按如下规则进行判断。

(1)如果Request[n]>Need[i,n],则报错返回。

(2)如果Request[n]>Available,则进程i进入等待资源状态,返回。

(3)假设进程i的申请已获批准,于是修改系统状态:

Available=Available-Request

Allocation=Allocation+Request

Need=Need-Request

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

2.安全性检查

(1)设置两个工作向量Work=Available;Finish[M]=False

(2)从进程集合中找到一个满足下述条件的进程,

Finish [i]=False

Need

如找到,执行(3);否则,执行(4)

(3)设进程获得资源,可顺利执行,直至完成,从而释放资源。

Work=Work+Allocation

Finish=True

GO TO 2

(4)如所有的进程Finish[M]=true,则表示安全;否则系统不安全。

六、算法运行界面

七、程序代码

#include

#include

#include

#define False 0

#define True 1

using namespace std;

int Max[100][100]={0};//各进程所需各类资源的最大需求

int Avaliable[100]={0};//系统可用资源

char name[100]={0};//资源的名称

int Allocation[100][100]={0};//系统已分配资源

int Need[100][100]={0};//还需要资源

int Request[100]={0};//请求资源向量

int temp[100]={0};//存放安全序列

int Work[100]={0};//存放系统可提供资源

int M=100;//进程的最大数为

int N=100;//资源的最大数为

void showdata()//显示资源矩阵

{

int i,j; cout

cout

cout

cout

cout

}

} for(j=0;j

int changdata(int i)//进行资源分配

{

}

int safe()//安全性算法

{

int i,k=0,m,apply,Finish[100]={0}; int j; int flag=0; Work[0]=Avaliable[0]; Work[1]=Avaliable[1]; Work[2]=Avaliable[2]; for(i=0;i

} } if (Finish[i]==False&&Need[i][j]

cout

cout

} for(i=0;i";

void share()//利用银行家算法对申请资源对进行判定

{

char ch; int i=0,j=0; ch='y'; cout

cin>>i;//输入须申请的资源号

cout>Request[j];//输入需要申请的资源

for (j=0;j

if(Request[j]>Need[i][j])//判断申请是否大于需求,若大于则出错 { } else { cout

if(Request[j]>Avaliable[j])//判断申请是否大于当前资源,若大于则

} { //出错 } cout

}

if(ch=='y') {

changdata(i);//根据进程需求量变换资源 showdata();//根据进程需求量显示变换后的资源 safe();//根据进程需求量进行银行家算法判断 }

}

int main()//主函数

{

int i,j,number,choice,m,n,flag;

char ming;

cout>n; N=n; for(i=0;i>ming; name[i]=ming; cout>number; Avaliable[i]=number;

cin>>m; M=m; cout>Max[i][j]; do{ } while(flag); flag=0; cout>Allocation[i][j]; if(Allocation[i][j]>Max[i][j]) flag=1; Need[i][j]=Max[i][j]-Allocation[i][j];

showdata();//显示各种资源

safe();//用银行家算法判定系统是否安全 return 1;

}

八、实验总结

„„

实 验 报 告

实验课程:

学生姓名: 学 号: 专业班级:

操作系统 20 级计算机科学与技术专业 班

2015年 月 日

实验一 银行家算法的模拟

一、实验目的

(1) 加深了解有关资源申请、避免死锁等概念。

(2) 体会和了解死锁和避免死锁的具体实施方法。

二、实验知识点

1.死锁的相关知识。

2.银行家算法。

3.系统安全性检查。

三、实验内容

1.设定系统提供资源的初始状况。

2.设定每次某个进程对各类资源的申请表示。

3.编制程序,依据银行家算法,决定其资源申请是否得到满足。

4.显示资源申请和分配时的变化情况。

四、设计理论描述

本设计的目的是通过编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效地防止和避免死锁地发生。要求如下:

(1) 模拟一个银行家算法;

(2) 初始化时让系统拥有一定的资源;

(3) 用键盘输入的方式申请资源;

(4) 如果预分配后,系统处于安全状态,则修改系统的资源分配情况;

(5) 如果预分配后,系统处于不安全状态,则提示不能满足请求,

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

银行家算法. 顾名思义是来源于银行的借贷业务,一定数量的本金要应多个客户的借贷周转,为了防止银行加资金无法周转而倒闭,对每一笔贷款,必须考察其是否能限期归还。在操作系统中研究资源分配策略时也有类似问题,系统中有限的资源要供多个进程使用,必须保证得到的资源的进程能在有限的时间内归还资源,以供其他进程使用资源。如果资源分配不得到就会发生进程循环等待资源,则进程都无法继续执行下去的死锁现象。

把一个进程需要和已占有资源的情况记录在进程控制中,假定进程控制块PCB其中“状态”有就绪态、等待态和完成态。当进程在处于等待态时,表示系统不能满足该进程当前的资源申请。“资源需求总量”表示进程在整个执行过程中总共要申请的资源量。显然,每个进程的资源需求总量不能超过系统拥有的资源总数, 银行算法进行资源分配可以避免死锁。

五、算法描述

1.银行家算法:

设进程i提出请求Request[n],则银行家算法按如下规则进行判断。

(1)如果Request[n]>Need[i,n],则报错返回。

(2)如果Request[n]>Available,则进程i进入等待资源状态,返回。

(3)假设进程i的申请已获批准,于是修改系统状态:

Available=Available-Request

Allocation=Allocation+Request

Need=Need-Request

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

2.安全性检查

(1)设置两个工作向量Work=Available;Finish[M]=False

(2)从进程集合中找到一个满足下述条件的进程,

Finish [i]=False

Need

如找到,执行(3);否则,执行(4)

(3)设进程获得资源,可顺利执行,直至完成,从而释放资源。

Work=Work+Allocation

Finish=True

GO TO 2

(4)如所有的进程Finish[M]=true,则表示安全;否则系统不安全。

六、算法运行界面

七、程序代码

#include

#include

#include

#define False 0

#define True 1

using namespace std;

int Max[100][100]={0};//各进程所需各类资源的最大需求

int Avaliable[100]={0};//系统可用资源

char name[100]={0};//资源的名称

int Allocation[100][100]={0};//系统已分配资源

int Need[100][100]={0};//还需要资源

int Request[100]={0};//请求资源向量

int temp[100]={0};//存放安全序列

int Work[100]={0};//存放系统可提供资源

int M=100;//进程的最大数为

int N=100;//资源的最大数为

void showdata()//显示资源矩阵

{

int i,j; cout

cout

cout

cout

cout

}

} for(j=0;j

int changdata(int i)//进行资源分配

{

}

int safe()//安全性算法

{

int i,k=0,m,apply,Finish[100]={0}; int j; int flag=0; Work[0]=Avaliable[0]; Work[1]=Avaliable[1]; Work[2]=Avaliable[2]; for(i=0;i

} } if (Finish[i]==False&&Need[i][j]

cout

cout

} for(i=0;i";

void share()//利用银行家算法对申请资源对进行判定

{

char ch; int i=0,j=0; ch='y'; cout

cin>>i;//输入须申请的资源号

cout>Request[j];//输入需要申请的资源

for (j=0;j

if(Request[j]>Need[i][j])//判断申请是否大于需求,若大于则出错 { } else { cout

if(Request[j]>Avaliable[j])//判断申请是否大于当前资源,若大于则

} { //出错 } cout

}

if(ch=='y') {

changdata(i);//根据进程需求量变换资源 showdata();//根据进程需求量显示变换后的资源 safe();//根据进程需求量进行银行家算法判断 }

}

int main()//主函数

{

int i,j,number,choice,m,n,flag;

char ming;

cout>n; N=n; for(i=0;i>ming; name[i]=ming; cout>number; Avaliable[i]=number;

cin>>m; M=m; cout>Max[i][j]; do{ } while(flag); flag=0; cout>Allocation[i][j]; if(Allocation[i][j]>Max[i][j]) flag=1; Need[i][j]=Max[i][j]-Allocation[i][j];

showdata();//显示各种资源

safe();//用银行家算法判定系统是否安全 return 1;

}

八、实验总结

„„


相关文章

  • 银行家算法实现资源分配
  • <操作系统>实验报告 实验二 银行家算法实现资源分配 一.实验目的: 在了解和掌握银行家算法的基础上,能熟练的处理课本例题中所给状态的安全性问题.能编制银行家算法通用程序,将调试结果显示在计算机屏幕上,再检测和笔算的一致性. 二 ...查看


  • 银行家算法避免死锁实验报告
  • 算法思想: 死锁的产生,必须同时满足四个条件,第一个为互斥条件,即一个资源每次只能由一个进程占用:第二个为请求和保持条件,指进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又被其他进程占有,此时请求进程阻塞,但又对自己已获得的其 ...查看


  • 网络安全应用实训报告
  • 安全技术及应用实训 项目二:网络安全应用实训项目 报告 学号:09011319 姓名:雷超 信息技术分院 长春职业技术学院 目 录 任务1 知识剖析 ............................................. ...查看


  • 银行家算法课程设计报告(毕业论文格式)
  • 操作系统课程设计报告 题目:银行家算法的设计与实现 院 (系): 专 业: 班 级: 学 生:学 号: 指导教师: 摘 要 Dijkstra的银行家算法是最有代表性的避免死锁的算法,该算法由于能用于银行系统现金贷款的发放而得名.银行家算法是 ...查看


  • 操作系统课程设计报告银行家算法
  • 操作系统课程设计报告 题目:银行家算法 院 (系): 计算机科学与工程 专 业: 班 级: 学 生: 学 号: 指导教师: 2010年 12月 银行家算法 摘 要 银行家算法是<计算机操作系统>课程中重点和难点之一,大部分学生可 ...查看


  • 09级计科专业毕业设计题目
  • 09级计算机科学与技术专业毕业设计题目指南 说明:1. 每个题目的选择人数最多不能超过2名同学,否则将退回重选.(如题目要求可多 人合作,则以题目要求为准),请各班级同学自行协调解决选题冲突问题. 2.学习委员上报题目请用EXCEL 表格, ...查看


  • 基于神经网络技术的商业银行信用风险评估
  • 1999年9月系统工程理论与实践第9期 基于神经网络技术的商业银行信用风险评估 王春峰, 万海晖, 张 维 (天津大学系统工程研究所, 天津300072) α 摘要: 研究了神经网络技术在商业银行信用风险评估中的应用. 实证结果表明, 与传 ...查看


  • 资本争夺人脸识别入口 佳都科技参股云从公司(15.4.16)
  • 本报记者 何晓晴 重庆报道 4月15日,中科院.佳都科技(600728.SH).杰翱资本.云从公司战略合作签约仪式暨人脸识别核心技术发布会召开,包括当地政府.产业资本以及近30家卖方机构参加. 此前一天,佳都科技发布公告称,公司与关联方新余 ...查看


  • 600个毕业设计题目
  • 1 实验室排课系统 2 电子技术题库系统升级设计及打包发布 3 电子技术基础辅助学习系统设计 4 电子技术基础辅助学习系统功能实现 5 检察院语音门户网站设计 6 185邮政客户服务中心构架分析 7 无纸水文信息记录仪研究与设计 8 中文语 ...查看


热门内容