文档库 最新最全的文档下载
当前位置:文档库 › 操作系统—银行家算法—资源分配

操作系统—银行家算法—资源分配

操作系统—银行家算法—资源分配
操作系统—银行家算法—资源分配

江苏师范大学—操作系统实验

一、实验名称:资源分配管理

二、实验目的

模拟实现银行家算法,用银行家算法实现资源分配和安全性检查。通过本次实验,使学生加深对死锁概念的理解和掌握,并培养学生对操作系统开发的兴趣与应用能力。

三、实验内容

设计五个进程{P0,P1,P2,P3,P4}共享三类资源{A,B,C}的系统,{A,B,C}的资源数量分别为10,5,7。进程可动态地申请资源和释放资源,系统按各进程的申请动态地分配资源。在T0时刻的资源分配情况如下图所示:

(1)若进程P1请求资源,发出请求向量Request1(1,0,2),编写程序用银行家算法判断系统能否将资源分配给它;

(2)若进程P2提出请求Request2(0,1,0),用银行家算法程序验证系统能否将资源分配给它。

要求程序具有显示和打印各进程的某一时刻的资源分配表和安全序列。

//VC 6.0 调试通过

#include

#include

using namespace std;

//各种资源关系的数组

int MAX[5][3]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};

int Allocation[5][3]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};

int Need[5][3]={{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}};

int max[5][3];

int allocation[5][3];

int need[5][3];

int a=0,b=0,c=0;

int flag=1;

//记录安全序列

int safe[5]={0,0,0,0,0},temp=0;

//初始化函数。

int Init(){

a=3;b=3;c=2;

for (int i=0;i<5;i++)

for(int j=0;j<3;j++)

{

need[i][j]=Need[i][j];

max[i][j]=MAX[i][j];

allocation[i][j]=Allocation[i][j];

}

return 0;

}

//试分配资源

int Try_request(int i,int A,int B,int C)

{

if((A<=a)&&(B<=b)&&(C<=c)&&(A<=Need[i][0])&&(B<=Need[i][1])&&(C<=Need[i][2] ))

{

Allocation[i][0]=Allocation[i][0]+A;

Allocation[i][1]=Allocation[i][1]+B;

Allocation[i][2]=Allocation[i][2]+C;

Need[i][0]=Need[i][0]-A;

Need[i][1]=Need[i][1]-B;

Need[i][2]=Need[i][2]-C;

a=a-A;

b=b-B;

c=c-C;

return 1;

}

else

return 0;

}

//资源分配。

int Request(int i){

if((Need[i][0]<=a)&&(Need[i][1]<=b)&&(Need[i][2]<=c))

{

a=Allocation[i][0]+a;

b=Allocation[i][1]+b;

c=Allocation[i][2]+c;

return 1;

}

else

return 0;

}

//显示函数。

void display(int i)

{

if(i<=5)

cout<<" P"<

<

}

//恢复原来的数据。

void Recovery()

{

for(int i=0;i<5;i++)

for(int j=0;j<3;j++)

{

Need[i][j]=need[i][j];

MAX[i][j]=max[i][j];

Allocation[i][j]=allocation[i][j];

} a=3;b=3;c=2;flag=1;temp=0;

for( i=0;i<5;i++)

safe[i]=0;

}

void runing(){

cout<<" 进程Max Allocation Need Available"<

cout<<" 进程名 A B C A B C A B C A B C "<

display(0);

while(flag>0)

{

for(int i=0;i<5;i++)

{

if((safe[i]==0)&&(Request(i)==1)) //资源分配成功,并且已经分配!

{

temp++; safe[i]=temp;flag++;//如果分配则标志改变,不为1.

display(i);

}

}

if(flag==1) //标志,已经没有未分配的进程或无法完成分配

{

for(int i=0;i<5;i++)

{

if(safe[i]==0)

{flag++;cout<<"P"<

}

if(flag==1)

{

cout<<"存在安全序列,其中的一个安全序列是:";

for (int i=0;i<=5;i++)

for(int j=0;j<5;j++)

{

if(safe[j]==i)

cout<<"P"<

}

cout<

flag=0; //flag=0 退出while。

}

else

{cout<<"不存在安全序列"<

}

else

flag=1;

}

}

int main()

{

Init();

while(1)

{

cout<<"请输入试分配的进程ID,资源A B C(输入格式:0 0 0 0):"<

int W,A,B,C;

cin>>W>>A>>B>>C;

if(Try_request(W,A,B,C))

runing();

else

cout<<"无法完成分配!"<

Recovery();

}

return 0;

}

银行家算法例题

银行家算法例题 假定系统中有五个进程{P0,P1,P2,P3,P4} 和三类资源{A ,B,C},各种资源的数量分别为10、5、7,在T0 时刻的资源分配情况 (1)T0时刻的安全性 利用安全性算法对T0时刻的资源分配情况进行分析 (2)P1请求资源:P1发出请求向量Request1(1,0,2),系统按银行家算法进行检查 ①Request1(1,0,2)≤Need1(1,2,2) ②Request1(1,0,2)≤Available1(3,3,2) ③系统先假定可为P1分配资源,并修改Available ,Allocation1和Need1向量,由此形成 资源情况 进程 Max Allocation Need Available A B C A B C A B C A B C P0 7 5 3 0 1 0 7 4 3 3 3 2 P1 3 2 2 2 0 0 1 2 2 P2 9 0 2 3 0 2 6 0 0 P3 2 2 2 2 1 1 0 1 1 P4 4 3 3 0 0 2 4 3 1 资源情况 进程 Work A B C Need A B C Allocation A B C Work+Allocatio n A B C Finish P1 3 3 2 1 2 2 2 0 0 5 3 2 TRUE P3 5 3 2 0 1 1 2 1 1 7 4 3 TRUE P4 7 4 3 4 3 1 0 0 2 7 4 5 TRUE P2 7 4 5 6 0 0 3 0 2 10 4 7 TRUE P0 10 4 7 7 4 3 0 1 0 10 5 7 TRUE

银行家算法例题——四步走解题

银行家算法例题 系统中原有三类资源A、B、C和五个进程P1、P2、P3、P4、P5,A资源17,B资源5,C资源20。当前(T0时刻)系统资源分配和进程最大需求如下表。 1、现在系统T0时刻是否处于安全状态? 2、是否可以允许以下请求? (1)T1时刻:P2 Request2=(0,3,4) (2)T2时刻:P4 Request4=(2,0,1) (3)T3时刻:P1 Request1=(0,2,0) 注:T0 T1 T2 T3时刻是前后顺序,后一时刻是建立在前一时刻的基础上。

解:由题设可知Need=Max-Allocation AvailableA=17-(2+4+4+2+3)=2(原有-分配) 同理AvailableB=3,AvailableC=3 可得T0时刻资源分配表如下所示(表中数据顺序均为A B C): 1、判断T0时刻是否安全,需要执行安全算法找安全序列,过程如下表: T0时刻能找到一个安全序列{P4,P3,P2,P5,P1},故T0时刻系统处于安全状态。

2、判断T1 T2 T3时刻是否满足进程请求进行资源分配。 (1)T1时刻,P2 Request2=(0,3,4) //第一步判断条件 ①满足Request2=(0,3,4)<=Need2(1,3,4) ②不满足Request2=(0,3,4)<=Available(2,3,3) 故系统不能将资源分配给它,此时P2必须等待。 (2)T2时刻,P4 Request4=(2,0,1) //第一步判断条件①满足Request4=(2,0,1)<=Need4(2,2,1) ②满足Request4=(2,0,1)<=Available(2,3,3) //第二步修改Need、Available、Allocation的值 Available=Available-Request4= (0,3,2) Allocation4=Allocation4+Request4=(4,0,5) Need4=Need4-Request4=(0,2,0) //第三步执行安全算法,找安全序列 (注解:先写上work,其初值是系统当前进行试分配后的Available(0,3,2) ,找五个进程中Need小于work的进程,比如Need4<=Work满足,则将P4写在第一行的最前面,同时写出P4的Need和Allocation,以此类推)

多资源银行家算法

多资源银行家算法

多资源银行家算法 1.设计思想 当进程申请系统多种资源时,并且每种资源可以申请多个时,为 了避免死锁,采用多资源的银行家 算法。 本程序设计思想是采用试分配机制,当有请求提出时,先判读请 求是否合理,再试将资源分给它, 然后检查系统是否安全,若安全则 将试分配作为实际分配;若安全则 作废试分配,恢复原来的系统状态。 若安全则将试分配作为实际分配。 2.数据结构的说明 int M; //资源种类 int P; //进程数目 int flag;

struct process{ //虚拟PCB char name[10]; //进程名 int *H; //已分配资源 int *N; //尚需资源 int *R; //申请资源 int finish; }; H,R,N经过系统初始化后各自指向一个长度为M的int[M] 数组,数组的每一位代表一种资源 process *PRO=new process[P]; 。 进程由通过动态申请后由指针向的数组实现。

3各模块的算法流程图 初始化系统资源种类,进 程个数以及各进程使用, 即申请资源情况 PROCE[number].R[i]<= PROCE[number].N[i])

出错PROCE[n 将资源分配给PROCE[number] 试分配作PROCE[numb 是否试分配 source[i]=source[i ]-PROCE[number].R[N Y N Y N Y

4 程序清单 #include "iostream" 一次查找所 PROCESS[I]已分配资源 +source[]= 标记PROCESS[I]为 进程PROCESS[I] 是否标记完陈 PROCESS[I]尚需 资源 N Y

银行家算法报告和代码

1
课程设计(论文)
题 目: 银行家算法 院 (系): 信息与控制工程系 专业班级: 姓 名: 学 号: 指导教师:
2016 年 1 月 15 日
页脚内容 16

1
西安建筑科技大学华清学院课程设计(论文)任务书
专业班级: 学生姓名:
指导教师(签名):
一、课程设计(论文)题目
银行家算法:设计一个 n 个并发进程共享 m 个系统资源的程序以实现银行家算法。
二、本次课程设计(论文)应达到的目的
操作系统课程实践性比较强。课程设计是加强学生实践能力的一个强有力手段。课程设计要求学 生在完成程序设计的同时能够写出比较规范的设计报告。严格实施课程设计这一环节,对于学生基本 程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用。
本题目要达到目的:了解多道程序系统中,多个进程并发执行的资源分配。掌握银行家算法,了 解资源在进程并发执行中的资源分配情况。掌握预防死锁的方法,系统安全状态的基本概念。
三、本次课程设计(论文)任务的主要内容和要求(包括原始数据、技术参 数、设计要求等)
要求: 1)能显示当前系统资源的占用和剩余情况。 2)为进程分配资源,如果进程要求的资源大于系统剩余的资源,不与分配并且提示分配不成功; 3)撤销作业,释放资源。 编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法, 有效地防止和避免死锁的发生。 银行家算法分配资源的原则是:系统掌握每个进程对资源的最大需求量,当进程要求申请资源时, 系统就测试该进程尚需资源的最大量,如果系统中现存的资源数大于或等于该进程尚需求资源最大量 时,就满足进程的当前申请。这样就可以保证至少有一个进程可能得到全部资源而执行到结束,然后 归还它所占有的全部资源供其它进程使用。
四、应收集的资料及主要参考文献:
操作系统经典算法的编程实现资料非常丰富,可以在图书馆找书籍或在因特网上找资料,都很容 易找到,但是大部分代码是不全的,不能直接运行,希望大家只是把它当参考,编码还是自己做。
参考文献: 【1】汤小丹、梁红兵、哲凤屏、汤子瀛 编著.计算机操作系统(第三版).西安:西 安电子科技大学出版社,2007.5 【2】史美林编.计算机操作系统教程.北京:清华大学出版社,1999.11 【3】徐甲同编著.操作系统教程.西安:西安电子科技大学出版社,1996.8 【4】Clifford,A.Shaffer 编著.数决结构与算法分析(C++版).北京:电子工业出版 社,2005.7 【5】蒋立翔编著.C++程序设计技能百练.北京:中国铁道出版社,2004.1
五、审核批准意见
教研室主任(签字)
1 页脚内容

操作系统之调度算法和死锁中的银行家算法习题答案

操作系统之调度算法和死锁中的银行家算法习 题答案 集团文件发布号:(9816-UATWW-MWUB-WUNN-INNUL-DQQTY-

1. 有三个批处理作业,第一个作业 10:00 到达,需要执行 2 小时;第二个作业在10:10到达,需要执行 1 小时;第三个作业在 10:25 到达,需要执行 25 分钟。分别采用先来先服 务,短作业优先和最高响应比优先三种调度算法,各自的平均周转时间是多少?解: 先来先服务: (结束时间=上一个作业的结束时间+执行时间 周转时间=结束时间-到达时间=等待时间+执行时间) 按到达先后,执行顺序:1->2->3 短作业优先: 1)初始只有作业1,所以先执行作业1,结束时间是12:00,此时有作业2和3; 2)作业3需要时间短,所以先执行; 3)最后执行作业2 最高响应比优先:

高响应比优先调度算法既考虑作业的执行时间也考虑作业的等待时间,综合了先来先服务和最短作业优先两种算法的特点。 1)10:00只有作业1到达,所以先执行作业1; 2)12:00时有作业2和3, 作业2:等待时间=12:00-10:10=110m;响应比=1+110/60=2.8; 作业3:等待时间=12:00-10:25=95m,响应比=1+95/25=4.8; 所以先执行作业3 3)执行作业2 2. 在一单道批处理系统中,一组作业的提交时刻和运行时间如下表所示。试计算一下三种 作业调度算法的平均周转时间 T 和平均带权周转时间 W。 ( 1)先来先服务;( 2)短作业优先( 3)高响应比优先 解: 先来先服务: 作业顺序:1,2,3,4 短作业优先: 作业顺序:

银行家算法习题1

银行家算法流程

安全性算法流程图

银行家算法例题 1.假定系统中有4个进程1P ,2P ,3P ,4P , 3种类型的资源1R ,2R ,3R ,数量分别为9,3,6, 0T 时刻的资源分配情况如表2-1所示。 表2-1 T 0时刻的资源分配情况 试问: (1) T 0时刻是否安全? (2) T 0时刻以后,若进程P 2发出资源请求Request 2(1,0,1), 系统能否将资源分配给它? (3) 在进程P 2申请资源后,若P1发出资源请求Request 1(1,0,1), 系统能否将资源分配 给它? (4) 在进程P 1申请资源后,若P3发出资源请求Request 3(0,0,1), 系统能否将资源分配 给它? 2. 在银行家算法中,出现以下资源分配情况(见表2-2) 系统剩余资源数量=(3,3,2) (1) 该状态是否安全(给出详细的检查过程) (2) 如果进程依次有如下资源请求: P1:资源请求request (1,0,2) P2:资源请求request (3,3,0) P3:资源请求request (0,1,0) 则系统该如何进行资源分配才能避免死锁?

3.设系统中有3种类型的资源(A、B、C)和5个进程P1、P2、P3、P4、P5,A资源的数量为17,B资源的数量为5,C资源的数量为20。在T0时刻,系统状态见表2-3。系统采用银行家算法实现死锁避免。 (1)T0时刻是否为安全状态?若是,请给出安全序列 (2)在T0时刻,若进程P2请求资源(0,3,4),是否能实施资源分配?为什么? (3)在(2)的基础上,若进程P4请求资源(2,0,1),是否能实施资源分配? (4)在(3)的基础上,若进程P1请求资源(0,2,0),是否能实施资源分配? 4.某系统有R1、R2、R3共三种资源,在T0时刻P1、P2、P3、P4这四个进程对资源的占用和需求情况见表2-24,此时系统的可用资源矢量为(2,1,2)。试问: 1)将系统中各种资源总数和此刻各进程对各资源的需求数目用矢量或矩阵表示出来。2)如果此时进程P1和进程P2均发出资源请求矢量Request(1,0,1),为了保证系统的安全性,应如何分配资源给这两个进程?说明所采用策略的原因。 3)如果2)中两个请求立即得到满足后,系统此刻是否处于死锁状态? 5.考虑某个系统在表2-25时刻的状态

银行家算法报告

课程设计报告 题 目 银行家算法程序设计 课 程 名 称 操作系统课程设计 院 部 名 称 信息技术学院 专 业 计算机科学与技术 班 级 。。。。。。。。。。。。。。。。。。。。。。。 学 生 姓 名 。。。。 学 号 。。。。。。。。。。 课程设计地点 。。。。 课程设计学时 20 指 导 教 师 。。。 金陵科技学院教务处制

目录 目录………………………………………………………………………I 摘要…………………………………………………………………… II 引言 (1) 1、课程设计的目的和要求 (2) 2、课程设计的环境 (2) 3、课程设计的主要内容 (2) 3.1、项目名称 (2) 3.2、项目的主要内容 (2) 4、系统的组成及工作原理 (3) 4.1、系统主要过程的流程图 (3) 4.2、系统的设计方法 (4) 5、模块划分 (5) 5.1各模块间的调用关系 (6) 5.2安全性算法流程图 (7) 6、运行与测试结果 (8) 6.1欢迎界面 (8) 6.2初始化界面 (8) 6.3界面显示 (11) 6.4出错界面图 (12) 6.5程序运行结束 (12) 7、总结 (13) 8、课程设计的心得体会 (14) 9、参考文献 (15) 附录 (16) 摘要

随着时代的发展,对生活的追求越来越高,生活品质也越来越好。在学习方面的研究也越来越有成效。Dijkstra提出的银行家算法,是最具代表性的避免死锁的算法。加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。死锁的产生,必须同时满足四个条件,即一个资源每次只能由一个进程占用:第二个为等待条件,即一个进程请求资源不能满足时,它必须等待,但它仍继续保持已得到的所有其他资源:第四个为循环等待条件,系统中存在若干个循环等待的进程,即其中每一个进程分别等待它前一个进程所持有的资源。防止死锁的机构只能确保上述四个条件之一不出现,则系统就不会产生死锁。通过这个算法可用解决生活中的实际问题,如银行贷款等。 本文对如何用银行家算法来处理操作系统给进程分配资源做了详细的说明,包括需求分析、概要设计、详细设计、测试与分析、总结、源程序清单。首先做了需求分析,解释了什么是银行家算法,并指出它在资源分配中的重要作用。然后给出了银行家算法的概要设计,包括算法思路、步骤,以及要用到的主要数据结构、函数模块及其之间的调用关系等。在概要设计的基础上,又给出了详细的算法设计,实现概要设计中定义的所有函数,对每个函数写出核心算法,并画出了流程图。接着对编码进行了测试与分析。最后对整个设计过程进行了总结。 关键字:死锁安全序列银行家算法进程

(完整word版)操作系统 银行家算法

操作系统课程设计银行家算法

第一章引言 1.1 课程设计目地: 操作系统是计算机系统的核心系统软件,它负责控制和管理整个系统的资源并组织用户协调使用这些资源,使计算机高效的工作。课程设计的目的是综合应用学生所学知识,通过实验环节,加深学生对操作系统基本原理和工作过程的理解,提高学生独立分析问题、解决问题的能力,增强学生的动手能力。 第二章银行家算法描述 2.1 银行家算法简介: 银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。 要解释银行家算法,必须先解释操作系统安全状态和不安全状态。 安全状态:如果存在一个由系统中所有进程构成的安全序列P1,…,Pn,则系统处于安全状态。安全状态一定是没有死锁发生。 不安全状态:不存在一个安全序列。不安全状态不一定导致死锁。 那么什么是安全序列呢? 安全序列:一个进程序列{P1,…,Pn}是安全的,如果对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和。 2.2 银行家算法描述: 我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当

前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。 2.3银行家算法原理 2.3.1银行家算法的思路 先对用户提出的请求进行合法性检查,即检查请求的是不大于需要的,是否不大于可利用的。若请求合法,则进行试分配。最后对试分配后的状态调用安全性检查算法进行安全性检查。若安全,则分配,否则,不分配,恢复原来状态,拒绝申请。 2.3.2 银行家算法中用到的主要数据结构 可利用资源向量 int Available[j] j为资源的种类。 最大需求矩阵 int Max[i][j] i为进程的数量。 分配矩阵 int Allocation[i][j] 需求矩阵 int need[i][j]= Max[i][j]- Allocation[i][j] 申请各类资源数量 int Request i[j] i进程申请j资源的数量 工作向量 int Work[x] int Finish[y] 2.3.3 银行家算法bank() 进程i发出请求申请k个j资源,Request i[j]=k (1)检查申请量是否不大于需求量:Request i[j]<=need[i,j],若条件不符重新

《银行家算法的模拟实现》—实验报告

《银行家算法的模拟实现》 --实验报告 题目: 银行家算法的模拟实现 专业: 班级: 组员: 指导老师:

一、实验目的 死锁会引起计算机工作僵死,因此操作系统中必须防止。本实验的目的在于让学生独立的使用高级语言编写和调试一个系统动态分配资源的简单模拟程序,了解死锁产生的条件和原因,并采用银行家算法有效地防止死锁的发生,以加深对课堂上所讲授的知识的理解。 二、实验内容 模拟实现银行家算法实现死锁避免。要求:初始数据(如系统在T0时刻的资源分配情况、每一种资源的总数量)从文本文件读入,文件中给出最大需求矩阵Max、分配矩阵Allocation,在程序中求得需求矩阵Need和可利用资源向量Available。 三、实验分析过程 1、整个银行家算法的思路。 先对用户提出的请求进行合法性检查,再进行预分配,利用安全性检查算法进行安全性检查。 1)进程一开始向系统提出最大需求量. 2)进程每次提出新的需求(分期贷款)都统计是否超出它事先提出的最大需求量. 3)若正常,则判断该进程所需剩余剩余量(包括本次申请)是否超出系统所掌握的 剩余资源量,若不超出,则分配,否则等待 2、算法用到的主要数据结构和C语言说明。 (1)、可利用资源向量INT A V AILABLE[M] M为资源的类型。 (2)、最大需求矩阵INT MAX[N][M] N为进程的数量。 (3)、已分配矩阵INT ALLOCA TION[N][M] (4)、还需求矩阵INT NEED[N][N] (5)、申请各类资源数量int Request[x]; // (6)、工作向量int Work[x]; (7)、int Finish[y]; //表示系统是否有足够的资源分配给进程,0为否,非0为是 3、银行家算法(主程序) (1)、系统初始化。输入进程数量,资源种类,各进程已分配、还需求各资源数量,各资源可用数量等 (2)、输入用户的请求三元组(I,J,K),为进程I申请K个J类资源。 (3)、检查用户的请求是否小于还需求的数量,条件是K<=NEED[I,J]。如果条件不符则提示重新输入,即不允许索取大于需求量 (4)、检查用户的请求是否小于系统中的可利用资源数量,条件是K<=A V ALIABLE[I,J]。 如果条件不符则申请失败,阻塞该进程,重新进行进程动态资源申请(使用goto语句) (5)、进行资源的预分配,语句如下: A V ALIBLE[I][J]= A V ALIBLE[I][J]-K; ALLOCATION[I][J]= ALLOCATION[I][J]+K; NEED[I][J]=NEED[I][J]-K;

银行家算法

实验十银行家算法 一、实验目的 1、通过实验,加深对多实例资源分配系统中死锁避免方法——银行家算法的理解,掌握Windows环境下银行家算法的实现方法。 2、掌握进程安全性检查的方法及资源分配的方法。 二、实验内容 1、下面给出模拟银行家算法的部分代码,试补全安全性检查算法,实现程序基本功能。要求:若系统是安全的,则在屏幕上输出,并且在屏幕上输出系统安全序列。 2、通过以上程序回答下面给出的例子的问题,并验证所编写程序的正确性。 例:某系统有A、B、C、D 4类共5个进程(P0、P1、P2、P3、P4)共享,各进程对资源的需求和分配情况如表1所示。 表1 各进程对资源的需求和分配情况表 现在系统中A、B、C、D 4类资源分别还剩1、5、2、0个,请按银行家算法回答下列问题: 1)现在系统是否处于安全状态? 2)如果现在进程P1提出需要(0、4、2、0)个资源的请求,系统能否满足它的请求? 2、安全序列输出不完整,请修改代码; 3、当进程输入请求资源数,系统假如同意分配(即当下是安全的),增加显示当下剩余资源、已分配资源(矩阵)的功能;

4、将手动输入的矩阵信息保存于文件中,程序能够将矩阵自动读出,不用手动输入; 5、当申请资源反馈不安全的时候系统能为该进程重新计算资源数目,并且打印出此时若达到安全状态应该申请的最多资源为多少。 程序实现的界面如下图所示: 三、设计理论基础 银行家算法.顾名思义是来源于银行的借贷业务,一定数量的本金要应多个客户的借贷周转,为了防止银行加资金无法周转而倒闭,对每一笔贷款,必须考察其是否能限期归还。在操作系统中研究资源分配策略时也有类似问题,系统中有限的资源要供多个进程使用,必须保证得到的资源的进程能在有限的时间内归还资源,以供其他进程使用资源。如果资源分配不得到就会发生进程循环等待资源,则进程都无法继续执行下去的死锁现象。 把一个进程需要和已占有资源的情况记录在进程控制中,假定进程控制块PCB其中“状态”有就绪态、等待态和完成态。当进程在处于等待态时,表示系统不能满足该进程当前的资源申请。“资源需求总量”表示进程在整个执行过程

操作系统实验2银行家算法

操作系统课程设计报告课程名称:银行家算法 姓名:刘成启 学号:20101221149 班级:计算机1008班 指导老师:袁宁

共享资源分配与银行家算法 一、实验目的 [问题描述] 本题主要内容是模拟实现资源分配。银行家算法是避免死锁的一种重要方法,本实验要求用高级语言编写和调试一个简单的银行家算法程序。加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。 通过对这个算法的设计,让学生能够对书本知识有更深的理解,在操作和其它方面有更高的提升。 二、实验内容 [基本要求]具体用银行家算法实现资源分配。要求如下: (1) 设计一个3个并发进程共享3类不同资源的系统,进程可动态地申请资源和释放资源,系统按各进程的申请动态地分配资源。 (2) 设计用银行家算法,实现资源分配,应具有显示或打印各进程依次要求申请的资源数以及依次分配资源的情况。 (3) 确定一组各进程依次申请资源数的序列,输出运行结果。 [方案设计及开发过程] 1银行家分配算法,顾名思义是来源于银行的借贷业务,一定数量的本金要应多个客户的借贷周转,为了防止银行加资金无法周转而倒闭,对每一笔贷款,必须考察其是否能限期归还。在操作系统中研究资源分配策略时也有类似问题,系统中有限的资源要供多个进程使用,必须保证得到的资源的进程能在有限的时间内归还资源,以供其他进程使用资源。如果资源分配不得到就会发生进程循环等待资源,每个进程都无法继续执行下去的死锁现象。 把个进程需要和已占有资源的情况记录在进程控制中,假定进程控制块PCB其中“状态”有就绪态、等待态和完成态。当进程在处于等待态时,表示系统不能满足该进程当前的资源申请。“资源需求总量”表示进程在整个执行过程中总共要申请的资源量。显然,每个进程的资源需求总量不能超过系统拥有的资源总数, 银行算法进行资源分配可以避免死锁. 2.算法描述 银行家算法: 设进程I提出请求Request[N],则银行家算法按如下规则进行判断。 (1)如果Request[N]<=NEED[I,N],则转(2);否则,出错。 (2)如果Request[N]<=A V AILABLE,则转(3);否则,出错。 (3)系统试探分配资源,修改相关数据: A V AILABLE=A V AILABLE-REQUEST ALLOCATION=ALLOCATION+REQUEST NEED=NEED-REQUEST (4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。 3.安全性检查

操作系统实验四-银行家算法

银行家算法 xxx 711103xx 2012年5月21日一、实验目的 通过实验,加深对多实例资源分配系统中死锁避免方法——银行家算法的理解,掌握Windows环境下银行家算法的实现方法,同时巩固利用Windows API进行共享数据互斥访问和多线程编程的方法。 二、实验内容 1. 在Windows操作系统上,利用Win32 API编写多线程应用程序实现银行家算法。 2. 创建n个线程来申请或释放资源,只有保证系统安全,才会批准资源申请。 3. 通过Win32 API提供的信号量机制,实现共享数据的并发访问。 三、实验步骤(设计思路和流程图) 最主要的用以实现系统功能的应该有两个部分,一是用银行家算法来判断,二是用安全性算法来检测系统的安全性。 1、银行家算法 设Requesti是进程Pi的请求向量,如果Requesti[j]=K,表示进程Pi 需要K个Rj类型的资源。当Pi发出资源请求后,系统按下述步骤进行检查:

(1) 如果Requesti[j]≤Need[i,j],便转向步骤2;否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。 (2) 如果Requesti[j]≤Available[j],便转向步骤(3);否则,表示尚无足够资源,Pi须等待。 (3) 系统试探着把资源分配给进程Pi,并修改下面数据结构中的数值:Available[j]∶=Available[j]-Requesti[j]; Allocation[i,j]∶=Allocation[i,j]+Requesti[j]; Need[i,j]∶=Need[i,j]-Requesti[j]; (4) 系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。若安全,才正式将资源分配给进程Pi,以完成本次分配;否则,将本次的试探分配作废,恢复原来的资源分配状态,让进程Pi等待。 2、安全性算法 (1) 设置两个向量:①Work∶=Available; ②Finish (2) 从进程集合中找到一个能满足下述条件的进程:①Finish[i]=false; ②Need[i,j]≤Work[j];若找到,执行步骤(3),否则,执行步骤(4)。(3) 当进程Pi获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:Work[j]∶=Work[i]+Allocation[i,j]; Finish[i]∶=true; go to step 2; (4) 如果所有进程的Finish[i]=true都满足,则表示系统处于安全状态;否则,系统处于不安全状态。

软件工程课程设计-银行家算法

目录 一、设计目的 (1) 二、设计内容 (1) 三、设计原理 (1) 四、算法实现 (2) 五、流程图 (4) 六、源程序 (8) 七、运行示例及结果分析 (15) 八、心得体会 (19) 九、参考资料 (20)

银行家算法 一、设计目的 1)掌握死锁的产生的原因、产生死锁的必要条件和处理死锁的基本方法。 2)了解多道程序系统中,多个进程并发执行的资源分配。 3)掌握预防死锁的方法,系统安全状态的基本概念 4)理解死锁避免在当前计算机系统不常使用的原因。 5)掌握银行家算法,了解资源在进程并发执行中的资源分配策略。 二、设计内容 设计一个n个并发进程共享m个系统资源的系统。进程课动态申请资源和释放资源,系统按照进程的申请动态的分配资源。用银行家算法设计实现。 三、设计原理 我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。 为保证资金的安全,银行家规定: (1) 当一个顾客对资金的最大需求量不超过银行家现有的资金时就可接纳该顾客; (2) 顾客可以分歧贷款,但贷款的总数不能超过最大需求量; (3) 当银行家现有的资金不能满足顾客尚需的贷款数额时,对顾客的贷款可推迟支付,但总能使顾客在有限的时间里得到贷款; (4) 当顾客得到所需的全部资金后,一定能在有限的时间里归还所有的资金. 操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求

量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。 四、算法实现 (1)初始化这组进程的最大资源请求和依次申请的资源序列。把各进程已占用和需求资源情况记录在进程控制块中。假定进程控制块的内容包括:进程名,状态,当前申请量,资源需求总量,已占资源量,能执行完标志。其中,进程的状态有:就绪、等待和完成。当系统不能满足进程的资源请求时,进程处于等待态。资源需求总量表示进程运行过程中对资源的总的需求量。 已占资源量表示进程目前已经得到但还未归还的资源量。因此,进程在以后还需要的剩余资源量等于资源需要总量减去已占资源量。显然每个进程的资源需求总量不应超过系统拥有的资源总量。 (2)银行家算法分配资源的原则是:当某个进程提出资源请求时,假定先分配资源给它,然后查找各进程的剩余请求,检查系统的剩余资源量是否由于进程的分配而导致系统死锁。若能,则让进程等待,否则,让进程的假分配变为真分配。 a) 查找各进程的剩余请求,检查系统的剩余资源量是否能满足其中一进程。如果能,则转b)。 b) 将资源分配给所选的进程,这样,该进程已获得资源最大请求,最终能运行完成。标记这个进程为终止进程,并将其占有的全部资源归还给系统。 重复第a)步和第b)步,直到所有进程都标记为终止进程,或直到一个死锁发生。若所有进程都标记为终止进程,则系统的初始状态是安全的,否则为不安全的。若安全,则正式将资源分配给它,否则,假定的分配作废,让其等待。 数据结构: #define MAXPROCESS 50 /*最大进程数*/

银行家算法例子+答案

1、设系统中有3种类型的资源(A , B , C )和5个进程P1、P 2、P3 P4 P5, A 资源的数量为 17, B 资源的数量为5, C 资源的数量为20。在T o 时刻系统状 态见下表(T o 时刻系统状态表)所示。系统米用银行家算法实施死锁避免策 略。(12分) T o 时刻系统状态表 T0时刻系统状态表 (1) T o 时刻是否为安全状态?若是,请给出安全序列。 (2) 在T o 时刻若进程P2请求资源(0, 3, 4),是否能实施资源分配?为 什么? 满足P5的运行,在P5运行后,系统的状态为: 2 1 2 3 4 7 4 o 2 1 3 4 A 4 o 5 C A o o 6 V' 5 4 7 2 o 4 2 2 1 o o o o o o 同样的, 在 P5运行后,V ' (5, 4, 7)也大于等于 C-A 中P4所在的行(2, 2, 1),则能满 足P4的运行。P4运行后,系统的状态为: ⑷ 在(3) 的基; 础上, 若进程 P1 请求资源(o , 2, o ),是否能实施资源 分配?为什么 ,? 答: 当前 的系 统状态描述为: 5 5 9 2 1 2 3 4 7 5 3 6 4 o 2 1 3 4 C 4 o 11 A 4 o 5 C A o o 6 4 2 5 2 o 4 2 2 1 4 2 4 3 1 4 1 1 o R 17 5 2o V 2 3 3 (3)在(2)的基础上,若进程 分配?为什么? P4请求资源(2, o , 1),是否能实施资源 (1) 在To 时刻,由于V (2, 3, 3)大于等于(C-A )中P5所在行的向量(1 , 1 ,。),因此V 能

银行家算法详细流程

算法的实现 一、初始化 由用户输入数据,分别对可利用资源向量矩阵AVAILABLE、最大需求矩阵MAX、分配矩阵ALLOCATION、需求矩阵NEED赋值。 二、银行家算法 在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态,便可以避免发生死锁。 银行家算法的基本思想是分配资源之前,判断系统是否是安全的;若是,才分配。它是最具有代表性的避免死锁的算法。 设进程cusneed提出请求REQUEST [i],则银行家算法按如下规则进行判断。 (1)如果REQUEST [cusneed] [i]<= NEED[cusneed][i],则转(2);否则,出错。 (2)如果REQUEST [cusneed] [i]<= AVAILABLE[cusneed][i],则转(3);否则,出错。 (3)系统试探分配资源,修改相关数据: AVAILABLE[i]-=REQUEST[cusneed][i]; ALLOCATION[cusneed][i]+=REQUEST[cusneed][i]; NEED[cusneed][i]-=REQUEST[cusneed][i]; (4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。 三、安全性检查算法 (1)设置两个工作向量Work=AVAILABLE;FINISH (2)从进程集合中找到一个满足下述条件的进程, FINISH==false; NEED<=Work; 如找到,执行(3);否则,执行(4) (3)设进程获得资源,可顺利执行,直至完成,从而释放资源。 Work+=ALLOCATION; Finish=true; GOTO 2 (4)如所有的进程Finish= true,则表示安全;否则系统不安全。

计算机操作系统银行家算法实验报告

计算机操作系统实验报告 一、实验名称:银行家算法 二、实验目得:银行家算法就是避免死锁得一种重要方法,通过编写 一个简单得银行家算法程序,加深了解有关资源申请、避免死锁 等概念,并体会与了解死锁与避免死锁得具体实施方法。 三、问题分析与设计: 1、算法思路:先对用户提出得请求进行合法性检查,即检查请 求就是否大于需要得,就是否大于可利用得.若请求合法,则进 行预分配,对分配后得状态调用安全性算法进行检查。若安全, 则分配;若不安全,则拒绝申请,恢复到原来得状态,拒绝申请。 2、银行家算法步骤:(1)如果Requesti<or=Need,则转 向步骤(2);否则,认为出错,因为它所需要得资源数已超过 它所宣布得最大值。 (2)如果Request〈or=Available,则转向步骤(3);否则,表 示系统中尚无足够得资源,进程必须等待。 (3)系统试探把要求得资源分配给进程Pi,并修改下面数据结 构中得数值: Available=Available—Request[i]; Allocation=Allocation+Request; Need=Need-Request;

(4)系统执行安全性算法,检查此次资源分配后,系统就是否处于安全状态。 3、安全性算法步骤: (1)设置两个向量 ①工作向量Work。它表示系统可提供进程继续运行所需要得各类资源数目,执行安全算法开始时,Work=Allocation; ②布尔向量Finish。它表示系统就是否有足够得资源分配给进程,使之运行完成,开始时先做Finish[i]=false,当有足够资源分配给进程时,令Finish[i]=true。 (2)从进程集合中找到一个能满足下述条件得进程: ①Finish[i]=false ②Need<or=Work 如找到,执行步骤(3);否则,执行步骤(4)。 (3)当进程P获得资源后,可顺利执行,直至完成,并释放出分配给它得资源,故应执行: Work=Work+Allocation; Finish[i]=true; 转向步骤(2). (4)如果所有进程得Finish[i]=true,则表示系统处于安全状态;否则,系统处于不安全状态.

银行家算法的java编程实现

/*死锁避免和死锁检测模拟程序【银行家算 法】网络工程06-3班学号:310609040308*/ import java.util.*; public class TestTheBanker { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); TheBanker tb = new TheBanker(); tb.deadlockAvoidance();//死锁避免 int gate = 1; while(gate!=0){ tb.deadlockDetection();//死锁检测 System.out.println("如果您要继续分配资源请输入\"1\",退出请输入\"0\""); System.out.print("您输入的值为:"); gate = scanner.nextInt(); System.out.println(); } System.out.println("使用愉快!期待您下次使用!"); } } class TheBanker{ int m; int n; int[][] max; int[][] maxbak;//备份用 int[][] allocation; int[][] allocationbak;//备份用 int[][] need; int[][] needbak;//备份用 int[] available; int[] availablebak;//备份用 public TheBanker(){ Scanner s = new Scanner(System.in); System.out.println("初始化=============="); System.out.print("请依次输入系统中的【进程数】和【资源类型数】:"); m = s.nextInt(); n = s.nextInt(); max =new int[m][n];

银行家算法_实验报告

课程设计报告课程设计名称共享资源分配与银行家算法 系(部) 专业班级 姓名 学号 指导教师 年月日

目录 一、课程设计目的和意义 (3) 二、方案设计及开发过程 (3) 1.课题设计背景 (3) 2.算法描述 (3) 3.数据结构 (4) 4.主要函数说明 (4) 5.算法流程图 (5) 三、调试记录与分析 四、运行结果及说明 (6) 1.执行结果 (6) 2.结果分析 (7) 五、课程设计总结 (8)

一、程设计目的和意义 计算机科学与技术专业学生学习完《计算机操作系统》课程后,进行的一次全面的综合训练,其目的在于加深催操作系统基础理论和基本知识的理解,加强学生的动手能力.银行家算法是避免死锁的一种重要方法。通过编写一个模拟动态资源分配的银行家算法程序,进一步深入理解死锁、产生死锁的必要条件、安全状态等重要概念,并掌握避免死锁的具体实施方法 二、方案设计及开发过程 1.课题设计背景 银行家算法又称“资源分配拒绝”法,其基本思想是,系统中的所有进程放入进程集合,在安全状态下系统受到进程的请求后试探性的把资源分配给他,现在系统将剩下的资源和进程集合中其他进程还需要的资源数做比较,找出剩余资源能满足最大需求量的进程,从而保证进程运行完成后还回全部资源。这时系统将该进程从进程集合中将其清除。此时系统中的资源就更多了。反复执行上面的步骤,最后检查进程的集合为空时就表明本次申请可行,系统处于安全状态,可以实施本次分配,否则,只要进程集合非空,系统便处于不安全状态,本次不能分配给他。请进程等待 2.算法描述 1)如果Request[i] 是进程Pi的请求向量,如果Request[i,j]=K,表示进程Pi 需要K个Rj类型的资源。当Pi发出资源请求后,系统按下述步骤进行检查: 如果Requesti[j]<= Need[i,j],便转向步骤2;否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。 2)如果Requesti[j]<=Available[j],便转向步骤3,否则,表示尚无足够资源,进程Pi须等待。 3)系统试探着把资源分配给进程Pi,并修改下面数据结构中的数值: Available[j]:=Available[j]-Requesti[j]; Allocation[i,j]:=Allocation[i,j]+Requesti[j]; Need[i,j]:=Need[i,j]-Requesti[j];

计算机操作系统银行家算法实验报告

计算机操作系统实验报告 一、实验名称:银行家算法 二、实验目的:银行家算法是避免死锁的一种重要方法,通过编写 一个简单的银行家算法程序,加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。 三、问题分析与设计: 1、算法思路:先对用户提出的请求进行合法性检查,即检查请 求是否大于需要的,是否大于可利用的。若请求合法,则进行预分配,对分配后的状态调用安全性算法进行检查。若安全,则分配;若不安全,则拒绝申请,恢复到原来的状态,拒绝申请。 2、银行家算法步骤:(1)如果Requesti<or =Need,则转向步 骤(2);否则,认为出错,因为它所需要的资源数已超过它所宣 布的最大值。 (2)如果Request<or=Available,则转向步骤(3);否则,表示 系统中尚无足够的资源,进程必须等待。 (3)系统试探把要求的资源分配给进程Pi,并修改下面数据结构 中的数值: Available=Available-Request[i]; Allocation=Allocation+Request;

Need=Need-Request; (4)系统执行安全性算法,检查此次资源分配后,系统是否处于安 全状态。 3、安全性算法步骤: (1)设置两个向量 ①工作向量Work。它表示系统可提供进程继续运行所需要的各类资源数目,执行安全算法开始时,Work=Allocation; ②布尔向量Finish。它表示系统是否有足够的资源分配给进程,使之运行完成,开始时先做Finish[i]=false,当有足够资源分配给进程时,令Finish[i]=true。 (2)从进程集合中找到一个能满足下述条件的进程: ①Finish[i]=false ②Need

相关文档
相关文档 最新文档