银行家算法问题

银行家算法问题
银行家算法问题

银行家算法问题

1、银行家算法中的数据结构

Availabel j k

=

(1)可利用资源向量Available:[]

式中:j01

≤≤-

j m

一个含有m个(类)元素的数组,每个元素代表一类可利用的资源数目。上式表示系统中现有的第j类资源可用数目为k个。

(2)最大需求矩阵Max:[,]

=

Max i j k

式中:i01

≤≤-

i n

j01

≤≤-

j m

n个进程中的每一个进程对m类资源的最大需求量,上式表示进程i需求第j 类资源的最大数目为k。

(3)分配矩阵Allocation:[,]

=

Allocation i j k

式中:i01

≤≤-

i n

j01

≤≤-

j m

n个进程中的每一个进程对m类资源的分配量,上式表示进程i已分配到第j 类资源的数目为k。

(4)需求矩阵Need:[,]

=

Need i j k

式中:i01

≤≤-

i n

j01

≤≤-

j m

n个进程中的每一个进程对m类资源的需求量,上式表示进程i对第j类资源的需求量为k个。

(5)三个矩阵间的关系

=-

Need i j Max i j Allocation i j

[,][,][,]

2、银行家算法

设Re i quest 是进程i P 的请求向量,如果Re []i quest j k =,当i P 发出资源请求后,系统按下述步骤进行检查。

(1)如果Re [][,]i quest j Need i j ≤,便转向步骤(2),否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。

(2)如果Re [][]i quest j Available j ≤便转向步骤(3),否则表示尚无足够资源,

i P 须等待。

(3)系统试探着把资源分配给进程i P ,并修改下面的数据结构中的值:

[][]Re []i Availabel j Availabel j quest j =-

[,][,]R e [

i A l l o c a t

i o n i j A l l o c a t i o n i j q u e s t

j

=+ [,][,]Re []i Need i j Need i j quest j =-

(4)系统执行安全性算法,检查此次资源分配后系统是否处于安全状态。

若安全,则分配给进程i P 资源,完成本次分配;若不安全,试探分配作废,恢复原来的资源分配状态,让进程i P 等待。 3、安全性算法 (1)设置两个向量:

工作向量Work ,它表示系统可提供给进程继续运行所需的各类资源数目,它含有m 个元素,在执行安全算法开始时,Work Available =。

Finish ,它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做

[]:Finish i false =;当有足够资源分配给进程时,再令[]:Finish i true =。

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

[]:F i n i s h

i f a l s e

= [,][]Need i j Work j ≤,若找到,执行步骤(3),否则,执行步骤(4)。

(3)当进程i P 获得资源后,可顺利执行直至完成,并释放出分配给它的资源,

执行如下操作:

[]:[][,];[]; Work j Work j Allocation i j Finish i true =+=Go to step 2

(4)如果所有进程的[]:Finish i true =都满足,则表示系统处于安全状态;否则系统处于不安全状态。

例:五个进程{}01234,,,,P P P P P 和三类资源{},,A B C ,0T 时刻资源分配情况

(1)0T 时刻安全性,存在一个安全序列{}13420,,,,P P P P P

(2)P 1请求资源:1Re (1,0,2)quest ,系统各按银行家算法进行检查:

1)11Re [1,0,2][1,2,2]quest Need ≤

2)11Re [1,0,2][3,3,2]quest Available ≤

3)系统假定可为P 1分配资源,并修改11;Available Allocation Need 和向量 4)再利用安全性算法检查此时系统是否安全:找到一个安全序列

{}13402,,,,P P P P P ,因此,系统安全。可以立即将P 1所申请的资源分给它。

(3414求向量4Re (3,3,0)quest ,系统按银行家算法进行检查,

1)44Re [3,3,0][4,3,1]quest Need ≤

2)4Re [3,3,0][2,3,0]quest Available ≤。 故,让P 4等待。

(4)0P 请求资源:在P 1提出请求,获得资源,但尚未释放资源时,P 0发出请

求向量0Re (0,2,0)quest ,系统按银行家算法进行检查,

1)00Re [0,2,0][7,4,3]quest Need ≤

2)01Re [0,2,0][2,3,0]quest Available ≤

3)系统暂时先假定可为0P 分配资源,并修改有关数据结构,如下图

4)进行安全性检查,可用资源[2,1,0]Available 已不能满足任何进程的需要,故系统进入不安全状态,此时系统不分配资源。

银行家算法习题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时刻的状态

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

银行家算法例题 系统中原有三类资源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,以此类推)

银行家算法课程设计

操作系统课程设计报告 题目:银行家算法 安全性算法 院(系):计算机科学与工程 专业:软件工程 班级:130608班 学生:姚骏川 学号:130608118 指导教师:姜虹 2015年12月28

目录 摘要 .............................................................................................................. 错误!未定义书签。 1 绪论 (1) 1.1前言 (1) 1.2研究意义 (1) 2 需求分析 (3) 2.1题目描述 (3) 2.2银行家算法 (3) 2.3基本要求 (3) 2.4目的 (3) 3 概要设计 (5) 3.1算法思路: (5) 3.2银行家算法步骤 (5) 3.3安全性算法步骤 (5) 3.4数据结构: (6) 4 详细设计 (8) 4.1主要函数的核心代码: (8) 4.2系统主要过程流程图 (8) 4.3银行家算法流程图 (9) 5 测试与分析 (10) 5.1测试数据 (10) 5.2银行家算法的演示 (10) 5.3分配资源由于大于可利用资源则失败。 (11) 5.4 增加一个作业得到不安全序列。 (11) 5.5分配资源由于大于最大资源则失败。 (12) 附录源程序清单 (15)

1 绪论 1.1前言 Dijkstra (1965)提出了一种能够避免死锁的调度算法,称为银行家算法。 它的模型基于一个小城镇的银行家,他向一群客户分别承诺了一定的贷款额度,每个客户都有一个贷款额度,银行家知道不可能所有客户同时都需要最大贷款额,所以他只保留一定单位的资金来为客户服务,而不是满足所有客户贷款需求的最大单位。 这里将客户比作进程,贷款比作设备,银行家比作系统。 客户们各自做自己的生意,在某些时刻需要贷款。在某一时刻,客户已获得的贷款和可用的最大数额贷款称为与资源分配相关的系统状态。一个状态被称为是安全的,其条件是存在一个状态序列能够使所有的客户均得到其所需的贷款。如果忽然所有的客户都申请,希望得到最大贷款额,而银行家无法满足其中任何一个的要求,则发生死锁。不安全状态并不一定导致死锁,因为客户未必需要其最大贷款额度,但银行家不敢抱这种侥幸心理。 银行家算法就是对每一个请求进行检查,检查如果满足它是否会导致不安全状态。若是,则不满足该请求;否则便满足。 检查状态是否安全的方法是看他是否有足够的资源满足一个距最大需求最近的客户。如果可以,则这笔投资认为是能够收回的,然后接着检查下一个距最大需求最近的客户,如此反复下去。 如果所有投资最终都被收回,则该状态是安全的,最初的请求可以批准。1.2研究意义 在多道程序系统中,多个进程的并发执行来改善系统的资源利用率,提高系统的吞吐量,但可能发生一种危险——死锁。所谓死锁(Deadlock),是指多个进程在运行过程中因争夺资源而造成的一种僵局(DeadlyEmbrace),当进程处于这种状态时,若无外力作用,他们都无法在向前推进。 要预防死锁,有摒弃“请求和保持”条件,摒弃“不剥夺”条件,摒弃“环

用银行家算法实现资源分配

南通大学 杏林学院 操作系统实验(用银行家算法实现资源分配)班级:计121 小组成员:方筱雯1213023008 周徐莲1213023014 指导老师:丁卫平

一:实验目的 为了了解系统的资源分配情况,假定系统的任何一种资源在任一时刻只能被一个进程使用。任何资源已经占用的资源只能由自己释放,而不能由其他进程抢占。当进程申请的资源不能满足时,必须等待。因此,只要资源分配算法能保证进程的资源请求,且不出现循环等待,则系统不会出现死锁。 编写模拟系统进行资源调度的程序,采用银行家算法,有效的避免死锁的产生。模拟进程的分配算法,了解死锁的产生和避免的办法。二:实验要求 (1):为了观察死锁产生和避免的情况,要求设计3到4个并发进程,共享系统的10个同类不可抢占的资源。各进程是动态进行资源的申请和释放。 (2):用银行家算法设计一个资源分配程序,运行这个程序,观察系统运行情况,并对系统运行的每一步进行显示。三:实验流程图

四:源程序 #include #include #include #include #define MaxNumber 100 //定义进程控制块 struct Process_struct{ int Available[MaxNumber]; //可利用资源数组 int Max[MaxNumber][MaxNumber]; //最大需求矩陈 int Allocation[MaxNumber][MaxNumber]; //分配矩陈 int Need[MaxNumber][MaxNumber]; //需求矩陈 int Request[MaxNumber][MaxNumber]; //M个进程还需要N类资源的资源量 int Finish[MaxNumber]; int p[MaxNumber]; }Process; int M,N; //M个进程,N类资源 int i,j,k,l=0; int Work[MaxNumber]; //可利用资源 int Pinput(); int Safe(); int Peques(); //进程输入 int Pinput() { int i,j; cout<<"输入进程的数目:\n"; cin>>M; cout<<"输入资源的种类:\n"; cin>>N; cout<<"输入每个进程最多所需的各类资源数,按照"<>Process.Max[i][j]; cout<<"输入每个进程已经分配的各类资源数,按照"<

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

操作系统之调度算法和死锁中的银行家算法习 题答案 集团文件发布号:(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)模拟一个银行家算法; (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

银行家算法例题

银行家算法例题 假定系统中有五个进程{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

实验二 银行家算法

实验四银行家算法 一、实验目的 1.理解死锁避免相关内容; 2.掌握银行家算法主要流程; 3.掌握安全性检查流程。 操作系统中的死锁避免部分的理论进行实验。要求实验者设计一个程序,该程序可对每一次资源申请采用银行家算法进行分配。 二、实验设备 PC机、windows 操作系统、VC++6.0 三、实验要求 本实验要求3学时完成。 1.设计多个资源(≥3); 2.设计多个进程(≥3); 3.设计银行家算法相关的数据结构; 4.动态进行资源申请、分配、安全性检测并给出分配结果。 5.撰写实验报告,并在实验报告中画出银行家算法和和安全性检查算法流程图。 四、预备知识 死锁避免定义:在系统运行过程中,对进程发出的每一个资源申请进行动态检查,并根据检查结果决定是否分配资源:若分配后系统可能发生死锁,则不予分配,否则予以分配。 由于在避免死锁的策略中,允许进程动态地申请资源。因而,系统在进行资源分配之前预先计算资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源分配给进程;否则,进程等待。其中最具有代表性的避免死锁算法是银行家算法。 1 系统安全状态 1)安全状态 所谓系统是安全的,是指系统中的所有进程能够按照某一种次序分配资源,并且依次地运行完毕,这种进程序列{ P1 ,P2 …Pn}就是安全序列。如果存在

这样一个安全序列,则系统是安全的。 并非所有的不安全状态都会转为死锁状态,但当系统进入不安全状态后,便有可能进入死锁状态;反之,只要系统处于安全状态,系统便可避免进入死锁状态。所以避免死锁的实质:系统在进行资源分配时,如何使系统不进入不安全状态。 2)安全状态之例 假设系统有三个进程,共有12台磁带机。各进程的最大需求和T0时刻已分配情况如下表: 答:T0时刻是安全的,因为存在安全序列:P2 →P1→ P3 不安全序列:P1→… P3→… P2→P3→P1 3)由安全状态向不安全状态的转换 如果不按照安全序列分配资源,则系统可能会由安全状态进入不安全状态。例如,在T0时刻以后,P3又请求1台磁带机,若此时系统把剩余3台中的1台分配给P3,则系统便进入不安全状态。因为,此时也无法再找到一个安全序列,例如,把其余的2台分配给P2,这样,在P2完成后只能释放出4台,既不能满足P1尚需5台的要求,也不能满足P3尚需6台的要求,致使它们都无法推进到完成,彼此都在等待对方释放资源,即陷入僵局,结果导致死锁。 2 利用银行家算法避免死锁 1)银行家算法中的数据结构 ①可利用资源向量Available。 这是一个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该

银行家算法

操作系统原理 课程设计 课程名称:死锁的避免;模拟银行家算法 专业班级:14级信管2班 组长:赵贤杰 成员:云靖宿熙隆 指导教师:付维娜 2016 / 2017 学年第 2 学期 【设计题目】

死锁的避免;银行家算法 【设计目标】 (1)进一步理解利用银行家算法避免死锁的问题; (2)在了解和掌握银行家算法的基础上,编制银行家算法通用程序,将调试结果显示在计算机屏幕上,再检测和笔算的一致性。 (3)理解和掌握安全序列、安全性算法 (4)了解和理解死锁; (5)理解利用银行家算法避免死锁的原理; (6)会使用某种编程语言。 【设计原理】 一、安全状态 指系统能按照某种顺序如(称为序列为安全序列),为每个进程分配所需的资源,直至最大需求,使得每个进程都能顺利完成。 二、银行家算法 假设在进程并发执行时进程i提出请求j类资源k个后,表示为Requesti[j]=k。系统按下述步骤进行安全检查: 如果Requesti≤Needi则继续以下检查,否则显示需求申请超出最大需求值的错误。 如果Requesti≤Available则继续以下检查,否则显示系统无足够资源,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 等待。 三、安全性算法 设置两个向量: ①工作向量Work: 它表示系统可提供给进程继续运行所需的各类资源数目,它含有m个元素,在执行安全算法开始时,Work∶=Available; ② Finish: 它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finish[i]∶=false; 当有足够资源分配给进程时,再令Finish[i]∶=true。 从进程集合中找到一个能满足下述条件的进程: ① Finish[i]=false; ② Need[i,j]≤Work[j];若找到,执行步骤(3),否则,执行步骤(4)。(3)当进程Pi获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行: Work[j]∶=Work[i]+Allocation[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. 银行家算法中的数据结构 (1)空闲资源向量Available。这是一个数组,它里面包括m个元素,这些元素都可以分别用来表示一种空闲的资源的数量的多少,系统中存储的这种全部空闲的资源的数量的多少为它的初始值,随该类资源的分配和回收,其数值发生动态地改变。如果Available[j]=K,那么,系统中当前存在K个Rj类资源。 (2)最大需求矩阵Max。Max矩阵是n×m维的,该矩阵定义了系统中n 个进程中的每一个进程对m类资源的最大需求。如果Max[i,j]=K,那么,进程i需要Rj类资源的最大数量的多少为K。 (3)分配矩阵Allocation。Allocation矩阵是n×m维的,该矩阵定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation[i,j]=K,那么,进程i当前已分得Rj类资源的数量的多少为K。 (4)需求矩阵Need。Need矩阵是n×m维的,该矩阵定义了所有进程仍然需求的各类资源数。如果Need[i,j]=K,那么,为了能够完成其任务,进程i还需要Rj类资源K个。 Need[i,j]=Max[i,j]-Allocation[i,j] 2. 银行家算法 设Requesti是进程Pi的请求向量,如果Requesti[j]=K,表示进程Pi需要 K个Rj类型的资源。当Pi发出资源请求后,系统按下述步骤进行检查:(1)如果Requesti[j]≤Need[i,j],便转向步骤2;否则认为出错,因为它所需要的资源数大于它仍然需要的最大值。

操作系统课程设计(银行家算法的模拟实现)

操作系统课程设计 (银行家算法的模拟实现) 一、设计目的 1、进一步了解进程的并发执行。 2、加强对进程死锁的理解。 3、用银行家算法完成死锁检测。 二、设计内容 给出进程需求矩阵C、资源向量R以及一个进程的申请序列。使用进程启动拒绝和资源分配拒绝(银行家算法)模拟该进程组的执行情况。 三、设计要求 1、初始状态没有进程启动。 2、计算每次进程申请是否分配,如:计算出预分配后的状态情况(安全状态、不安全状态),如果是安全状态,输出安全序列。 3、每次进程申请被允许后,输出资源分配矩阵A和可用资源向量V。 4、每次申请情况应可单步查看,如:输入一个空格,继续下个申请。 四、算法原理 1、银行家算法中的数据结构

(1)、可利用资源向量Available,这是一个含有m个元素的数组,其中的每个元素代表一类可利用资源的数目,其初始值是系统中所配置的该类全部资源的数目,其数值随该类资源的分配和回收而动态改变。如果Available[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] 2、银行家算法应用 模拟实现Dijkstra的银行家算法以避免死锁的出现,分两部分组成:一是银行家算法(扫描);二是安全性算法。 (1)银行家算法(扫描) 设Requesti是进程Pi的请求向量,如果Requesti[j]=K,表示进程Pi需要K个Ri类型的资源。当Pi发出资源请求后,系统按下述步骤进行检查: ①如果Requesti[j]<=Need[i,j],便转向步骤②;否则认为出错,

银行家算法-实验报告

淮海工学院计算机工程学院实验报告书 课程名:《操作系统原理》 题目:银行家算法 班级: 学号: 姓名:

一、实验目的 银行家算法是操作系统中避免死锁的典型算法,本实验可以加深对银行家算法的步骤和相关数据结构用法的更好理解。 实验环境 Turbo C 2.0/3.0或VC++6.0 实验学时 4学时,必做实验。 二、实验内容 用C语言编写一个简单的银行家算法模拟程序,用银行家算法实现资源分配。程序能模拟多个进程共享多种资源的情形。进程可动态地申请资源,系统按各进程的申请动态地分配资源。要求程序具有显示和打印各进程的某一时刻的资源分配表和安全序列;显示和打印各进程依次要求申请的资源数量以及为某进程分配资源后的有关资源数据的情况。 三、实验说明 实验中进程的数量、资源的种类以及每种资源的总量Total[j]最好允许动态指定。初始时每个进程运行过程中的最大资源需求量Max[i,j]和系统已分配给该进程的资源量Allocation[i,j]均为已知(这些数值可以在程序运行时动态输入),而算法中其他数据结构的值(包括Need[i,j]、Available[j])则需要由程序根据已知量的值计算产生。 四、实验步骤 1、理解本实验中关于两种调度算法的说明。 2、根据调度算法的说明,画出相应的程序流程图。 3、按照程序流程图,用C语言编程并实现。 五、分析与思考 1.要找出某一状态下所有可能的安全序列,程序该如何实现? 答:要找出这个状态下的所有可能的安全序列,前提是要是使这个系统先处于安全状态,而系统的状态可通过以下来描述: 进程剩余申请数=最大申请数-占有数;可分配资源数=总数-占有数之和; 通过这个描述来算出系统是否安全,从而找出所有的安全序列。 2.银行家算法的局限性有哪些?

银行家算法

银行家算法 一、实验目的:银行家算法是避免死锁的一种重要方法,通过编写一个简单的银行家算法程序,加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。 二、问题分析与设计: 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]=tru e。 (2)从进程集合中找到一个能满足下述条件的进程: ①Finish[i]=false ②Need

编程序模拟银行家算法

武汉理工大学华夏学院课程设计报告书 课程名称:操作系统原理 题目:编程序模拟银行家算法 系名:信息工程系 专业班级:软件1121 姓名:钟伟 学号:10212812120 指导教师:苏永红 2014年 6 月13 日

武汉理工大学华夏学院信息工程系 课程设计任务书 课程名称:操作系统原理课程设计指导教师:苏永红 班级名称:软件1121 开课系、教研室:软件与信息安全 一、课程设计目的与任务 操作系统课程设计是《操作系统原理》课程的后续实践课程,旨在通过一周的实践训练,加深学生对理论课程中操作系统概念,原理和方法的理解,加强学生综合运用操作系统原理、Linux系统、C语言程序设计技术进行实际问题处理的能力,进一步提高学生进行分析问题 和解决问题的能力,包含系统分析、系统设计、系统实现和系统测试的能力。 学生将在指导老师的指导下,完成从需求分析,系统设计,编码到测试的全过程。 二、课程设计的内容与基本要求 1、课程设计题目 编程序模拟银行家算法 2、课程设计内容 本课程设计要求在Linux操作系统,GCC编译环境下开发。 银行家算法是避免死锁的一种重要方法,本实验要求用用c/c++语言在Linux操作系统 环境下编写和调试一个简单的银行家算法程序。加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。 思想:将一定数量的资金供多个用户周转使用,当用户对资金的最大申请量不超过现存 资金时可接纳一个新客户,客户可以分期借款,但借款总数不能超过最大的申请量。银行家 对客户的借款可以推迟支付,但是能够使客户在有限的时间内得到借款,客户得到所有的借 款后能在有限的时间内归还。用银行家算法分配资源时,测试进程对资源的最大需求量,若 现存资源能满足最大需求就满足当前进程的申请,否则推迟分配,这样能够保证至少有一个 进程可以得到所需的全部资源而执行到结束,然后归还资源,若OS能保证所有进程在有限 的时间内得到所需资源则称系统处于安全状态。 3、设计报告撰写格式要求: 1设计题目与要求 2 设计思想 3系统结构 4 数据结构的说明和模块的算法流程图 5 使用说明书(即用户手册):内容包含如何登录、退出、读、写等操作说明 6 运行结果和结果分析(其中包括实验的检查结果、程序的运行情况) 7 自我评价与总结 8 附录:程序清单,注意加注释(包括关键字、方法、变量等),在每个模块前加注释;

银行家算法问题

银行家算法问题 1、银行家算法中的数据结构 (1)可利用资源向量Available : []Availabel j k = 式中:j 01j m ≤≤- 一个含有m 个(类)元素的数组,每个元素代表一类可利用的资源数目。上式表示系统中现有的第j 类资源可用数目为k 个。 (2)最大需求矩阵Max : [,]Max i j k = 式中: i 01i n ≤≤- j 01j m ≤≤- n 个进程中的每一个进程对m 类资源的最大需求量,上式表示进程i 需求第j 类资源的最大数目为k 。 (3)分配矩阵Allocation : [,]Allocation i j k = 式中: i 01i n ≤≤- j 01j m ≤≤- n 个进程中的每一个进程对m 类资源的分配量,上式表示进程i 已分配到第j 类资源的数目为k 。 (4)需求矩阵Need :[,]Need i j k = 式中: i 01i n ≤≤- j 01j m ≤≤- n 个进程中的每一个进程对m 类资源的需求量,上式表示进程i 对第j 类资源的需求量为k 个。 (5)三个矩阵间的关系 [,][,][,]Need i j Max i j Allocation i j =-

2、银行家算法 设Re i quest 是进程i P 的请求向量,如果Re []i quest j k =,当i P 发出资源请求后,系统按下述步骤进行检查。 (1)如果Re [][,]i quest j Need i j ≤,便转向步骤(2),否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。 (2)如果Re [][]i quest j Available j ≤便转向步骤(3),否则表示尚无足够资源, i P 须等待。 (3)系统试探着把资源分配给进程i P ,并修改下面的数据结构中的值: [][]Re []i Availabel j Availabel j quest j =- [,][,]R e [ i A l l o c a t i o n i j A l l o c a t i o n i j q u e s t j =+ [,][,]Re []i Need i j Need i j quest j =- (4)系统执行安全性算法,检查此次资源分配后系统是否处于安全状态。 若安全,则分配给进程i P 资源,完成本次分配;若不安全,试探分配作废,恢复原来的资源分配状态,让进程i P 等待。 3、安全性算法 (1)设置两个向量: 工作向量Work ,它表示系统可提供给进程继续运行所需的各类资源数目,它含有m 个元素,在执行安全算法开始时,Work Available =。 Finish ,它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做 []:Finish i false =;当有足够资源分配给进程时,再令[]:Finish i true =。 (2)从进程集合中找一个能满足下述条件的进程: [ ]:F i n i s h i f a l s e = [,][]Need i j Work j ≤,若找到,执行步骤(3),否则,执行步骤(4)。 (3)当进程i P 获得资源后,可顺利执行直至完成,并释放出分配给它的资源,

银行家算法的实现

实验四银行家算法的实现 1、实验目的 通过编写和调试银行家算法的模拟程序以加深对避免死锁方案的理解。熟悉银行家算法的分配思想。 2、实验要求 设计一个银行家方案。并编写模拟程序实现之。已知系统总共的资源数、进程名、进程已分配的资源、进程运行完毕最大最资源的需求量,以书上例题为例,分析某一时刻系统的安全状态,如果安全,输出安全序列。 3、算法描述 银行家算法中数据结构如下: n :系统中的进程个数; m :系统中的资源类数。 1)Available(m):现有资源向量。 Available(j)=k表示k个未分配的j类资源 2)Max(n,m):资源最大申请量矩阵。 Max(i,j)=k表示第i个进程在运行过程中对第j类资源的最大申请量为k。 3)Allocation(n,m):资源分配矩阵。 Allocation(i,j)=k表示进程i已占有k个j类资源。 4)Need(n,m):进程以后还需要的资源矩阵。 Need(i,j)=k表示进程i以后还需要k个第j类资源。 显然有Need[i,j]=Max[i,j]-Allocation[i,j]。 5)Request(n,m):进程申请资源矩阵。 Request(i,j)=k表示进程i申请k个第j类资源。 银行家算法思想如下: 若进程i申请资源,申请资源向量为Request(i),则有如下资源分配过程: 1)如果Request(i)〉Need(i),则报错返回。 2)如果Request(i)〉Avaliable,则进程i进入等待资源状态,返回。 3)假设进程进程i的申请已获批准,于是修改系统状态: Avaliable=Avaliable-Request(i) Allocation(i)=Allocation(i)+Request(i) Need(i)=Need(i)-Request(i) 4)调用安全状态检查算法。 设Work(m)为临时工作向量。初始时Work=Available。令N={1,2,……n}。 寻求j∈N 使其满足:Need(j)<=Work,若不存在这样的j则转至3)。 Work=Work+Allocation(j)N=N-{j} 转至1)。 如果N=空集则返回(系统安全)。如果N≠空集则返回(系统不安全)。 5)若系统处于安全状态,则将进程i申请的资源分配给进程i,返回。 6)若系统处于不安全状态,则不将进程i申请的资源分配给进程i,恢复原来的资源分配状态,让进程i等待。 Avaliable = Avaliable + Request(i) Allocation(i)=Allocation(i)-Request(i) Need(i)=Need(i)+ Request(i) 4、源程序代码

银行家算法C++代码

#include #include #include #define False 0 #define True 1 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;//作业的最大数 int N;//资源的最大数 int Sum[50]={0}; void init() { int i,j,flag; char ming; cout<<"请首先输入系统可供资源种类的数量:"; cin>>N; for(i=0;i>ming; name[i]=ming; cout<<"资源的数量:"; cin>>Sum[i]; } cout<>M; cout<<"请输入各进程的最大需求量("<>Max[i][j]; do{ flag=0; cout<<"请输入各进程已经申请的资源量("<>Allocation[i][j];

相关文档
最新文档