模擬銀行家算法

時(shí)間:2022-07-03 01:57:49 金融/投資/銀行/保險/財會(huì ) 我要投稿
  • 相關(guān)推薦

模擬銀行家算法

課程設計任務(wù)書(shū)

模擬銀行家算法

設計題目:編程序模擬銀行家算法

設計目的

1、銀行家算法是避免死鎖的一種重要方法,本實(shí)驗要求用高級語(yǔ)言編寫(xiě)和調試一個(gè)簡(jiǎn)單的銀行家算法程序。加深了解有關(guān)資源申請、避免死鎖等概念,并體會(huì )和了解死鎖和避免死鎖的具體實(shí)施方法。

2、提高學(xué)生的程序設計能力、 提高算法設計質(zhì)量與程序設計素質(zhì) ;

設計任務(wù) (在規定的時(shí)間內完成下列任務(wù))

思想:將一定數量的資金供多個(gè)用戶(hù)周轉使用,當用戶(hù)對資金的最大申請量不超過(guò)現存資金時(shí)可接納一個(gè)新客戶(hù),客戶(hù)可以分期借款,但借款總數不能超過(guò)最大的申請量。銀行家對客戶(hù)的借款可以推遲支付,但是能夠使客戶(hù)在有限的時(shí)間內得到借款,客戶(hù)得到所有的借款后能在有限的時(shí)間內歸還。

用銀行家算法分配資源時(shí),測試進(jìn)程對資源的最大需求量,若現存資源能滿(mǎn)足最大需求就滿(mǎn)足當前進(jìn)程的申請,否則推遲分配,這樣能夠保證至少有一個(gè)進(jìn)程可以得到所需的全部資源而執行到結束,然后歸還資源,若OS能保證所有進(jìn)程在有限的時(shí)間內得到所需資源則稱(chēng)系統處于安全狀態(tài)。

1. 需求分析

1.1 課程設計題目

編程序模擬銀行家算法

1.2 課程設計目的

1、銀行家算法是避免死鎖的一種重要方法,本實(shí)驗要求用高級語(yǔ)言編寫(xiě)和調試一個(gè)簡(jiǎn)單的銀行家算法程序。加深了解有關(guān)資源申請、避免死鎖等概念,并體會(huì )和了解死鎖和避免死鎖的具體實(shí)施方法。

2、提高自己的程序設計能力、 提高算法設計質(zhì)量與程序設計素質(zhì);

1.3 課程設計任務(wù)及要求

思想:將一定數量的資金供多個(gè)用戶(hù)周轉使用,當用戶(hù)對資金的最大申請量不超過(guò)現存資金時(shí)可接納一個(gè)新客戶(hù),客戶(hù)可以分期借款,但借款總數不能超過(guò)最大的申請量。銀行家對客戶(hù)的借款可以推遲支付,但是能夠使客戶(hù)在有限的時(shí)間內得到借款,客戶(hù)得到所有的借款后能在有限的時(shí)間內歸還。

銀行家算法在系統在分配資源時(shí)自始自終地做出正確的選擇,這樣可以避免死鎖的發(fā)生。

用銀行家算法分配資源時(shí),測試進(jìn)程對資源的最大需求量,若現存資源能滿(mǎn)足最大需求就滿(mǎn)足當前進(jìn)程的申請,否則推遲分配,這樣能夠保證至少有一個(gè)進(jìn)程可以得到所需的全部資源而執行到結束,然后歸還資源,若OS能保證所有進(jìn)程在有限的時(shí)間內得到所需資源則稱(chēng)系統處于安全狀態(tài)。

1.4 軟硬件運行環(huán)境及開(kāi)發(fā)工具

1.4.1硬件環(huán)境

PC機一臺,支持WINDOWS XP,和LINUX。

1.4.2軟件環(huán)境

在LINUX下運行,在WINDOWS下用WIN-TC 運行或在Turbo C for Windows下運行。

2. 概要設計

2.1 程序流程圖

2.2 設計原理及方法

銀行家算法的設計思想是:當用戶(hù)申請一組資源時(shí),系統必須做出判斷;如果把這些資源分出去,系統是否還處于安全裝他。若是,就可以分出這些資源;否則,該申請暫不能滿(mǎn)足。

實(shí)現銀行家算法要有若干數據結構,它們用來(lái)表示資源分配系統的狀態(tài)。令n表示系統中進(jìn)程的數目,m表示資源的分類(lèi)數。還需要以下數據結構:

1. Available是一個(gè)長(cháng)度為m的向量,它表示每類(lèi)資源可用的數量。Available [j]=k,表示rj類(lèi)資源可用的數量為k。

2.Max是一個(gè)n×m矩陣,它表示每個(gè)進(jìn)程對資源的最大需求。Max [i,j]=k,表示進(jìn)程pi至多可以申請k個(gè)rj類(lèi)資源單位。

3. Allocation是一個(gè)n×m矩陣,它表示當前分給每個(gè)進(jìn)程的資源數目。Allocation [i,j]=k,表示進(jìn)程pi當前分到k個(gè)rj類(lèi)資源。

4. Need是一個(gè)n×m矩陣,它表示每個(gè)進(jìn)程還缺少多少資源。Need[i,j]=k,表示進(jìn)程pi尚需k個(gè)rj類(lèi)資源才能完成其任務(wù)。顯然Need[i,j]= Max [i,j]- Allocation [i,j]。

這些數據結構的大小和數值隨時(shí)間推移而改變。

系統所執行的安全性算法描述如下:

1.設置2個(gè)向量:工作向量Work:它表示系統可提供給進(jìn)程繼續運行所需的各類(lèi)資源數目,它含有m個(gè)元素,在執行安全算法開(kāi)始時(shí),Work = Available。

Finish[i] :它表示系統是否有足夠的資源分配給進(jìn)程,使之完成運行。開(kāi)始時(shí)先做Finish[i]=true。

2.從進(jìn)程集合中找到一個(gè)滿(mǎn)足下述條件的進(jìn)程:Finish[i]=flase;Need[i,j]≤Work[j];若找到,則執行步驟3,否則,執行步驟4。

3.當進(jìn)程pi獲得資源后,可順利執行,直至完成,并釋放分配給它的資源。

4.如果所有進(jìn)程的Finish[i]=true都滿(mǎn)足。則表示系統處于安全狀態(tài);否則,系統處于不安全狀態(tài)。

3. 詳細設計

3.1 程序源代碼

#include "string.h"

#include

#include

#define M 5

#define N 3

#define FALSE 0

#define TRUE 1

/*M個(gè)進(jìn)程對N類(lèi)資源最大資源需求量*/

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

/*系統可用資源數*/

int AVAILABLE[N]={10,5,7};

/*M個(gè)進(jìn)程對N類(lèi)資源最大資源需求量*/

int ALLOCATION[M][N]={{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}};

/*M個(gè)進(jìn)程已經(jīng)得到N類(lèi)資源的資源量 */

int NEED[M][N]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};

/*M個(gè)進(jìn)程還需要N類(lèi)資源的資源量*/

int Request[N]={0,0,0};

void main()

{

int i=0,j=0;

char flag=Y;

void showdata();

void changdata(int);

void rstordata(int);

int chkerr(int);

showdata();

while(flag==Y||flag==y)

{

i=-1;

while(i<0||i>=M)

{

printf("請輸入需申請資源的進(jìn)程號(從0到");

printf("%d",M-1);

printf(",否則重輸入!):");

scanf("%d",&i);

if(i<0||i>=M)printf("輸入的進(jìn)程號不存在,重新輸入! ");

}

printf("請輸入進(jìn)程");

printf("%d",i);

printf("申請的資源數 ");

for (j=0;j

{

printf("資源");

printf("%d",j);

printf(":");

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

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

{

printf("進(jìn)程");

printf("%d",i);

printf("申請的資源數大于進(jìn)程");

printf("%d",i);

printf("還需要");

printf("%d",j);

printf("類(lèi)資源的資源量!申請不合理,出錯!請重新選擇! ");

flag=N;

break;

}

else

{

if(Request[j]>AVAILABLE[j])

{

printf("進(jìn)程");

printf("%d",i);

printf("申請的資源數大于系統可用");

printf("%d",j);

printf("類(lèi)資源的資源量!申請不合理,出錯!請重新選擇! ");

flag=N;

break;

}

}

}

if(flag==Y||flag==y)

{

changdata(i);

if(chkerr(i))

{

rstordata(i);

showdata();

}

else

showdata();

}

else

showdata();

printf(" ");

printf("是否繼續銀行家算法演示,按Y或y鍵繼續,按N或n鍵退出演示: ");

scanf("%c",&flag);

}

}

void showdata()

{

int i,j;

printf("系統可用的資源數為: ");

printf(" ");

for (j=0;j

printf(" 資源");

printf("%d",j);

printf(":");

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

printf(" ");

printf("各進(jìn)程還需要的資源量: ");

for (i=0;i

{

printf(" 進(jìn)程");

printf("%d",i);

printf(":");

for (j=0;j

printf("資源");

printf("%d",j);

printf(":");

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

/*printf(" ");*/

}

printf(" ");

}

printf("各進(jìn)程已經(jīng)得到的資源量: ");

for (i=0;i

{

printf(" 進(jìn)程");

printf("%d",i);

for (j=0;j

printf("資源");

printf("%d",j);

printf(":");

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

}

printf(" ");

}

}

void changdata(int k)

{

int j;

for (j=0;j

{

AVAILABLE[j]=AVAILABLE[j]-Request[j];

ALLOCATION[k][j]=ALLOCATION[k][j]+Request[j];

NEED[k][j]=NEED[k][j]-Request[j];

}

};

void rstordata(int k)

{

int j;

for (j=0;j

{

AVAILABLE[j]=AVAILABLE[j]+Request[j];

ALLOCATION[k][j]=ALLOCATION[k][j]-Request[j];

NEED[k][j]=NEED[k][j]+Request[j];

}

};

int chkerr(int s)

{

int WORK,FINISH[M],temp[M];

int i,j,k=0;

【模擬銀行家算法】相關(guān)文章:

小小銀行家作文03-12

年假的算法07-11

年假的算法?07-11

我是小小銀行家作文06-03

銀行家屬慰問(wèn)信07-05

小小銀行家作文15篇06-01

焊工的工資算法07-13

關(guān)于年假的算法07-11

算法教學(xué)設計05-18

小小銀行家親子活動(dòng)方案04-29

99久久精品免费看国产一区二区三区|baoyu135国产精品t|40分钟97精品国产最大网站|久久综合丝袜日本网|欧美videosdesexo肥婆