当前位置:文档之家› osos操作系统报告,银行家算法,存储器

osos操作系统报告,银行家算法,存储器

osos操作系统报告,银行家算法,存储器
osos操作系统报告,银行家算法,存储器

实验三死锁及银行家算法

1.实验目的

(1)理解操作系统中产生死锁的原因及死锁状态。

(2)掌握银行家算法。

(3)能够运用银行家算法分析是否会发生死锁以及处理资源分配请求。

2.实验内容和步骤

(1)用C/C++语言定义银行家算法中的基本数据结构,包括资源向量Available ,最大需求矩阵Max、分配矩阵Allocation和需求矩阵Need,资源请求向量Request,工作向量Word,完成向量Finish。

(2)用C/C++或Java语言实现银行家算法和安全性检查算法。

(3)根据以下条件,用(2)中实现的算法进行实验,说明是否应该满足进程的资源请求。

进程

Max Allocation

A B C A B C

P0 7 5 3 0 1 0 P1 3 2 2 2 0 0 P2 9 0 2 3 0 2 P3 2 2 2 2 1 1 P4 4 3 3 0 0 2 进程以此发出以下资源请求:

P1:Request 1(1,0,2)

P4:Request 4(3,3,0)

P0:Request 0(0,2,0)

是否能够满足,程序应能输出每步的执行过程及最终结果。

三、实验代码

#include

#define P_NUM 5

#define S_NUM 3

int Max[P_NUM][S_NUM],Allocation[P_NUM][S_NUM],Need[P_NUM][S_NUM];

int Available[S_NUM],Request[S_NUM];

int Work[S_NUM],Finish[P_NUM],CurrentProcessId=-1,Arrange[P_NUM],CurrentId=0; FILE *fpr,*fpw;

int times=0;

void init()

{

int i=0,j=0;

for(i=0;i

for(j=0;j

scanf("%d",&Max[i][j]);

}

for(j=0;j

scanf("%d",&Allocation[i][j]);

Need[i][j]=Max[i][j]-Allocation[i][j];

}

Finish[i]=0;

}

for(j=0;j

scanf("%d",&Available[j]);

}

}

void allocation()

{

int j=0,reasonable=1;

if(CurrentProcessId>-1 && CurrentProcessId

printf("P%d Requests :( ",CurrentProcessId);

for(j=0;j

Need[CurrentProcessId][j]=Need[CurrentProcessId][j]-Request[j];

Allocation[CurrentProcessId][j]=Allocation[CurrentProcessId][j]+Request[j];

Available[j]=Available[j]-Request[j];

printf("%d ",Request[j]);

if(Need[CurrentProcessId][j]<0 || Available[j]<0)reasonable=0;

}

printf(")\n");

if(reasonable==0){

UnAllocation();

printf("The Request is not reasonable! The below table is same with the top table! \n");

}

}

}

int UnAllocation()

{

int j=0;

if(CurrentProcessId>-1 && CurrentProcessId

for(j=0;j

Need[CurrentProcessId][j]=Need[CurrentProcessId][j]+Request[j];

Allocation[CurrentProcessId][j]=Allocation[CurrentProcessId][j]-Request[j];

Available[j]=Available[j]+Request[j];

}

}

}

void safeCheck()

{

int j=0,processNo=0,times=0;

for(j=0;j

Work[j]=Available[j];

}

processNo=meetCommand();

if(processNo<0)

{

UnAllocation();

printf("this state is not safty!\n");

}else{

printf("Assign source in sequence :");

for(j=0;j

printf("→P%d",Arrange[j]);

}

printf("\n\n\n\n\n");

}

CurrentProcessId=-1;

for(j=0;j

Finish[j]=0;

Arrange[j]=0;

}

}

int meetCommand()

{

int meet=0,finish=1,i=0,j=0,maxUnFinish=0;

for(i=0;i

if(Finish[i]==0){

finish=0;

maxUnFinish=i;

}

}

if(finish==1)return 0;

for(i=0;i

if(Finish[i]==0){

meet=0;

for(j=0;j

if(Need[i][j]>Work[j])meet=-1;

}

if(meet==0 )

{

Finish[i]=1;

printCheckInfo(i);

for(j=0;j

Work[j]=Work[j]+Allocation[i][j];

}

Arrange[CurrentId]=i;

CurrentId++;

meetCommand();

}

if(i==maxUnFinish && meet==-1)return -1;

}

}

return 0;

}

void printInfo(){

int i=0,j=0;

printf("┌───────┬────────┬─────────┬─────────┬────────┐\n");

printf("││Max │Allocation │Need │Available │\n");

printf("│processID ├────────┼─────────┼─────────┼────────┤\n");

printf("││ A B C │ A B C │ A B C │ A B C │\n");

printf("├───────┼────────┼─────────┼─────────┼────────┤\n");

for(i=0;i

printf("│P%d │",i);

for(j=0;j

printf(" %d ",Max[i][j]);

}

printf("│");

for(j=0;j

printf("%d ",Allocation[i][j]);

}

printf("│");

for(j=0;j

printf("%d ",Need[i][j]);

}

printf(" │");

if(i==0){

for(j=0;j

printf("%d ",Available[j]);

}

printf(" │\n");

}

if(i>0)printf(" │\n");

}

printf("└───────┴────────┴─────────┴─────────┴────────┘\n");

}

int printCheckInfo(int i){

int j=0,allFinsh=1;

if(times==0){

printf("┌───────┬────────┬─────────┬─────────┬────────┐\n");

printf("││Work │Allocation │Need ││\n");

printf("│processID ├────────┼─────────┼─────────┤States │\n");

printf("││ A B C │ A B C │ A B C ││\n");

printf("├───────┼────────┼─────────┼─────────┼────────┤\n");

times++;

}

printf("│P%d │",i);

for(j=0;j

if(Work[j]>9)printf(" %d ",Work[j]);

if(Work[j]<10)printf(" %d ",Work[j]);

}

printf("│");

for(j=0;j

printf("%d ",Allocation[i][j]);

}

printf("│");

for(j=0;j

printf("%d ",Need[i][j]);

}

printf(" │");

for(j=0;j

printf("%d ",Finish[j]);

allFinsh*=Finish[j];

}

printf(" │\n");

if(allFinsh==0)printf("├───────┼────────┼─────────┼─────────┼────────┤\n");

if(allFinsh> 0)printf("└───────┴────────┴─────────┴─────────┴────────┘\n");

}

main()

{

int j=0;

char comeOn;

fpr = fopen("banker.txt","r");

fpw = fopen("outcoming.txt","w");

printf("程序运行结果如下:\n");

init();

printInfo();

allocation();

safeCheck();

scanf("\n%c",&comeOn);

while(comeOn=='y'|| comeOn=='Y'){

printInfo();

scanf("%d",&CurrentProcessId);

for(j=0;j

scanf("%d",&Request[j]);

}

allocation();

times=0;

CurrentId=0;

safeCheck();

scanf("\n%c",&comeOn);

}

}

四、实验总结

通过本次实验用C/C++语言定义银行家算法中的基本数据结构,包括资源向量Available ,最大需求矩阵Max、分配矩阵Allocation和需求矩阵Need,资源请求向量Request,工作向量Word,完成向量Finish。用C/C++或Java语言实现银行家算法和安全性检查算法。我理解了操作系统中产生死锁的原因及死锁状态,并且熟练掌握了银行家算法。还能够运用银行家算法分析是否会发生死锁以及处理资源分配请求。这次实验,让我收获很大,虽然实验原理很简单,但是在编写代码的过程中遇到了不少的问题,在两个小时之内已经完成的大体代码的编写,但是之中存在不少的问题,让我知道了,千万不能眼高手低,理论与实践需要相结合。最后,经过这次实验,使我更加熟悉了c语言,更善于运用其,给我收获到了许多。

实验四存储器管理

1.实验目的

(1)了解存储器管理的基本概念和基本方法。

(2)理解页式、段式存储管理方式。

(3)理解并掌握页表、段表结构及相应的地址变换机制。

2.实验内容

(1)用C/C++或Java语言定义页式或段式存储管理的基本数据结构,包括以数组形式表示的存储器空间,页表或段表,页式或段式的地址结构(如下所示)。

页式地址结构:

页号页内地址

段式地址结构:

段号段内地址

(2)用C/C++或Java语言实现页式或段式存储分配和回收算法,以及相应的地址变换算法。

(3)利用(1)和(2)中的结果,演示存储管理过程。

三、实验代码

#include

#define M 40

int N;

struct Pro {

int num,time;

};

int Input(int m,Pro p[M]) {

cout<<"请?输?入?实害?际ê页?数簓:";

do{

cin>>m;

if(m>M)cout<<"数簓目?太?多à,?请?重?试?"<

else break;

}

while(1);

cout<<"请?输?入?各÷页?面?号?:";

for(int i=0;i

cout<<"第台?<

cin>>p[i].num;

p[i].time=0;

}

return m;

}

void print(Pro *page1)//打洙?印?当獭?前°的?页?面?

{

Pro *page=new Pro[N];

page=page1;

for(int i=0;i

cout<

cout<

int Search(int e,Pro *page1 ) {

Pro *page=new Pro[N];

page=page1;

for(int i=0;i

if(e==page[i].num)

return i;

return -1;

}

int Max(Pro *page1) {

Pro *page=new Pro[N];

page=page1;

int e=page[0].time,i=0;

while(i

{

if(e

e=page[i].time;

i++;

}

for( i=0;i

if(e==page[i].time)

return i;

return -1;

}

int Compfu(Pro *page1,int i,int t,Pro p[M]) {

Pro *page=new Pro[N];

page=page1;

int count=0;

for(int j=i;j

if(page[t].num==p[j].num )

break;

else count++; }

return count;}

int main() {

cout<<"可é用?内ú存?页?面?数簓:";

cin>>N;

Pro p[M];

Pro *page=new Pro[N];

char c;

int m=0,t=0;

float n=0;

m=Input(m,p);

do{

for(int i=0;i

page[i].num=0;

page[i].time=2-i; }

i=0;

cout<<"************************"<

cout<<"*****f:FIFO页?面?置?换?*****"<

cout<<"*****l:LRU页?面?置?换?******"<

cout<<"*****o:OPT页?面?置?换?******"<

cout<<"*****按恪?其?它?键?结á束?*******"<

cout<<"************************"<

cout<<"请?选?择?操ù作痢?类え?型í(f,l,o):";

cin>>c;

if(c=='f')//FIFO页?面?置?换?

{

n=0;

cout<<"页?面?置?换?情é况?: "<

while(i

{

if(Search(p[i].num,page)>=0)

i++;//找ò到?相à同?的?面?

else{

if(t==N)t=0;

else { n++;//

page[t].num=p[i].num;

print(page);

t++;

}

}

}

cout<<"缺ü?页?次?数簓:阰"<

}

if(c=='l')//LRU页?面?置?换?

{ n=0;

cout<<"页?面?置?换?情é况?: "<

while(i

{

int k;

k=t=Search(p[i].num,page);

if(t>=0)

page[t].time=0;

else{

n++;

t=Max(page);

page[t].num=p[i].num;

page[t].time=0; }

if(t==0){page[t+1].time++;page[t+2].time++;}

if(t==1){page[2].time++;page[0].time++;}

if(t==2){page[1].time++;page[0].time++;}

if(k==-1) print(page); i++; }

cout<<"缺ü?页?次?数簓:阰"<

{

n=0;

while(i

if(Search(p[i].num,page)>=0)i++;

else {

int temp=0,cn;

for(t=0;t

if(temp

{

temp=Compfu(page,i,t,p);

cn=t;

} }

page[cn]=p[i];

n++;

print(page);

i++;

}

}

cout<<"缺ü?页?次?数簓:阰"<

}

}

while(c=='f'||c=='l'||c=='o');

return 0;

}

四、实验总结

通过本次用C/C++语言定义页式或段式存储管理的基本数据结构,包括以数组形式表示的存储器空间,页表或段表,页式或段式的地址结构,用C/C++语言实现页式或段式存储分配和回收算法,以及相应的地址变换算法。我深刻了解到存储器管理的基本概念和基本方法,也理解页式、段式存储管理方式,并且理解和掌握页表、段表结构及相应的地址变换机制。通过本次实验,我也总结到了一些经验,写代码一定要沉得住气,要有耐心,反复调试。并且,一个好的程序员要注意时间复杂度和空间复杂度的问题,要尽量让代码变得精简,易理解,经过这些有意义的实验,还很有意思,让我收获颇丰。

银行家算法实验报告

操作系统 (实验报告) 银行家算法姓名:***** 学号:***** 专业班级:***** 学验日期:2011/11/22 指导老师:***

一、实验名称: 利用银行家算法避免死锁 二、实验内容: 需要利用到银行家算法,来模拟避免死锁:设计M个进程共享N类资源,M个进程可以动态的申请资源,并可以判断系统的安全性,进行打印出,相应的安全序列和分配表,以及最后可用的各资源的数量。 三、实验目的: 银行家算法是一种最有代表性的避免死锁的算法,在避免死锁的方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。 为实现银行家算法,系统必须设置若干数据结构,所以通过编写一个模拟动态资源分配的银行家算法程序,进一步深入理解死锁,产生死锁的必要条件,安全状态等重要的概念,并掌握避免死锁的具体实施方法。 四、实验过程 1.基本思想: 我们可以把操作系统看成是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程申请到资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过再测试系统现资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。 安全状态就是如果存在一个由系统中所有进程构成的安全序列P1……则系统处于安全状态。安全状态是没有死锁发生。而不安全状态则是不存在这样一个安全序列,从而一定会导致死锁。 2.主要数据结构: (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的矩阵,它定义了系统中每一类资源

大作业_银行家算法课程设计报告

《操作系统》课程设计报告 设计题目:银行家算法的实现 :梅济民学号: 2012015014 同组人 :宇昊学号: 2012012962 班级: 2012级信息与计算科学 完成日期: 2015年 11 月 12 日

银行家算法分析、设计与实现 一、理论描述 银行家算法要求每个进程的最大资源需求,其基本思想是:始终保持系统处于安全状态,当设计进程提出资源请求时,系统先进行预分配,再判断系统分配后是否仍然处于安全状态。如果仍然处于安全状态,就进行实际分配;如果处于不安全状态,则拒绝该进程的资源请求。 二、算法描述及数据结构模型 #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=100;//作业的最大数为100 int N=100;//资源的最大数为10 三、源代码 void showdata()//显示资源矩阵 { int i,j; printf("系统目前可用的资源[Avaliable]:\n"); for(i=0;i

银行家算法-实验报告

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

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

银行家算法课程设计报告

中南大学软件技术课程设计报告 课程名称:模拟银行家算法原理班级: 学号: 姓名: 指导老师: 2009年5月2日

一设计目的 模拟实现银行家算法,用银行家算法实现资源分配。 二问题描述 在死锁的避免中,银行家算法把系统状态分为安全状态和不安全状态,只要能使系统始终处于安全状态,便可以避免发生死锁。所谓安全状态,是指系统能按某种顺序为每个进程分配所需资源,直到最大需求,使每一个进程都可以顺利完成,即可找到一个安全资源分配序列。模拟实现这个工作过程。 三设计思路 我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。 四详细设计 1、初始化

由用户输入数据,分别对可利用资源向量矩阵AVAILABLE、最大需求矩阵MAX、分配矩阵ALLOCATION、需求矩阵NEED赋值。 2、银行家算法 在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态,便可以避免发生死锁。银行家算法的基本思想是分配资源之前,判断系统是否是安全的;若是,才分配。 设进程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、进一步了解进程的并发执行。 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发出资源请求后,系统按下述步骤进行检查:

银行家算法课程设计报告

银行家算法课程设计报 告 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998

中南大学 软件技术课程设计报告 课程名称:模拟银行家算法原理 班级: 学号: 姓名: 指导老师: 2009年5月2日 一设计目的 模拟实现银行家算法,用银行家算法实现资源分配。 二问题描述 在死锁的避免中,银行家算法把系统状态分为安全状态和不安全状态,只要能使系统始终处于安全状态,便可以避免发生死锁。所谓安全状态,是指系统能按某种顺序为每个进程分配所需资源,直到最大需求,使每一个进程都可以顺利完成,即可找到一个安全资源分配序列。模拟实现这个工作过程。 三设计思路 我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请

资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。 四详细设计 1、初始化 由用户输入数据,分别对可利用资源向量矩阵AVAILABLE、最大需求矩阵MAX、分配矩阵ALLOCATION、需求矩阵NEED赋值。 2、银行家算法 在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态,便可以避免发生死锁。银行家算法的基本思想是分配资源之前,判断系统是否是安全的;若是,才分配。 设进程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];

银行家算法_实验报告

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

目录 一、课程设计目的和意义 (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
课程设计(论文)
题 目: 银行家算法 院 (系): 信息与控制工程系 专业班级: 姓 名: 学 号: 指导教师:
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 页脚内容

(完整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],若条件不符重新

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

计算机操作系统实验报告 一、实验名称:银行家算法 二、实验目的:银行家算法是避免死锁的一种重要方法,通过编写 一个简单的银行家算法程序,加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。 三、问题分析与设计: 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

银行家算法课程设计报告

《操作系统原理》课程设计报告 1设计目的 (1)进一步了解进程的并发执行 (2)加强对进程死锁的理解 (3)用银行家算法完成死锁检测 2设计内容 给出进程需求矩阵C、资源向量R以及一个进程的申请序列。使用进程启动拒绝和资源分配拒绝(银行家算法)模拟该进程组的执行情况。 3设计要求 (1)初始状态没有进程启动; (2)计算每次进程申请是否分配,如:计算出预分配后的状态情况(安全状态,不安全状态),如果是安全状态,输出安全序列; (3)每次进程申请被允许后,输出资源分配矩阵A和可用资源向量V; (4)每次申请情况应可单步查看,如:输入一个空格,继续下个申请。 4算法原理 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] 4.2银行家算法 设Requesti是进程Pi的请求向量。如果Requesti[j]=k,表示进程只需要k个Rj类型的资源。当Pi发出资源请求后,系统按下述步骤进行检查: (1)如果 Requesti[j]<=Need[i,j],则转向步骤2;否则,认为出错,因为它所 3需要的资源数已超过它所宣布的最大值。 (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等待。 4.3安全性算法 系统所执行的安全性算法可描述如下: (1)设置两个向量 ①、工作向量Work。它表示系统可提供给进程继续运行所需要的各类资源数目,它含有m个元素,执行安全算法开始时,Work = Available。 ②、Finish。它表示系统是否有足够的资源分配给进程,使之运行完成,开始时先做Finish[i]:=false ;当有足够资源分配给进程时,令 Finish[i]:=true。 (2)从进程集合中找到一个能满足下述条件的进程: ①、Finish[i]=false; ②、Need[i,j]<=Work[j];如找到,执行步骤(3);否则,执行步骤(4)。 (3)当进程Pi获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行: Work[j]:=Work[i]+Allocation[i,j]; Finish[i]:=true; goto step 2; (4)如果所有进程的Finish[i]:=true,则表示系统处于安全状态;否则,系统处于不安全状态。

操作系统实验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.安全性检查

银行家算法设计报告

基于银行家算法的研究 摘要 1.研究的目的和意义 加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。死锁的产生,必须同时满足四个条件,即一个资源每次只能由一个进程占用:第二个为等待条件,即一个进程请求资源不能满足时,它必须等待,但它仍继续保持已得到的所有其他资源:第四个为循环等待条件,系统中存在若干个循环等待的进程,即其中每一个进程分别等待它前一个进程所持有的资源。防止死锁的机构只能确保上述四个条件之一不出现,则系统就不会发生死锁。通过这个算法可用解决生活中的实际问题,如银行贷款等. 2.研究的内容及方法 银行家算法是最有代表性的避免死锁的算法,由于该算法能用于银行系统现金贷款的发放而得名。其实现思想是:允许进程动态地申请资源,系统在每次实施资源分配之前,先计算资源分配的安全性,若此次资源分配安全(即资源分配后,系统能按某种顺序来为每个进程分配其所需的资源,直至最大需求,使每个进程都可以顺利地完成),便将资源分配给进程,否则不分配资源,让进程等待。 关键词:银行家算法安全死锁

目录 摘要 (i) 1绪论 (1) 1.1前言 (1) 1.2本文主要研究内容 (1) 2需求分析 (2) 2.1死锁的概念 (2) 2.2关于死锁的一些概念 (2) 2.3资源分类 (2) 2.4产生死锁的必要条件 (2) 2.5死锁预防 (3) 2.6银行家算法 (3) 3概要设计 (4) 3.1设计思路 (4) 3.2 数据结构 (4) 3.3主要函数说明 (5) 4详细设计 (6) 4.1算法描述 (6) 4.1.1银行家算法 (6) 4.1.2 安全性检查算法 (7) 4.2函数的实现过程 (7) 4.3程序流程图 (9) 5测试结果 (10) 6结果分析 (12) 7总结 (13) 源程序清单 (14)

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

银行家算法 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都满足,则表示系统处于安全状态;否则,系统处于不安全状态。

银行家算法课程设计

操作系统课程设计报告 题目:银行家算法 安全性算法 院(系):计算机科学与工程 专业:软件工程 班级: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),当进程处于这种状态时,若无外力作用,他们都无法在向前推进。 要预防死锁,有摒弃“请求和保持”条件,摒弃“不剥夺”条件,摒弃“环

银行家算法设计实验报告

银行家算法设计实验报告

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

(3)进程申请资源,用银行家算法对其进行检测,分为以下三种情况: A. 所申请的资源大于其所需资源,提示分配不合理不予分配并返回 B. 所申请的资源未大于其所需资源, 但大于系统此时的可利用资源,提 示分配不合理不予分配并返回。 C. 所申请的资源未大于其所需资源, 亦未大于系统此时的可利用资源,预 分配并进行安全性检查: a. 预分配后系统是安全的,将该进 程所申请的资源予以实际分配并 打印后返回。 b. 与分配后系统进入不安全状态,提示系统不安全并返回。 (4)对输入进行检查,即若输入不符合条件,应当报错并返回重新输入。 3.目的: 根据设计题目的要求,充分地分析和理解题 目,叙述系统的要求,明确程序要求实现的功能以及限制条件。 明白自己需要用代码实现的功能,清楚编写每部分代码的目的,做到有的放矢,有条理不遗漏的用代码实现银行家算法。

操作系统课程设计实验报告用C实现银行家算法

操作系统课程设计实验报告用C实现银行家算 法 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]

操作系统 实 验 报 告 (2) 学院:计算机科学与技术学院 班级:计091 学号:姓名:

时间:2011/12/30 目录 1.实验名称 (3) 2.实验目的 (3) 3.实验内容 (3) 4.实验要求 (3) 5.实验原理 (3) 6.实验环境 (4) 7.实验设计 (4) 数据结构设计 (4) 算法设计 (6) 功能模块设计 (7) 8.实验运行结果 (8) 9.实验心得 (9) 附录:源代码(部分) (9) 一、实验名称: 用C++实现银行家算法 二、实验目的: 通过自己编程来实现银行家算法,进一步理解银行家算法的概念及含义,提高对银行家算法的认识,同时提高自己的动手实践能力。 各种死锁防止方法能够阻止发生死锁,但必然会降低系统的并发性并导致低效的资源利用率。死锁避免却与此相反,通过合适的资源分配算法确保不会出现进程循环等

待链,从而避免死锁。本实验旨在了解死锁产生的条件和原因,并采用银行家算法有效地防止死锁的发生。 三、实验内容: 利用C++,实现银行家算法 四、实验要求: 1.完成银行家算法的设计 2.设计有n个进程共享m个系统资源的系统,进程可动态的申请和释放资源,系统按各进程的申请动态的分配资源。 五、实验原理: 系统中的所有进程放入进程集合,在安全状态下系统收到进程的资源请求后,先把资源试探性的分配给它。之后,系统将剩下的可用资源和进程集合中的其他进程还需要的资源数作比较,找出剩余资源能够满足的最大需求量的进程,从而保证进程运行完毕并归还全部资源。这时,把这个进程从进程集合中删除,归还其所占用的所有资源,系统的剩余资源则更多,反复执行上述步骤。最后,检查进程集合,若为空则表明本次申请可行,系统处于安全状态,可以真正执行本次分配,否则,本次资源分配暂不实施,让申请资源的进程等待。 银行家算法是一种最有代表性的避免的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。为实现银行家算法,系统必须设置若干。要解释银行家算法,必须先解释操作系统安全状态和不安全状态。安全序列是指一个进程序列{P1,…,Pn}是安全的,如果对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和。

相关主题
文本预览
相关文档 最新文档