搜档网
当前位置:搜档网 › 共享资源分配与银行家算法

共享资源分配与银行家算法

共享资源分配与银行家算法
共享资源分配与银行家算法

辽宁工业大学操作系统课程设计(论文)题目:共享资源分配与银行家算法

院(系):

专业班级:

学号:

学生姓名:

指导教师:

教师职称:讲师

起止时间:2009.4.27至2009.5.3

课程设计(报告)任务及评语

目录

第1章课程设计的目的与要求 (1)

1.1 课程设计目的 (1)

1.2 课程设计的实验环境 (1)

1.3 课程设计的预备知识 (1)

1.4 课程设计要求 (1)

第2章课程设计内容 (2)

2.1课程设计题目 (2)

2.2课程设计整体设计说明 (2)

2.2.1课程设计内容 (2)

2.2.2系统功能模块结构图.......................................................... 错误!未定义书签。

2.2.3数据结构设计及用法说明 (5)

2.2.4程序结构(画流程图) (6)

2.2.5各模块的功能 (8)

2.3程序源代码及注释 (8)

第3章课程设计总结 (16)

参考资料 (17)

第1章课程设计的目的与要求

1.1 课程设计目的

本课程设计是软件工程专业重要的实践性环节之一,是在学生学习完《操作系统》课程后进行的一次全面的综合练习。本课程设计的目的和任务:

1. 巩固和加深学生对操作系统课程的基本知识的理解和掌握

2. 利用C语言进行基本算法的设计

3. 掌握书写程序设计说明文档的能力

4. 提高运用相关算法解决实际问题的能力

1.2 课程设计的实验环境

硬件要求能运行Windows 2000/XP操作系统的微机系统。C语言程序设计及相应的开发环境。

1.3 课程设计的预备知识

熟悉C语言及C语言开发工具。

1.4 课程设计要求

1. 分析课程设计题目的要求

2. 写出详细设计说明

3. 编写程序代码,调试程序使其能正确运行

4. 设计完成的软件要便于操作和使用

5. 设计完成后提交课程设计报告

第2章课程设计内容

2.1问题的描述

在多道程序系统中,虽可借助于多个进程的并发执行,来改善系统的资源利用率,提高系统的吞吐量,但可能发生一种危险━━死锁。所谓死锁(Deadlock),是指多个进程在运行中因争夺资源而造成的一种僵局(Deadly_Embrace),当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。一组进程中,每个进程都无限等待被该组进程中另一进程所占有的资源,因而永远无法得到的资源,这种现象称为进程死锁,这一组进程就称为死锁进程。

2.2整体设计说明

2.2.1方案描述及开发过程

一、关于死锁的一些结论:

? 参与死锁的进程最少是两个(两个以上进程才会出现死锁)

? 参与死锁的进程至少有两个已经占有资源

? 参与死锁的所有进程都在等待资源

? 参与死锁的进程是当前系统中所有进程的子集

注:如果死锁发生,会浪费大量系统资源,甚至导致系统崩溃。

二、资源分类:

永久性资源:可以被多个进程多次使用(可再用资源)

l 可抢占资源

2 不可抢占资源

临时性资源:只可使用一次的资源;如信号量,中断信号,同步信号等(可消耗性资源)

“申请--分配--使用--释放”模式

三、产生死锁的四个必要条件:

1、互斥使用(资源独占)

每个个资源每次只能给一个进程使用

2、不可强占(不可剥夺)

资源申请者不能强行的从资源占有者手中夺取资源,资源只能由占有者自愿释放

3、请求和保持(部分分配,占有申请)

一个进程在申请新的资源的同时保持对原有资源的占有(只有这样才是动态申请,动态分配)

4、循环等待

存在一个进程等待队列

{P1 , P2 , … , Pn},

其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路

5、死锁的解决方案

5.1 产生死锁的例子

申请不同类型资源产生死锁

P1:

申请打印机

申请扫描仪

使用

释放打印机

释放扫描仪

P2:

申请扫描仪

申请打印机

使用

释放打印机

释放扫描仪

申请同类资源产生死锁(如内存)

设有资源R,R有m个分配单位,由n个进程P1,P2,…,Pn(n > m)共享。假设每个进程对R的申请和释放符合下列原则:

* 一次只能申请一个单位

* 满足总申请后才能使用

* 使用完后一次性释放

m=2,n=3

资源分配不当导致死锁产生

5.2死锁预防:

定义:在系统设计时确定资源分配算法,保证不发生死锁。具体的做法是破坏产生死锁的四个必要条件之一

①破坏“不可剥夺”条件

在允许进程动态申请资源前提下规定,一个进程在申请新的资源不能立即得到满足而变为等待状态之前,必须释放已占有的全部资源,若需要再重新申请

②破坏“请求和保持”条件

要求每个进程在运行前必须一次性申请它所要求的所有资源,且仅当该进程所要资源均可满足时才给予一次性分配

③破坏“循环等待”条件

采用资源有序分配法:把系统中所有资源编号,进程在申请资源时必须严格按资源编号的递增次序进行,否则操作系统不予分配。

6.安全状态与不安全状态

安全状态:

如果存在一个由系统中所有进程构成的安全序列P1,…Pn,则系统处于安全状态。一个进程序列{P1,…,Pn}是安全的,如果对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和,系统处于安全状态(安全状态一定是没有死锁发生的)

不安全状态:

不存在一个安全序列,不安全状态一定导致死锁。

2.2.2数据结构设计及用法说明

一、可利用资源向量矩阵AVAILABLE。这是一个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态地改变。如果AVAILABLE [j]= K,则表示系统中现有R类资源K个。

二、最大需求矩阵MAX。这是一个n*m的矩阵,用以表示每一个进程对m类资源的最大需求。如果MAX [i,j]=K,则表示进程i需要R类资源的数目为K。

三、分配矩阵ALLOCATION。这也是一个n*m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果ALLOCATION [i,j]=K,则表示进程i当前已分得R类资源的数目为K。

四、需求矩阵NEED。这也是一个n*m的矩阵,用以表示每一个进程尚需的各类资源数。如果NEED [i,j]=K,则表示进程i还需要R类资源K个,才能完成其任务。

上述矩阵存在下述关系:

NEED [i,j]= MAX[i,j]﹣ALLOCATION[i,j]

2.2.3程序结构(流程图)

银行家算法流程图

2.2.4各模块的功能及程序说明

一、初始化

由用户输入数据,分别对可利用资源向量矩阵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,则表示安全;否则系统不安全。

2.2.5程序结果

T0时刻的资源分配表

2.3程序源代码及注释

#include

using namespace std;

#define MAXPROCESS 50 /*最大进程数*/

#define MAXRESOURCE 100 /*最大资源数*/

int AVAILABLE[MAXRESOURCE]; /*可用资源数组*/

int MAX[MAXPROCESS][MAXRESOURCE]; /*最大需求矩阵*/

int ALLOCATION[MAXPROCESS][MAXRESOURCE]; /*分配矩阵*/

int NEED[MAXPROCESS][MAXRESOURCE]; /*需求矩阵*/

int REQUEST[MAXPROCESS][MAXRESOURCE]; /*进程需要资源数*/ bool FINISH[MAXPROCESS]; /*系统是否有足够的资源分配*/

int p[MAXPROCESS]; /*记录序列*/

int m,n; /*m个进程,n个资源*/

void Init();

bool Safe();

void Bank();

int main()

{

Init();

Safe();

Bank();

}

void Init() /*初始化算法*/

{

int i,j;

cout<<"\t---------------------------------------------------"<

cout<<"\t|| ||"<

cout<<"\t|| 银行家算法||"<

cout<<"\t|| ||"<

cout<<"\t|| 软件工程082班贾国臣||"<

cout<<"\t|| ||"<

cout<<"\t|| 081301044 ||"<

cout<<"\t---------------------------------------------------"<

cout<<"请输入进程的数目:";

cin>>m;

cout<<"请输入资源的种类:";

cin>>n;

cout<<"请输入每个进程最多所需的各资源数,按照"<

for(i=0;i

for(j=0;j

cin>>MAX[i][j];

cout<<"请输入每个进程已分配的各资源数,也按照"<

for(i=0;i

{

for(j=0;j

{

cin>>ALLOCATION[i][j];

NEED[i][j]=MAX[i][j]-ALLOCATION[i][j];

if(NEED[i][j]<0)

{

cout<<"您输入的第"<

j--;

continue;

}

}

}

cout<<"请输入各个资源现有的数目:"<

for(i=0;i

{

cin>>AVAILABLE[i];

}

}

void Bank() /*银行家算法*/

{

int i,cusneed;

char again;

while(1)

{

cout<<"请输入要申请资源的进程号(注:第1个进程号为0,依次类推)"<>cusneed;

cout<<"请输入进程所请求的各资源的数量"<

for(i=0;i

{

cin>>REQUEST[cusneed][i];

}

for(i=0;i

{

if(REQUEST[cusneed][i]>NEED[cusneed][i])

{

cout<<"您输入的请求数超过进程的需求量!请重新输入!"<

continue;

}

if(REQUEST[cusneed][i]>AVAILABLE[i])

{

cout<<"您输入的请求数超过系统有的资源数!请重新输入!"<

continue;

}

}

for(i=0;i

{

AVAILABLE[i]-=REQUEST[cusneed][i];

ALLOCATION[cusneed][i]+=REQUEST[cusneed][i];

NEED[cusneed][i]-=REQUEST[cusneed][i];

}

if(Safe())

{

cout<<"同意分配请求!"<

}

else

{

cout<<"您的请求被拒绝!"<

for(i=0;i

{

AVAILABLE[i]+=REQUEST[cusneed][i];

ALLOCATION[cusneed][i]-=REQUEST[cusneed][i];

NEED[cusneed][i]+=REQUEST[cusneed][i];

}

}

for(i=0;i

{

FINISH[i]=false;

}

cout<<"您还想再次请求分配吗?是请按y/Y,否请按其它键"<

cin>>again;

if(again=='y'||again=='Y')

{

continue;

}

break;

}

}

bool Safe() /*安全性算法*/

{

int i,j,k,l=0;

int Work[MAXRESOURCE]; /*工作数组*/ for(i=0;i

Work[i]=AVAILABLE[i];

for(i=0;i

{

FINISH[i]=false;

}

for(i=0;i

{

if(FINISH[i]==true)

{

continue;

}

else

{

for(j=0;j

{

if(NEED[i][j]>Work[j])

{

break;

}

}

if(j==n)

{

FINISH[i]=true;

for(k=0;k

{

Work[k]+=ALLOCATION[i][k];

}

p[l++]=i;

i=-1;

}

else

{

continue;

}

}

if(l==m)

{

cout<<"系统是安全的"<

cout<<"安全序列:"<

for(i=0;i

{

cout<

if(i!=l-1)

{

cout<<"-->";

}

}

cout<<""<

return true;

}

}

cout<<"系统是不安全的"<

return false;

}

第3章课程设计总结

操作系统是计算机系统中必不可少的系统软件。它是计算机系统中各种资源的管理者和各种活动的组织者、指挥者。银行家算法是为了使系统保持安全状态。我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。

银行家算法能保证系统时时刻刻都处于安全状态,但它要不断检测每个进程对各类资源的占用和申请情况,需花费较多的时间。

经过这次设计,让我基明白了银行家算法的基本原理,加深了对课堂上知识的理解,也懂得了如何让银行家算法实现。

参考资料

[1] 任爱华、王雷编:《操作系统实用教程》,清华大学出版社,54~70P

[2] 汤子嬴编:《计算机操作系统》,西安电子科技大学出版,64~87P

[3] 张尧学、史美林编:《计算机操作系统教程》,清华大学出版社,45~62P

操作系统答案

第一章 4. 试说明推动多道批处理系统形成和发展的主要动力是什么?答:不断提高资源利用率和系统吞吐量的需要。 6.试说明推动分时系统形成和发展的主要动力是什么?答:用户的需要,即对用户来说,更好的满足了人—机交互,共享主机以及便于用户上机的需求。 7.实现分时系统的关键问题是什么?应如何解决?答:关键问题:及时接收,及时处理对于及时接收只需在系统中设置一多路卡,多路卡作用是是主机能同时接收用户各个终端上输入的数据;对于及时处理,应使所有的用户作业都直接进入内存,在不长的时间内,能是每个作业都运行一次。 12.试从交互性、及时性以及可靠性方面,将分时系统与实时系统进行比较。答:分时系统是一种通用系统,主要用于运行终端用户程序,因而它具有较强的交互能力;而实时系统虽然也有交互能力,但其交互能力不及前者。实时信息系统对实用性的要求与分时系统类似,都是一人所能接受的等待时间来确定;而实时控制系统的及时性则是以控制对象所要求的开始截止时间和完整截止时间来确定的。实时系统对系统的可靠性要求比分时系统对系统的可靠性要求高。 13.OS 有哪几大特征?其最基本的特征是什么?答:并发性,共享性,虚拟性,异步性;其中最主要的是并发性,共享性第二章 5. 在操作系统中为什么要引入进程的概念?它会产生什么样的影响? 答:为了使程序在多道程序环境下能并发执行,并能对并发执行的程序加以控制和描述,而引入了进程的概念。 影响:使程序并发执行得以实现。 6. 试从动态性、并发性和独立性上比较进程和程序。

答:动态性是进程最基本的特性,可表现为由创建而产生,由调度而执行,因得不到资源而暂停执行,以及由撤销而消亡,因而进程有一定的生命期;而程序只是一组有序指令的集合,是静态实体。 并发性是进程的重要特征,同时也是OS的重要特征,引入进程的目的正是为了使其程序能和其他进程的程序并发执行,而程序是不能并发执行的。 独立性是指进程实体是一个能独立运行的单位,同时也是系统中独立获得资源和独立调度的基本单位。而对于未建立任何进程的程序,都不能作为一个独立的单位参加运行。 7. 试说明PCB的作用,为什么说PCB是进程存在的唯一标志? 答:PCB是进程实体的一部分,是操作系统中最重要的记录型数据结构。PCB 中记录了操作系统所需的用于描述进程情况及控制进程运行所需的全部信息。因而它的作用是使一个在多道程序环境下不能独立运行的程序,成为一个能独立运行的基本单位,一个能和其他进程并发执行的进程。 在进程的整个生命周期中,系统总是通过其PCB 对进程进行控制,系统是根据进程的PCB 而不是任何别的什么而感知到该进程的存在的,所以说,PCB 是进程存在的唯一标志。 16. 进程在运行时存在哪两种形式的制约?并举例说明之。 18. 同步机构应遵循哪些基本准则?为什么? 答:空闲让进忙则等待有限等待让权等待 31. 为解决并行所带来的死锁问题,在wait 操作中引入AND 条件,其基本思想是将进

银行家算法例题

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

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

南通大学 杏林学院 操作系统实验(用银行家算法实现资源分配)班级:计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<<"输入每个进程已经分配的各类资源数,按照"<

计算机操作系统考试重点1必考

计算机操作系统考试重点1必考

计算机操作系统考试重点1必考

答:实时操作系统是指系统能及时响应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有实时任务协调一致地运行。引入实时OS 是为了满足应用的需求,更好地满足实时控制领域和实时信息处理领域的需要。 13.OS有哪几大特征?其最基本的特征是什么?(掌握) 答:并发性、共享性、虚拟性和异步性四个基本特征;最基本的特征是并发性。21.试描述什么是微内核OS。(了解) 答:1)足够小的内核2)基于客户/服务器模式 3)应用机制与策略分离原理4)采用面向对象技术。 22.在基亍微内核结构的OS中,应用了哪些新技术?(掌握) 答:在基于微内核结构的OS 中,采用面向对象的程序设汁技术。 第二章进程管理 2. 画出下面四条语句的前趋图:S1=a:=x+y; S2=b:=z+1; S3=c:=a –b;S4=w:=c+1;(了解) 答:其前趋图为: 6.试从劢态性,并収性和独立性上比较迚程和程序? (掌握) 答:(1)动态性是进程最基本的特性,表现为由创建而产生,由调度而执行,因得不到资源而暂停执行,由撤销而消亡。进程有一定的生命期,而程序只是一组有序的指令集合,是静态实体。 (2)并发性是进程的重要特征,同时也是OS 的重要特征。引入进程的目的正是为了使其程序能和其它进程的程序并发执行,而程序是不能并发执行的。 (3)独立性是指进程实体是一个能独立运行的基本单位,也是系统中独立获得资源和独立调度的基本单位。对于未建立任何进程的程序,不能作为独立单位参加运行。 7.试说明PCB 的作用,为什么说PCB 是迚程存在的惟一标志?(掌握)答:PCB 是进程实体的一部分,是操作系统中最重要的记录型数据结构。作用是使一个在多道程序环境下不能独立运行的程序,成为一个能独立运行的基

银行家算法-实验报告

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

一、实验目的 银行家算法是操作系统中避免死锁的典型算法,本实验可以加深对银行家算法的步骤和相关数据结构用法的更好理解。 实验环境 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.数据结构的说明 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

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

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

一、实验目的 死锁会引起计算机工作僵死,因此操作系统中必须防止。本实验的目的在于让学生独立的使用高级语言编写和调试一个系统动态分配资源的简单模拟程序,了解死锁产生的条件和原因,并采用银行家算法有效地防止死锁的发生,以加深对课堂上所讲授的知识的理解。 二、实验内容 模拟实现银行家算法实现死锁避免。要求:初始数据(如系统在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
课程设计(论文)
题 目: 银行家算法 院 (系): 信息与控制工程系 专业班级: 姓 名: 学 号: 指导教师:
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 页脚内容

操作系统课后题答案 (1)

课本课后题部分答案 第一章 1.设计现代OS的主要目标是什么? 答:(1)有效性(2)方便性(3)可扩充性(4)开放性 2.OS的作用可表现在哪几个方面? 答:(1)OS作为用户与计算机硬件系统之间的接口 (2)OS作为计算机系统资源的管理者 (3)OS实现了对计算机资源的抽象 13.OS有哪几大特征?其最基本的特征是什么? 答:并发性、共享性、虚拟性和异步性四个基本特征;最基本的特征是并发性。14.处理机管理有哪些主要功能?它们的主要任务是什么? 答:处理机管理的主要功能是:进程管理、进程同步、进程通信和处理机调度; 进程管理:为作业创建进程,撤销已结束进程,控制进程在运行过程中的状态转换。进程同步:为多个进程(含线程)的运行______________进行协调。 通信:用来实现在相互合作的进程之间的信息交换。 处理机调度: (1)作业调度。从后备队里按照一定的算法,选出若干个作业,为他们分配运行所需的资源(首选是分配内存)。 (2)进程调度:从进程的就绪队列中,按照一定算法选出一个进程,把处理机分配给它,并设置运行现场,使进程投入执行。 15.内存管理有哪些主要功能?他们的主要任务是什么? 北京石油化工学院信息工程学院计算机系3/48 《计算机操作系统》习题参考答案余有明与计07和计G09的同学们编著 3/48 答:内存管理的主要功能有:内存分配、内存保护、地址映射和内存扩充。 内存分配:为每道程序分配内存。 内存保护:确保每道用户程序都只在自己的内存空间运行,彼此互不干扰。 地址映射:将地址空间的逻辑地址转换为内存空间与对应的物理地址。 内存扩充:用于实现请求调用功能,置换功能等。 16.设备管理有哪些主要功能?其主要任务是什么? 答:主要功能有: 缓冲管理、设备分配和设备处理以及虚拟设备等。 主要任务: 完成用户提出的I/O 请求,为用户分配I/O 设备;提高CPU 和I/O 设 备的利用率;提高I/O速度;以及方便用户使用I/O设备. 17.文件管理有哪些主要功能?其主要任务是什么? 答:文件管理主要功能:文件存储空间的管理、目录管理、文件的读/写管理和保护。文件管理的主要任务:管理用户文件和系统文件,方便用户使用,保证文件安全性。 第二章 1. 什么是前趋图?为什么要引入前趋图? 答:前趋图(Precedence Graph)是一个有向无循环图,记为DAG(Directed Acyclic Graph),用于描述进程之间执行的前后关系。

编程序模拟银行家算法

武汉理工大学华夏学院课程设计报告书 课程名称:操作系统原理 题目:编程序模拟银行家算法 系名:信息工程系 专业班级:软件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 附录:程序清单,注意加注释(包括关键字、方法、变量等),在每个模块前加注释;

银行家算法报告

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

操作系统课后题及答案

第一章 1 .设计现代OS 的主要目标是什么? 答:(1)有效性(2)方便性(3)可扩充性(4)开放性 2 .OS 的作用可表现在哪几个方面? 答:(1)OS作为用户与计算机硬件系统之间的接口 (2)OS 作为计算机系统资源的管理者 (3)OS 实现了对计算机资源的抽象 4 .试说明推动多道批处理系统形成和发展的主要动力是什么?答:主要动力来源于四个方面的社会需求与技术发展: (1)不断提高计算机资源的利用率; (2)方便用户; (3)器件的不断更新换代; (4)计算机体系结构的不断发展。 7 .实现分时系统的关键问题是什么?应如何解决?答:关键问题是当用户在自己的终端上键入命令时,系统应能及时接收并及时处理该命令,在用户能接受的时延内将结果返回给用户。 解决方法:针对及时接收问题,可以在系统中设置多路卡,使主机能同时接收用户从各个终端上输入的数据;为每个终端配置缓冲区,暂存用户键入的命令或数据。针对及时处理问题,应使所有的用户作业都直接进入内存,并且为每个作业分配一个时间片,允许作业只在自己的时间片内运行,这样在不长的时间内,能使每个作业都运行一次。 12 .试从交互性、及时性以及可靠性方面,将分时系统与实时系统进行比较。 答:( 1 )及时性:实时信息处理系统对实时性的要求与分时系统类似,都是以人所能接受的等待时间来确定;而实时控制系统的及时性,是以控制对象所要求的开始截止时间或完成截止时间来确定的,一般为秒级到毫秒级,甚至有的要低于100 微妙。 (2)交互性:实时信息处理系统具有交互性,但人与系统的交互仅限于访问系统中某些特定的专用服务程序。不像分时系统那样能向终端用户提供数据和资源共享等服务。 (3)可靠性:分时系统也要求系统可靠,但相比之下,实时系统则要求系统具有高度 的可靠性。因为任何差错都可能带来巨大的经济损失,甚至是灾难性后果,所以在实时系统中,往往都采取了多级容错措施保障系统的安全性及数据的安全性。 13 .OS 有哪几大特征?其最基本的特征是什么?答:并发性、共享性、虚拟性和异步性四个基本特征;最基本的特征是并发性。

银行家算法

实验十银行家算法 一、实验目的 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其中“状态”有就绪态、等待态和完成态。当进程在处于等待态时,表示系统不能满足该进程当前的资源申请。“资源需求总量”表示进程在整个执行过程

习题和答案汇总-给学生

第一章 课后习题: 1.设计现代OS的主要目标是什么? 答:方便性,有效性,可扩充性和开放性. 2. OS的作用可表现为哪几个方面? 答: a. OS作为用户与计算机硬件系统之间的接口(用户观点); b. OS作为计算机系统资源的管理者(设计者观点); c. OS作为扩充机器.(虚拟机观点) 13、OS具有哪几大特征?它的最基本特征是什么? a. 并发(Concurrence)、共享(Sharing)、虚拟(Virtual)、异步性(Asynchronism)。 b. 其中最基本特征是并发和共享。 25、从资源管理的角度看,操作系统具有哪些功能? 处理机管理、存储器管理、设备管理和文件管理。 补充习题: 1、在计算机系统中配置操作系统的主要目的是(A),操作系统的主要功能是管理计算机系统中的(B),其中包括(C)管理和(D)管理,以及设备管理和文件管理。这里的(C)管理主要是对进程进行管理。 A:(1)增强计算机系统的功能;(2)提高系统资源的利用率; (3)提高系统的运行速度;(4)合理地组织系统的工作流程,以提高系统吞吐量。 B:(1)程序和数据;(2)进程;(3)资源;(4)作业;(5)任务。 C、D:(1)存储器;(2)虚拟存储器;(3)运算器;(4)处理机;(5)控制器。 2、操作系统有多种类型: (1)允许多个用户以交互方式使用计算机的操作系统,称为(A); (2)允许多用户将若干个作业提交给计算机系统集中处理的操作系统称为(B); (3)在(C)的控制下,计算机系统能及时处理由过程控制反馈的数据,并做出响应。A、B、C:(1)批处理操作系统;(2)分时操作系统;(3)实时操作系统;(4)微机操作系统;(5)多处理机操作系统。 3、从下面关于操作系统的论述中,选出一条正确的论述:( ) (1)对批处理作业,必须提供相应的作业控制信息; (2)对于分时系统,不一定全部提供人机交互功能; (3)从响应角度看,分时系统与实时系统的要求相似; (4)采用分时操作系统的计算机系统中,用户可以独占计算机操作系统的文件系统;(5)从交互角度看,分时系统与实时系统相似。 4、操作系统是一种(A),在OS中采用多道程序设计技术,能有效地提高CPU、内存和I/O设备的(B),为实现多道程序设计需要有(C)。 A:(1)应用软件;(2)系统软件;(3)通用软件;(4)软件包。 B:(1)灵活性;(2)可靠性;(3)兼容性;(4)利用率。 C:(1)更大的内存(2)更快的CPU;(3)更快的外部设备;(4)更先进的终端。 5、操作系统是一种应用软件。() 6、分时系统中,时间片越小越好。() 7、多道程序设计是指在一台处理机上同一时刻运行多个程序。()

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

目录 一、设计目的 (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 能

银行家算法设计实验报告

银行家算法设计实验报告

银行家算法设计实验报告 一.题目分析 1.银行家算法: 我们可以把操作系统看做是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求资源相当于客户向银行家贷款。操作系统按银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程尚需求的资源量,若是系统现存的资源可以满足它尚需求的资源量,则按当前的申请量来分配资源,否则就推迟分配。 当进程在执行中继续申请资源时,先测试该进程申请的资源量是否超过了它尚需的资源量。若超过则拒绝分配,若没有超过则再测试系统尚存的资源是否满足该进程尚需的资源量,若满足即可按当前的申请量来分配,若不满足亦推迟分配。 2.基本要求: (1)可以输入某系统的资源以及T0时刻进程对资源的占用及需求情况的表项,以及T0时刻系统的可利用资源数。 (2)对T0时刻的进行安全性检测,即检测在T0时刻该状态是否安全。

(3)进程申请资源,用银行家算法对其进行检测,分为以下三种情况: A. 所申请的资源大于其所需资源,提示分配不合理不予分配并返回 B. 所申请的资源未大于其所需资源, 但大于系统此时的可利用资源,提 示分配不合理不予分配并返回。 C. 所申请的资源未大于其所需资源, 亦未大于系统此时的可利用资源,预 分配并进行安全性检查: a. 预分配后系统是安全的,将该进 程所申请的资源予以实际分配并 打印后返回。 b. 与分配后系统进入不安全状态,提示系统不安全并返回。 (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、进一步了解进程的并发执行。 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],便转向步骤②;否则认为出错,

相关主题