久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

計算機(jī)操作系統(tǒng) 課程設(shè)計報告 銀行家算法

時間:2019-05-12 12:22:57下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《計算機(jī)操作系統(tǒng) 課程設(shè)計報告 銀行家算法》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《計算機(jī)操作系統(tǒng) 課程設(shè)計報告 銀行家算法》。

第一篇:計算機(jī)操作系統(tǒng) 課程設(shè)計報告 銀行家算法

《計算機(jī)操作系統(tǒng)》

課 程 設(shè) 計 報 告

題 目: 銀行家算法

班 級: XXXXXXXXXXXXXXXX 姓 名: XXM 學(xué) 號: XXXXXXXXXXXX 指導(dǎo)老師: XXXXXXXXXXXXXX 設(shè)計時間: XXXXXXXXXXXXXXX 一.設(shè)計目的

1、掌握死鎖概念、死鎖發(fā)生的原因、死鎖產(chǎn)生的必要條件;

2、掌握死鎖的預(yù)防、死鎖的避免;

3、深刻理解死鎖的避免:安全狀態(tài)和銀行家算法;

二.銀行家算法

1.簡介

銀行家算法是一種最有代表性的避免死鎖的算法。在避免死鎖方法中允許進(jìn)程動態(tài)地申請資源,但系統(tǒng)在進(jìn)行資源分配之前,應(yīng)先計算此次分配資源的安全性,若分配不會導(dǎo)致系統(tǒng)進(jìn)入不安全狀態(tài),則分配,否則等待。為實現(xiàn)銀行家算法,系統(tǒng)必須設(shè)置若干數(shù)據(jù)結(jié)構(gòu)。

2.數(shù)據(jù)結(jié)構(gòu)

1)可利用資源向量Available 是個含有m個元素的數(shù)組,其中的每一個元素代表一類可利用的資源數(shù)目。如果Available[j]=K,則表示系統(tǒng)中現(xiàn)有Rj類資源K個。2)最大需求矩陣Max 這是一個n×m的矩陣,它定義了系統(tǒng)中n個進(jìn)程中的每一個進(jìn)程對m類資源的最大需求。如果Max[i,j]=K,則表示進(jìn)程i需要Rj類資源的最大數(shù)目為K。3)分配矩陣Allocation 這也是一個n×m的矩陣,它定義了系統(tǒng)中每一類資源當(dāng)前已分配給每一進(jìn)程的資源數(shù)。如果Allocation[i,j]=K,則表示進(jìn)程i當(dāng)前已分得Rj類資源的 數(shù)目為K。4)需求矩陣Need 這也是一個n×m的矩陣,用以表示每一個進(jìn)程尚需的各類資源數(shù)。如果Need[i,j]=K,則表示進(jìn)程i還需要Rj類資源K個,方能完成其任務(wù)。Need[i,j]=Max[i,j]-Allocation[i,j].3.算法原理

操作系統(tǒng)按照銀行家制定的規(guī)則為進(jìn)程分配資源,當(dāng)進(jìn)程首次申請資源時,要測試該進(jìn)程對資源的最大需求量,如果系統(tǒng)現(xiàn)存的資源可以滿足它的最大需求量則按當(dāng)前的申請量分配資源,否則就推遲分配。當(dāng)進(jìn)程在執(zhí)行中繼續(xù)申請資源時,先測試該進(jìn)程本次申請的資源數(shù)是否超過了該資源所剩余的總量。若超過則拒絕分配資源,若能滿足則按當(dāng)前的申請量分配資源,否則也要推遲分配。

三.算法實現(xiàn)

1.初始化

由用戶輸入數(shù)據(jù),分別對可利用資源向量矩陣AVAILABLE、最大需求矩陣MAX、分配矩陣ALLOCATION、需求矩陣NEED賦值。

2.銀行家算法

在避免死鎖的方法中,所施加的限制條件較弱,有可能獲得令人滿意的系統(tǒng)性能。在該方法中把系統(tǒng)的狀態(tài)分為安全狀態(tài)和不安全狀態(tài),只要能使系統(tǒng)始終都處于安全狀態(tài),便可以避免發(fā)生死鎖。

銀行家算法的基本思想是分配資源之前,判斷系統(tǒng)是否是安全的;若是,才分配。設(shè)進(jìn)程cusneed提出請求REQUEST [i],則銀行家算法按如下規(guī)則進(jìn)行判斷。(1)如果REQUEST [cusneed] [i]<= NEED[cusneed][i],則轉(zhuǎn)(2);否則,出錯。(2)如果REQUEST [cusneed] [i]<= AVAILABLE[cusneed][i],則轉(zhuǎn)(3);否則,出錯。(3)系統(tǒng)試探分配資源,修改相關(guān)數(shù)據(jù): AVAILABLE[i]-=REQUEST[cusneed][i];ALLOCATION[cusneed][i]+=REQUEST[cusneed][i];NEED[cusneed][i]-=REQUEST[cusneed][i];(4)系統(tǒng)執(zhí)行安全性檢查,如安全,則分配成立;否則試探險性分配作廢,系統(tǒng)恢復(fù)原狀,進(jìn)程等待。

3.安全性檢查算法

(1)設(shè)置兩個工作向量Work=AVAILABLE;FINISH(2)從進(jìn)程集合中找到一個滿足下述條件的進(jìn)程,F(xiàn)INISH==false;NEED<=Work;如找到,執(zhí)行(3);否則,執(zhí)行(4)(3)設(shè)進(jìn)程獲得資源,可順利執(zhí)行,直至完成,從而釋放資源。Work+=ALLOCATION;Finish=true;GOTO 2(4)如所有的進(jìn)程Finish= true,則表示安全;否則系統(tǒng)不安全。

4.算法流程圖

1)初始化算法流程圖

2)銀行家算法流程圖:

3)安全性算法流程圖:

4.代碼(C語言)

#include #include #include #include /*用到了getch()*/ #define M 5 /*進(jìn)程數(shù)*/ #define N 3 /*資源數(shù)*/ #define FALSE 0 #define TRUE 1

/*M個進(jìn)程對N類資源最大資源需求量*/ int MAX[M][N]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};/*系統(tǒng)可用資源數(shù)*/ int AVAILABLE[N]={10,5,7};/*M個進(jìn)程對N類資源最大資源需求量*/ int ALLOCATION[M][N]={{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}};

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

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

/*M個進(jìn)程還需要N類資源的資源量*/ int Request[N]={0,0,0};

void main(){

int i=0,j=0;char flag;

void showdata();void changdata(int);void rstordata(int);int chkerr(int);showdata();enter:{

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

printf(“%d”,M-1);

printf(“):”);

scanf(“%d”,&i);} if(i<0||i>=M){

printf(“輸入的進(jìn)程號不存在,重新輸入!n”);

goto enter;}

err:{

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

printf(“%d”,i);

printf(“申請的資源數(shù)n”);

printf(“類別: A B Cn”);printf(“ ”);

for(j=0;j

{

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

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

{

printf(“%d”,i);

printf(“號進(jìn)程”);

printf(“申請的資源數(shù) > 進(jìn)程”);

printf(“%d”,i);

printf(“還需要”);

printf(“%d”,j);printf(“類資源的資源量!申請不合理,出錯!請重新選擇!n”);

goto err;

}

else

{

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

{

printf(“進(jìn)程

”);

printf(“%d”,i);

printf(“申請的資源數(shù)大于系統(tǒng)可用”);

printf(“%d”,j);

printf(“類資源的資源量!申請不合理,出錯!請重新選擇!n”);

goto err;

}

}

} }

changdata(i);if(chkerr(i)){

rstordata(i);

showdata();} else

showdata();

printf(“n”);

printf(“按'y'或'Y'鍵繼續(xù),否則退出n”);

flag=getch();

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

goto enter;

} else {

exit(0);}

}

/*顯示數(shù)組*/ void showdata(){ int i,j;printf(“系統(tǒng)可用資源向量:n”);printf(“***Available***n”);printf(“資源類別: A B Cn”);printf(“資源數(shù)目:”);for(j=0;j

printf(“%d ”,AVAILABLE[j]);} printf(“n”);printf(“n”);printf(“各進(jìn)程還需要的資源量:n”);printf(“******Need******n”);printf(“資源類別: A B Cn”);for(i=0;i

printf(“ ”);

printf(“%d”,i);

printf(“號進(jìn)程:”);

for(j=0;j

{

printf(“

%d ”,NEED[i][j]);

}

printf(“n”);} printf(“n”);printf(“各進(jìn)程已經(jīng)得到的資源量: n”);printf(“***Allocation***n”);printf(“資源類別: A B Cn”);for(i=0;i

printf(“ ”);

printf(“%d”,i);

printf(“號進(jìn)程:”);

/*printf(“:n”);*/

for(j=0;j

{

printf(“

%d ”,ALLOCATION[i][j]);

}

printf(“n”);

}

printf(“n”);}

/*系統(tǒng)對進(jìn)程請求響應(yīng),資源向量改變*/ 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];

}

}

/*安全性檢查函數(shù)*/ int chkerr(int s){ int WORK,FINISH[M],temp[M];int i,j,k=0;

for(i=0;i

WORK=AVAILABLE[j];

i=s;

printf(“n”);

while(i

{

if(FINISH[i]==FALSE&&NEED[i][j]<=WORK)

{

printf(“系統(tǒng)不安全!本次資源申請不成功!n”);

printf(“n”);

return 1;

}

}

} WORK=WORK+ALLOCATION[i][j];

FINISH[i]=TRUE;

temp[k]=i;k++;i=0;

printf(“n”);

printf(“經(jīng)安全性檢查,系統(tǒng)安全,本printf(”n“);

printf(” 本次安全序列:n“);printf(”進(jìn)程依次為“);for(i=0;i

printf(”%d“,temp[i]);

次分配成功。n”);} else { i++;} } for(i=0;i

printf(“-> ”);}

printf(“n”);return 0;四.程序運行截圖

0號進(jìn)程申請資源{1,2,3},各向量發(fā)生變化

0和進(jìn)程繼續(xù)申請資源{2,2,0},各向量變化

2號進(jìn)程申請資源,由于NEED[2]={9,0,2},前兩次申請不合理,系統(tǒng)處于不安全狀態(tài)太。第三次2號申請資源向量為{1,0,2},系統(tǒng)回到安全狀態(tài),并得出新的安全序列3-0-1-2-4。

五.心得體會

從此次的課程設(shè)計中,我收獲很多。首先也是最重要的一點是對處理機(jī)調(diào)度與死鎖有了深入的理解;其次,再次鞏固了C語言編程。

在用C語言設(shè)計和編寫銀行家算法和安全性檢查算法時遇到了一些困難都克服了。在使程序界面美觀、能夠持續(xù)循環(huán)運行時用了很多方法,花了比較多的時間。最后選擇用goto語句控制,我覺得在此實驗中比較好,代碼閱讀起來更加方便。

第二篇:銀行家算法《操作系統(tǒng)》課程設(shè)計報告

《操作系統(tǒng)》課程設(shè)計報告

課題:

銀行家算法

專業(yè)

計算機(jī)科學(xué)與技術(shù)

學(xué)生姓名

班級

計算機(jī)

學(xué)號

指導(dǎo)教師

信息工程學(xué)院

一、實驗要求和實驗?zāi)康膶嶒災(zāi)康模罕菊n程設(shè)計是學(xué)生學(xué)習(xí)完《操作系統(tǒng)原理》課程后,進(jìn)行的一次全面的綜合訓(xùn)練,通過課程設(shè)計,讓學(xué)生更好地掌握操作系統(tǒng)的原理及實現(xiàn)方法,加深對操作系統(tǒng)基礎(chǔ)理論和重要算法的理解,加強學(xué)生的動手能力。

實驗要求:從課程設(shè)計的目的出發(fā),通過設(shè)計工作的各個環(huán)節(jié),達(dá)到以下教學(xué)要求:兩人一組,每組從所給題目中任選一個(如自擬題目,需經(jīng)指導(dǎo)教師同意),每個學(xué)生必須獨立完成課程設(shè)計,不能相互抄襲,同組者文檔不能相同;設(shè)計完成后,將所完成的工作交由指導(dǎo)教師檢查;要求寫出一份詳細(xì)的設(shè)計報告。

二、設(shè)計內(nèi)容:

課題一、編制銀行家算法通用程序,并檢測所給狀態(tài)的系統(tǒng)安全性。

1)銀行家算法中的數(shù)據(jù)結(jié)構(gòu):

可利用資源向量Available。這是一個含有m個

元素的數(shù)組,其中的每一個元素代表一類可利用的資源數(shù)目,其初始值是系統(tǒng)中所配置的該類全部可用資源的數(shù)目,其數(shù)值隨該類資源的分配和回收而動態(tài)地改變。Available[j]=K,則表示系統(tǒng)中現(xiàn)有Rj

類資源K個。

最大需求矩陣Max。這是一個n*m的矩陣,它定義了系統(tǒng)中n個進(jìn)程中的每一個進(jìn)程對m類資源的最大需求。如果Max[i,j]=K,則表示進(jìn)程i需要Rj類資源的最大數(shù)目為K。

1.分配矩陣Allocation。這也是一個n*m的矩陣,它定義了系統(tǒng)中每一類資料當(dāng)前已分配給沒一進(jìn)程的資源數(shù)。如果Allocation[i,j]=K,則表示進(jìn)程i當(dāng)前已分得Rj類資源的數(shù)目為K。需求矩陣Need。這也是一個n*m的矩陣,用以表示每一個進(jìn)程尚需的各類資源數(shù)。如果Need[i,j]=K,則表示進(jìn)程i還需要Rj類資源K個,方能完成其任務(wù)。

上述三個矩陣存在如下關(guān)系:

Need[i,j]=

Max[i,j]-

Allocation[i,j]

2)銀行家算法

設(shè)Request[i]

是進(jìn)程Pi的請求向量,如果Request[i,j]=K,表示進(jìn)程Pi需要K個Rj類型的資源。當(dāng)Pi發(fā)出資源請求后,系統(tǒng)按下述步驟進(jìn)行檢查:如果Request[i,j]<=

Need[i,j],便轉(zhuǎn)向步驟2;否則認(rèn)為出錯,因為它所需要的資源數(shù)已超過它所宣布的最大值。

三、設(shè)計思路

設(shè)計思路A、設(shè)計進(jìn)程對各在資源最大申請表示及初值確定。B、設(shè)定系統(tǒng)提供資源初始狀態(tài)。C、設(shè)定每次某個進(jìn)程對各類資源的申請表示。D、編制程序,依據(jù)銀行家算法,決定其申請是否得到滿足。

四、詳細(xì)設(shè)計

1、初始化:由用戶輸入數(shù)據(jù),分別對可利用資源向量矩陣AVAILABLE、最大需求矩陣MAX、分配矩陣ALLOCATION、需求矩陣NEED賦值。

2、銀行家算法:在避免死鎖的方法中,所施加的限制條件較弱,有可能獲得令人滿意的系統(tǒng)性能。在該方法中把系統(tǒng)的狀態(tài)分為安全狀態(tài)和不安全狀態(tài),只要能使系統(tǒng)始終都處于安全狀態(tài),便可以避免發(fā)生死鎖。銀行家算法的基本思想是分配資源之前,判斷系統(tǒng)是否是安全的;若是,才分配。它是最具有代表性的避免死鎖的算法。

設(shè)進(jìn)程cusneed提出請求REQUEST

[i],則銀行家算法按如下規(guī)則進(jìn)行判斷。

(1)如果REQUEST

[cusneed]

[i]<=

NEED[cusneed][i],則轉(zhuǎn)(2);否則,出錯。

(2)如果REQUEST

[cusneed]

[i]<=

AVAILABLE[cusneed][i],則轉(zhuǎn)(3);否則,出錯。

銀行家算法的數(shù)據(jù)結(jié)構(gòu)

假設(shè)有M個進(jìn)程N類資源,則有如下數(shù)據(jù)結(jié)構(gòu):

#define

W

#define

R

int

M

;

//總進(jìn)程數(shù)

int

N

;

//資源種類

int

ALL_RESOURCE[W];

//各種資源的數(shù)目總和

int

MAX[W][R];

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

int

AVAILABLE[R];

//系統(tǒng)可用資源數(shù)

int

ALLOCATION[W][R];

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

int

NEED[W][R];

//M個進(jìn)程還需要N類資源的資源量

int

Request[R];

//請求資源個數(shù)

3.“安全性檢測“算法

1)先定義兩個變量,用來表示推算過程的數(shù)據(jù).F[n]=A[n],表示推算過程中,系統(tǒng)中剩余資源量的變化.J[n]=False表示推算過程中各進(jìn)程是否假設(shè)“已完成“

系統(tǒng)試探分配資源,修改相關(guān)數(shù)據(jù):

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

ALLOCATION[cusneed][i]+=REQUEST[cusneed][i];、NEED[cusneed][i]-=REQUEST[cusneed][i];

4、安全性檢查算法

1)設(shè)置兩個工作向量Work=AVAILABLE;FINISH

2)從進(jìn)程集合中找到一個滿足下述條件的進(jìn)程,F(xiàn)INISH==false;

NEED<=Work;

如找到,執(zhí)行(3);否則,執(zhí)行(4)

3)設(shè)進(jìn)程獲得資源,可順利執(zhí)行,直至完成,從而釋放資源。

Work+=ALLOCATION;

Finish=true;

GOTO

4)如所有的進(jìn)程Finish=

true,則表示安全;否則系統(tǒng)不安全。

安全狀態(tài):

在某時刻系統(tǒng)中所有進(jìn)程可以排列一個安全序列:{P1,P2,`````Pn},剛稱此時,系統(tǒng)是安全的.所謂安全序列{P1,P2,`````Pn}是指對于P2,都有它所需要剩余資源數(shù)量不大于系統(tǒng)掌握的剩余的空間資源與所有Pi(j

最大需求

尚需

P1

P2

P3

4?????????????2

在每一次進(jìn)程中申請的資源,判定一下,若實際分配的話,之后系統(tǒng)是否安全.銀行家算法的數(shù)據(jù)結(jié)構(gòu).五、代碼清單

#include

#include

#include

#include

#include

#include

const

int

MAX_P=20;

const

int

MAXA=10;

//定義A類資源的數(shù)量

const

int

MAXB=5;

const

int

MAXC=7;

typedef

struct

node{

int

a;

int

b;

int

c;

int

remain_a;

int

remain_b;

int

remain_c;

}bank;

typedef

struct

node1{

char

name[20];

int

a;

int

b;

int

c;

int

need_a;

int

need_b;

int

need_c;

}process;

bank

banker;

process

processes[MAX_P];

int

quantity;

//初始化函數(shù)

void

initial()

{

int

i;

banker.a=MAXA;

banker.b=MAXB;

banker.c=MAXC;

banker.remain_a=MAXA;

banker.remain_b=MAXB;

banker.remain_c=MAXC;

for(i=0;i

strcpy(processes[i].name,““);

processes[i].a=0;

processes[i].b=0;

processes[i].c=0;

processes[i].need_a=0;

processes[i].need_b=0;

processes[i].need_c=0;

}

}

//新加作業(yè)

void

add()

{

char

name[20];

int

flag=0;

int

t;

int

need_a,need_b,need_c;

int

i;

cout<

cout<<“新加作業(yè)“<

cout<<“請輸入新加作業(yè)名:“;

cin>>name;

for(i=0;i

if(!strcmp(processes[i].name,name)){

flag=1;

break;

}

}

if(flag){

cout<<“錯誤,作業(yè)已存在“<

}

else{

cout<<“本作業(yè)所需A類資源:“;

cin>>need_a;

cout<<“本作業(yè)所需B類資源:“;

cin>>need_b;

cout<<“本作業(yè)所需C類資源:“;

cin>>need_c;

t=1;

cout<

if(need_a>banker.remain_a){

cout<<“錯誤,所需A類資源大于銀行家所剩A類資源“<

t=0;

}

if(need_b>banker.remain_b){

cout<<“錯誤,所需B類資源大于銀行家所剩B類資源“<

t=0;

}

if(need_c>banker.remain_c){

cout<<“錯誤,所需C類資源大于銀行家所剩C類資源“<

t=0;

}

if(t){

strcpy(processes[quantity].name,name);

processes[quantity].need_a=need_a;

processes[quantity].need_b=need_b;

processes[quantity].need_c=need_c;

quantity++;

cout<<“新加作業(yè)成功“<

}

else{

cout<<“新加作業(yè)失敗“<

}

}

}

//為作業(yè)申請資源

void

bid()

{

char

name[20];

int

i,p;

int

a,b,c;

int

flag;

cout<

cout<<“要申請資源的作業(yè)名:“;

cin>>name;

p=-1;

for(i=0;i

if(!strcmp(processes[i].name,name)){

p=i;

break;

}

}

if(p!=-1){

cout<<“該作業(yè)要申請A類資源數(shù)量:“;

cin>>a;

cout<<“該作業(yè)要申請B類資源數(shù)量:“;

cin>>b;

cout<<“該作業(yè)要申請C類資源數(shù)量:“;

cin>>c;

flag=1;

if((a>banker.remain_a)||(a>processes[p].need_a-processes[p].a)){

cout<<“錯誤,所申請A類資源大于銀行家所剩A類資源或該進(jìn)程還需數(shù)量“<

flag=0;

}

if((b>banker.remain_b)||(b>processes[p].need_b-processes[p].b)){

cout<<“錯誤,所申請B類資源大于銀行家所剩B類資源或該進(jìn)程還需數(shù)量“<

flag=0;

}

if((c>banker.remain_c)||(c>processes[p].need_c-processes[p].c)){

cout<<“錯誤,所申請C類資源大于銀行家所剩C類資源或該進(jìn)程還需數(shù)量“<

flag=0;

}

if(flag){

banker.remain_a-=a;

banker.remain_b-=b;

banker.remain_c-=c;

processes[p].a+=a;

processes[p].b+=b;

processes[p].c+=c;

cout<<“為作業(yè)申請資源成功“<

}

else{

cout<<“為作業(yè)申請資源失敗“<

}

}

else{

cout<<“該作業(yè)不存在“<

}

}

//撤消作業(yè)

void

finished()

{

char

name[20];

int

i,p;

cout<

cout<<“要撤消作業(yè)名:“;

cin>>name;

p=-1;

for(i=0;i

if(!strcmp(processes[i].name,name)){

p=i;

break;

}

}

if(p!=-1){

banker.remain_a+=processes[p].a;

banker.remain_b+=processes[p].b;

banker.remain_c+=processes[p].c;

for(i=p;i

processes[i]=processes[i+1];

}

strcpy(processes[quantity-1].name,““);

processes[quantity-1].a=0;

processes[quantity-1].b=0;

processes[quantity-1].c=0;

processes[quantity-1].need_a=0;

processes[quantity-1].need_b=0;

processes[quantity-1].need_c=0;

quantity--;

cout<<“撤消作業(yè)成功“<

}

else{

cout<<“撤消作業(yè)失敗“<

}

}

//查看資源情況

void

view()

{

int

i;

cout<

cout<<“銀行家所剩資源(剩余資源/總共資源)“<

cout<<“A類:“<

cout<<“

B類:“<

cout<<“

C類:“<

cout<

if(quantity>0){

for(i=0;i

cout<<“作業(yè)名:“<

cout<<“A類:“<

cout<<“

B類:“<

cout<<“

C類:“<

cout<

}

}

else{

cout<<“當(dāng)前沒有作業(yè)“<

}

}

//顯示版權(quán)信息函數(shù)

void

version()

{

cout<

cout<<“

銀行家算法

“<

cout<

}

void

main()

{

int

chioce;

int

flag=1;

initial();

version();

while(flag){

cout<<“1.新加作業(yè)

2.為作業(yè)申請資源

3.撤消作業(yè)“<

cout<<“4.查看資源情況

0.退出系統(tǒng)“<

cout<<“請選擇:“;

cin>>chioce;

switch(chioce){

case

1:

add();

break;

case

2:

bid();

break;

case

3:

finished();

break;

case

4:

view();

break;

case

0:

flag=0;

break;

default:

cout<<“選擇錯誤“<

}

}

}

六、使用說明

運行環(huán)境C-FREE4.0,新建任務(wù)。將編制好的代碼輸入此運行環(huán)境中。

按F5:出現(xiàn)如上圖所示窗口。按照提示,新建一個作業(yè):wujun。為作業(yè)分配資源,A:3;B:4;C:5。輸入2,為作業(yè)分配資源。三種資源的數(shù)量分配分別為:A:3;B:5;C:4。輸入4,查看資源情況。出現(xiàn)出錯提示,所申請的B類資源超過銀行家所剩B類資源或作業(yè)申請資源失敗。輸入0,退出系統(tǒng)。

重新加入一個作業(yè):wujun1.并為作業(yè)分配資源分別為A:3;B:3;C:3,為該作業(yè)分配資源A:3;B:2;C:2.輸入4查看資源情況。

顯示輸出,銀行家算法所剩資源(剩余資源、總共資源)。

七、實驗心得

八、參考文獻(xiàn)

湯子瀛等.計算機(jī)操作系統(tǒng).西安電子科技大學(xué)出版社.2001年5月

蔣靜

徐志偉.操作系統(tǒng)原理?技術(shù)與編程『M』.北京:機(jī)械工業(yè)出版社,2004

第三篇:操作系統(tǒng)銀行家算法實驗報告

實驗四

死鎖

一、實驗?zāi)康?/p>

當(dāng)系統(tǒng)的總資源數(shù)m小于或等于所有進(jìn)程對對資源的最大需求時,就可能產(chǎn)生 死鎖。死鎖會引起計算機(jī)系統(tǒng)的癱瘓。銀行家算法是在實現(xiàn)資源分配時避免死鎖的一個著名算法,該算法是在能確保系統(tǒng)處于安全狀態(tài)時才把資源分配給申請者。通過本實驗使學(xué)生能進(jìn)一步理解死鎖的概念,并能選擇一個算法來避免死鎖。

二、實驗題目

系統(tǒng)中有m個同類資源被n個進(jìn)程共享,每個進(jìn)程對資源的最大需求數(shù)分別為S1, S2,…,Sn,且 Max(Si)<=m,(i=1,2,…n)。進(jìn)程可以動態(tài)地申請資源和釋放資源。編寫一個程序,現(xiàn)銀行家算法,當(dāng)系統(tǒng)將資源分配給某一進(jìn)程而不會死鎖時,就分配之。否則,推遲分配,并顯示適當(dāng)?shù)男畔ⅰ?/p>

三、數(shù)據(jù)結(jié)構(gòu)

主要數(shù)據(jù)結(jié)構(gòu):

Struct aa { void Print();//用于打印輸出表格的函數(shù) void Input();//用于輸入的函數(shù)

void tryfenpei(int i);//試分配函數(shù) void refenpei(int i);//恢復(fù)數(shù)據(jù)函數(shù) void checksafe(int s);//安全檢測函數(shù) };

四、銀行家算法的流程圖 開始初始化資源類數(shù)c=3,進(jìn)程數(shù)t=5初始化Available[c],Max[t][c],Allocation[t][c],Need[t][c],Request[c]輸入進(jìn)程數(shù)iInt f=0f

五、源代碼

#include #include “stdio.h” const unsigned short c = 3;//資源類數(shù) const unsigned short t = 5;//進(jìn)程數(shù)

void Print();//用于打印輸出表格的函數(shù) void Input();//用于輸入的函數(shù)

void tryfenpei(int i);//試分配函數(shù) void refenpei(int i);//恢復(fù)數(shù)據(jù)函數(shù) void checksafe(int s);//安全檢測函數(shù)

//定義初始化數(shù)組 int Available[c], Max[t][c], Allocation[t][c], Need[t][c], Request[c];

int in;//用戶選擇的進(jìn)程號

int main(int argc, char *argv[]){ int i;char ch='Y';cout<<“初始化數(shù)據(jù)如下:”<>in){ if(in<0||in>4){ cout<<“不存在該進(jìn)程,請重新輸入”<>Request[i]){ if(Request[i]<0)cout<<“錯誤!輸入的數(shù)字無效.”<Need[in][i])cout<<“錯誤!超出進(jìn)程需求量”<Available[i])cout<<“錯誤!系統(tǒng)還沒有足夠的可用資源量滿足進(jìn)程需要”<

cout<<“試分配完成!”<

cout<<“需要繼續(xù)實驗嗎?(y-繼續(xù) n終止)”;} else if(ch=='N'||ch=='n'){ cout<<“感謝您的使用,祝您愉快!”<>ch);return 0;}

void Print(){ int i,j;cout<<“ 進(jìn)程個數(shù) : ”<0){ cout<<“ |”;} cout<

void Input(){ for(int j=0;j>Available[j]){ if(Available[j]<0)cout<<“輸入數(shù)字無效,請重新輸入”<

{ for(int m=0;m>Max[l][m]){ if(Max[l][m]<0)cout<<“輸入數(shù)字無效,請重新輸入”<>Allocation[l][m])if(Allocation[l][m]<0)cout<<“輸入數(shù)字無效,請重新輸入”<

void tryfenpei(int i){ for(int f=0;f

//安全檢測函數(shù)

void checksafe(int s){ int Work, flag, temp[t], i,j,l=0,k=0;bool Finish[t];for(i=0;i

} if(l==5)//一共有三類資源A B C,一條進(jìn)程下面的安全性檢測只檢測了A類。如果A類通過了,那么還要判斷B類,C類。否則不用 { for(i=0;i

} i=s;//s傳遞進(jìn)來賦給i,s是用戶輸入的進(jìn)程號(有主函數(shù)里的in傳遞進(jìn)來)while(i

if(Finish[i]==false&&Need[i][j]<=Work){ Work=Work+Allocation[i][j];Finish[i]=true;temp[k]=i;//cout<<“temp=”<”;cout<

六、執(zhí)行結(jié)果:

七、實驗總結(jié)

通過本次實驗了解到用銀行家算法來預(yù)防死鎖是可靠的,但也是非常保守的,因為它限制了進(jìn)程對資源的存取,從而降低了進(jìn)程的并發(fā)運行程度。死鎖檢測并不限制進(jìn)程對資源的申請,只要有,就分配,但這也可能造成死鎖。但由于死鎖并不是經(jīng)常發(fā)生的,故大大提高了系統(tǒng)運行的效率。

總之,通過本實驗,使我進(jìn)一步加深理解和掌握銀行家算法。

第四篇:操作系統(tǒng)課程設(shè)計(銀行家算法的模擬實現(xiàn))

操作系統(tǒng)課程設(shè)計

(銀行家算法的模擬實現(xiàn))

一、設(shè)計目的

1、進(jìn)一步了解進(jìn)程的并發(fā)執(zhí)行。

2、加強對進(jìn)程死鎖的理解。

3、用銀行家算法完成死鎖檢測。

二、設(shè)計內(nèi)容

給出進(jìn)程需求矩陣C、資源向量R以及一個進(jìn)程的申請序列。使用進(jìn)程啟動拒絕和資源分配拒絕(銀行家算法)模擬該進(jìn)程組的執(zhí)行情況。

三、設(shè)計要求

1、初始狀態(tài)沒有進(jìn)程啟動。

2、計算每次進(jìn)程申請是否分配,如:計算出預(yù)分配后的狀態(tài)情況(安全狀態(tài)、不安全狀態(tài)),如果是安全狀態(tài),輸出安全序列。

3、每次進(jìn)程申請被允許后,輸出資源分配矩陣A和可用資源向量V。

4、每次申請情況應(yīng)可單步查看,如:輸入一個空格,繼續(xù)下個申請。

四、算法原理

1、銀行家算法中的數(shù)據(jù)結(jié)構(gòu)(1)、可利用資源向量Available,這是一個含有m個元素的數(shù)組,其中的每個元素代表一類可利用資源的數(shù)目,其初始值是系統(tǒng)中所配置的該類全部資源的數(shù)目,其數(shù)值隨該類資源的分配和回收而動態(tài)改變。如果Available[j]=K,則表示系統(tǒng)中現(xiàn)有Rj類資源K個。

(2)、最大需求矩陣Max,這是一個n*m的矩陣,它定義了系統(tǒng)中n個進(jìn)程中的每一個進(jìn)程對m類資源的最大需求。如果Max[i,j]=K,則表示進(jìn)程i需要Rj類資源的最大數(shù)目為K。

(3)、分配矩陣Allocation。這也是一個n*m的矩陣,它定義了系統(tǒng)中每一類資源當(dāng)前已分配給每一進(jìn)程的資源數(shù)。如果Allocation[i,j]=K,則表示進(jìn)程i當(dāng)前已經(jīng)分得Rj類資源的數(shù)目為K。

(4)、需求矩陣Need。這也是一個n*m的矩陣,用以表示每個進(jìn)程尚需要的各類資源數(shù)。如果Need[i,j]=K,則表示進(jìn)程i還需要Rj類資源K個,方能完成其任務(wù)。上述三個矩陣間存在以下關(guān)系:

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

2、銀行家算法應(yīng)用

模擬實現(xiàn)Dijkstra的銀行家算法以避免死鎖的出現(xiàn),分兩部分組成:一是銀行家算法(掃描);二是安全性算法。

(1)銀行家算法(掃描)

設(shè)Requesti是進(jìn)程Pi的請求向量,如果Requesti[j]=K,表示進(jìn)程Pi需要K個Ri類型的資源。當(dāng)Pi發(fā)出資源請求后,系統(tǒng)按下述步驟進(jìn)行檢查:

①如果Requesti[j]<=Need[i,j],便轉(zhuǎn)向步驟②;否則認(rèn)為出錯,因為它所需的資源數(shù)已經(jīng)超過了它所宣布的最大值。

②如果Requesti[j]<=Allocation[i,j],便轉(zhuǎn)向步驟③;否則表示尚無足夠資源,Pi需等待。

③系統(tǒng)試探著把資源分配給進(jìn)程Pi,并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)值。

Available[j]=Available-Requesti[j];

Allocation[i,j]=Allocation[i,j]+Requesti[j];

Need[i,j]=Need[i,j]-Requesti[j];

④系統(tǒng)執(zhí)行安全性算法,檢查此次資源分配后,系統(tǒng)是否處于安全狀態(tài)。若安全,才正式將資源分配給進(jìn)程Pi,已完成本次分配;否則,將本次的試探分配作廢,恢復(fù)原來資源的分配狀態(tài),讓進(jìn)程Pi等待。

(2)安全性算法

系統(tǒng)所執(zhí)行的安全性算法可描述如下:

①設(shè)置兩個向量:一個是工作向量Work;它表示系統(tǒng)可提供給進(jìn)程繼續(xù)運行所需要的各類資源的數(shù)目,它含有m個元素,在執(zhí)行安全性算法開始時,work=Available;另一個是Finish;它表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,使之運行完成。開始時先做Finish[i]=false;當(dāng)有足夠資源分配給進(jìn)程時,再令Finish[i]=true;

②從進(jìn)程集合中找到能滿足下述條件的進(jìn)程:

一是Finish[i]==false;二是Need[i,j]<=Work[j];若找到,執(zhí)行步驟③,否則,執(zhí)行步驟④;

③當(dāng)進(jìn)程Pi獲得資源后,可順利執(zhí)行,直至完成,并釋放出分配給它的資源,故應(yīng)執(zhí)行:

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

Finish[i]=true;

go to step②;

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

五、設(shè)計思路

1、進(jìn)程一開始向系統(tǒng)提出最大需求量;

2、進(jìn)程每次提出新的需求(分期貸款)都統(tǒng)計是否超出它事先提出的最大需求量;

3、若正常,則判斷該進(jìn)程所需剩余量(包括本次申請)是否超出系統(tǒng)所掌握的剩余資源量,若不超出,則分配,否則等待。

六、程序運行調(diào)試結(jié)果

1、程序初始化

2、檢測系統(tǒng)資源分配是否安全結(jié)果

七、小結(jié)

“銀行家算法的模擬實現(xiàn)”是本學(xué)期操作系統(tǒng)課程的課程設(shè)計。在設(shè)計此程序的過程中我們遇到過許多問題也學(xué)到了很多東西。通過這周的課程設(shè)計,我加深了對銀行家算法的理解,掌握了銀行家算法避免死鎖的過程和方法,理解了死鎖產(chǎn)生的原因和條件以及避免死鎖的方法。所編寫程序基本實現(xiàn)了銀行家算法的功能,并在其基礎(chǔ)上考慮了輸出顯示格式的美觀性,使界面盡可能友好。并且在編程時將主要的操作都封裝在函數(shù)中,這樣使程序可讀性增強,使程序更加清晰明了。在算法的數(shù)據(jù)結(jié)構(gòu)設(shè)計上考慮了很長時間。在程序設(shè)計中先后參考了很多網(wǎng)絡(luò)資料也參考了一些別人寫的的程序綜合這些算法思想和自己的思路對程序做了很好的設(shè)計方式對一些算法的優(yōu)越性等也作了一些考慮。當(dāng)然,在編寫和調(diào)試過程中我遇到了許多的問題,通過網(wǎng)上查詢資料、翻閱課本、向同學(xué)請教、多次調(diào)試等方法逐漸解決了大部分問題。讓我收獲很多,相信在今后的生活中也有一定幫助。

附:程序源代碼:

#include #include #include # define m 50

int no1;//進(jìn)程數(shù) int no2;//資源數(shù) int r;int allocation[m][m],need[m][m],available[m],max[m][m];char name1[m],name2[m];//定義全局變量 void main(){ void check();void print();int i,j,p=0,q=0;char c;int request[m],allocation1[m][m],need1[m][m],available1[m];printf(“**********************************************n”);printf(“* 銀行家算法的設(shè)計與實現(xiàn) *n”);printf(“**********************************************n”);printf(“請輸入進(jìn)程總數(shù):n”);scanf(“%d”,&no1);printf(“請輸入資源種類數(shù):n”);scanf(“%d”,&no2);printf(“請輸入Max矩陣:n”);for(i=0;i

for(j=0;j

scanf(“%d”,&max[i][j]);//輸入已知進(jìn)程最大資源需求量

printf(“請輸入Allocation矩陣:n”);for(i=0;i

for(j=0;j

scanf(“%d”,&allocation[i][j]);//輸入已知的進(jìn)程已分配的資源數(shù)

for(i=0;i

for(j=0;j

need[i][j]=max[i][j]-allocation[i][j];//根據(jù)輸入的兩個數(shù)組計算出need矩陣的值

printf(“請輸入Available矩陣n”);for(i=0;i

scanf(“%d”,&available[i]);//輸入已知的可用資源數(shù)

print();//輸出已知條件

check();//檢測T0時刻已知條件的安全狀態(tài)

if(r==1)//如果安全則執(zhí)行以下代碼

{

do{ q=0;p=0;printf(“n請輸入請求資源的進(jìn)程號(0~4):n”);

for(j=0;j<=10;j++)

{

scanf(“%d”,&i);

if(i>=no1)

{

printf(“輸入錯誤,請重新輸入:n”);

continue;

}

else break;

}

printf(“n請輸入該進(jìn)程所請求的資源數(shù)request[j]:n”);

for(j=0;j

scanf(“%d”,&request[j]);

else //請求滿足條件

{

for(j=0;j

{

available1[j]=available[j];

allocation1[i][j]=allocation[i][j];

need1[i][j]=need[i][j];

//保存原已分配的資源數(shù),仍需要的資源數(shù)和可用的資源數(shù)

available[j]=available[j]-request[j];

allocation[i][j]+=request[j];

need[i][j]=need[i][j]-request[j];//系統(tǒng)嘗試把資源分配給請求的進(jìn)程

}

print();

check();//檢測分配后的安全性

if(r==0)//如果分配后系統(tǒng)不安全

{

for(j=0;j

{

available[j]=available1[j];

allocation[i][j]=allocation1[i][j];

need[i][j]=need1[i][j];//還原已分配的資源數(shù),仍需要的資源數(shù)和可用的資源數(shù)

}

printf(“返回分配前資源數(shù)n”);

print();

}

}

}printf(“n你還要繼續(xù)分配嗎?Y or N ?n”);

//判斷是否繼續(xù)進(jìn)行資源分配 for(j=0;jneed[i][j])p=1;//判斷請求是否超過該進(jìn)程所需要的資源數(shù)

if(p)

printf(“請求資源超過該進(jìn)程資源需求量,請求失敗!n”);else {

for(j=0;j

if(request[j]>available[j])q=1;//判斷請求是否超過可用資源數(shù)

if(q)

printf(“沒有做夠的資源分配,請求失敗!n”);

c=getche();

}while(c=='y'||c=='Y');} }

void check()//安全算法函數(shù) { int k,f,v=0,i,j;int work[m],a[m];bool finish[m];r=1;for(i=0;i

finish[i]=false;// 初始化進(jìn)程均沒得到足夠資源數(shù)并完成for(i=0;i

k=no1;do{

for(i=0;i

{

if(finish[i]==false)

{

f=1;

for(j=0;j

if(need[i][j]>work[j])

f=0;

if(f==1)//找到還沒有完成且需求數(shù)小于可提供進(jìn)程繼續(xù)運行的資源數(shù)的進(jìn)程

{

finish[i]=true;

a[v++]=i;//記錄安全序列號

for(j=0;j

work[j]+=allocation[i][j];//釋放該進(jìn)程已分配的資源

}

}

}

k--;//每完成一個進(jìn)程分配,未完成的進(jìn)程數(shù)就減1 }while(k>0);f=1;for(i=0;i

if(finish[i]==false)

{

f=0;

break;

} } if(f==0)//若有進(jìn)程沒完成,則為不安全狀態(tài)

{

printf(“系統(tǒng)處在不安全狀態(tài)!”);

r=0;} else {

printf(“n系統(tǒng)當(dāng)前為安全狀態(tài),安全序列為:n”);

for(i=0;i

printf(“p%d ”,a[i]);//輸出安全序列

} }

void print()//輸出函數(shù) { int i,j;printf(“n”);printf(“*************此時刻資源分配情況*********************n”);printf(“進(jìn)程名/號 | Max | Allocation | Need |n”);for(i = 0;i < no1;i++)

{

printf(“ p%d/%d ”,i,i);

for(j = 0;j < no2;j++){printf(“%d ”,max[i][j]);}

for(j = 0;j < no2;j++)

{printf(“ %d ”,allocation[i][j]);}

for(j = 0;j < no2;j++)

{printf(“ %d ”,need[i][j]);}

printf(“n”);

} printf(“n”);

printf(“各類資源可利用的資源數(shù)為:”);

for(j = 0;j < no2;j++)

{printf(“ %d”,available[j]);}

} printf(“n”);

(程序結(jié)束)

第五篇:操作系統(tǒng)課程設(shè)計編程序模擬銀行家算法

課程設(shè)計報告書

課程名稱:

操作系統(tǒng)原理

目:

編程序模擬銀行家算法

名:

信息工程系

專業(yè)班級:

軟件

名:

學(xué)

號:

指導(dǎo)教師:

2013年

X

X

學(xué)院信息工程系

設(shè)

務(wù)

課程名稱:

操作系統(tǒng)原理課程設(shè)計

指導(dǎo)教師:

班級名稱:

軟件

開課系、教研室:

軟件與信息安全

一、課程設(shè)計目的與任務(wù)

操作系統(tǒng)課程設(shè)計是《操作系統(tǒng)原理》課程的后續(xù)實踐課程,旨在通過一周的實踐訓(xùn)練,加深學(xué)生對理論課程中操作系統(tǒng)概念,原理和方法的理解,加強學(xué)生綜合運用操作系統(tǒng)原理、Linux系統(tǒng)、C語言程序設(shè)計技術(shù)進(jìn)行實際問題處理的能力,進(jìn)一步提高學(xué)生進(jìn)行分析問題和解決問題的能力,包含系統(tǒng)分析、系統(tǒng)設(shè)計、系統(tǒng)實現(xiàn)和系統(tǒng)測試的能力。

學(xué)生將在指導(dǎo)老師的指導(dǎo)下,完成從需求分析,系統(tǒng)設(shè)計,編碼到測試的全過程。

二、課程設(shè)計的內(nèi)容與基本要求

1、課程設(shè)計題目

編程序模擬銀行家算法

2、課程設(shè)計內(nèi)容

本課程設(shè)計要求在Linux操作系統(tǒng),GCC編譯環(huán)境下開發(fā)。

銀行家算法是避免死鎖的一種重要方法,本實驗要求用用c/c++語言在Linux操作系統(tǒng)環(huán)境下編寫和調(diào)試一個簡單的銀行家算法程序。加深了解有關(guān)資源申請、避免死鎖等概念,并體會和了解死鎖和避免死鎖的具體實施方法。

思想:將一定數(shù)量的資金供多個用戶周轉(zhuǎn)使用,當(dāng)用戶對資金的最大申請量不超過現(xiàn)存資金時可接納一個新客戶,客戶可以分期借款,但借款總數(shù)不能超過最大的申請量。銀行家對客戶的借款可以推遲支付,但是能夠使客戶在有限的時間內(nèi)得到借款,客戶得到所有的借款后能在有限的時間內(nèi)歸還。用銀行家算法分配資源時,測試進(jìn)程對資源的最大需求量,若現(xiàn)存資源能滿足最大需求就滿足當(dāng)前進(jìn)程的申請,否則推遲分配,這樣能夠保證至少有一個進(jìn)程可以得到所需的全部資源而執(zhí)行到結(jié)束,然后歸還資源,若OS能保證所有進(jìn)程在有限的時間內(nèi)得到所需資源則稱系統(tǒng)處于安全狀態(tài)。

3、設(shè)計報告撰寫格式要求:

1設(shè)計題目與要求

設(shè)計思想

3系統(tǒng)結(jié)構(gòu)

數(shù)據(jù)結(jié)構(gòu)的說明和模塊的算法流程圖

使用說明書(即用戶手冊):內(nèi)容包含如何登錄、退出、讀、寫等操作說明

運行結(jié)果和結(jié)果分析(其中包括實驗的檢查結(jié)果、程序的運行情況)

自我評價與總結(jié)

附錄:程序清單,注意加注釋(包括關(guān)鍵字、方法、變量等),在每個模塊前加注釋;

三、課程設(shè)計步驟及時間進(jìn)度和場地安排

本課程設(shè)計將安排在第15周,教育技術(shù)中心。具體安排如下:

第一天

下發(fā)任務(wù)書,學(xué)生查閱資料

第二天

系統(tǒng)設(shè)計和原型開發(fā)

第三,四天

系統(tǒng)功能實現(xiàn)

第五天

系統(tǒng)調(diào)試

測試

打包和驗收

四、課程設(shè)計考核及評分標(biāo)準(zhǔn)

課程設(shè)計考核將綜合考慮學(xué)生考勤和參與度,系統(tǒng)設(shè)計方案正確性,系統(tǒng)設(shè)計和開發(fā)效果以及課程設(shè)計報告書的質(zhì)量。具體評分標(biāo)準(zhǔn)如下:

設(shè)置六個評分點

(1)設(shè)計方案正確,具有可行性、創(chuàng)新性;

25分

(2)系統(tǒng)開發(fā)效果較好;

25分

(3)態(tài)度認(rèn)真、刻苦鉆研、遵守紀(jì)律;

10分

(4)設(shè)計報告規(guī)范、課程設(shè)計報告質(zhì)量高、參考文獻(xiàn)充分

20分

(5)課程設(shè)計答辯概念清晰,內(nèi)容正確

10分

(6)課程設(shè)計期間的課堂考勤、答疑與統(tǒng)籌考慮。

10分

按上述六項分別記分后求和,總分按五級記分法記載最后成績。

優(yōu)秀(100~90分),良好(80~89分),中等(70~79分),及格(60~69分),不及格(0~59分)

1.題目要求與實驗?zāi)康?.1

實驗?zāi)康模?/p>

1.1.1進(jìn)一步理解利用銀行家算法避免死鎖的問題;

1.1.2在了解和掌握銀行家算法。

1.1.3理解和掌握安全序列、安全性算法

1.2

設(shè)計題目:

編程序模擬銀行家算法

1.3

要求

本實驗要求用用

c/c語言在Linux

操作系統(tǒng)環(huán)境下編寫和調(diào)試一個簡單的銀行家算法程序。加深了解有關(guān)資源申請、避免死鎖等概念,并體會和了解死鎖和避免死鎖的具體實施方法。

1.4

實驗內(nèi)容

1.4.1編寫安全性算法;

1.4.2編寫銀行家算法,并編制銀行家算法通用程序,將調(diào)試結(jié)果顯示在計算機(jī)屏幕上,再檢測和筆算的一致性。

設(shè)計思想

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

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

3.需求分析

3.1問題描述:利用銀行家算法模擬計算機(jī)系統(tǒng)分配資源的過程。

3.2要求:

3.2.11、以課本例題中數(shù)據(jù)為例,模擬資源分配過程。

3.2.2、系統(tǒng)中資源種類,各類資源數(shù)目,進(jìn)程申請資源數(shù)目可任意輸入,模擬資源分配過程。

4.系統(tǒng)結(jié)構(gòu)

初始化函數(shù)init()開始

輸入進(jìn)程的數(shù)目m

輸入資源種類n

輸入每個進(jìn)程最多所需的各種資源數(shù)

輸入每個進(jìn)程分配的資源數(shù)

輸入各個資源現(xiàn)有數(shù)目

初始化函數(shù)init()結(jié)束

輸入提示:

輸入有誤重新輸入

5.數(shù)據(jù)結(jié)構(gòu)的說明和模塊的算法流程圖

5.1

數(shù)據(jù)結(jié)構(gòu):

①可利用資源向量

Available

是個含有

m

個元素的數(shù)組,其中的每一個元素代表一類可利用的資源數(shù)目。如果

AvailablejK,則表示系統(tǒng)中現(xiàn)有

Rj

類資源

K

個。

②最大需求矩陣

Max

這是一個

n×m的矩陣,它定義了系統(tǒng)中

n

個進(jìn)程中的每一個進(jìn)程對

m

類資源的最大需求。如果

MaxijK,則表示進(jìn)程

i

需要

Rj

類資源的最大數(shù)目為

K。

③分配矩陣

Allocation

這也是一個

n×m的矩陣,它定義了系統(tǒng)中每一類資源當(dāng)前已分配給每一進(jìn)程的資源數(shù)。如果

AllocationijK,則表示進(jìn)程

i

當(dāng)前已分得

Rj

類資源的數(shù)目為

K。

④需求矩陣

Need。

這也是一個

n×m的矩陣,用以表示每一個進(jìn)程尚需的各類資源數(shù)。如果NeedijK,則表示進(jìn)程

i

還需要

Rj

類資源

K

個,才可以完成其任務(wù)。

5.2

程序流程圖:

①、系統(tǒng)主要過程流程

預(yù)分配

安全?

實際分配打印輸出

退出系統(tǒng)

Request[i]>Available[i]?

Request[i]>need[i]?

提出申請

打印輸出此時刻資源分配情況

進(jìn)入系統(tǒng)

輸入:

1.繼續(xù)分配

2.退出

進(jìn)入初始化

②、安全性算法流程圖

調(diào)用safty()函數(shù)

Work[]=Available[],Finish[]=False

Need[]<=work[]且Finsh[]=Falsse?

Work[]=work[]+Alloccation[],Finish[]=Ture

所有進(jìn)程的Finsh[]=Ture?

實際分配輸出安全序列并打印出

輸出提示系統(tǒng)不安全

調(diào)用結(jié)束

用戶手冊

6.1

首先在終端中使用

vi

編輯器建立

c的源文件

6.2

然后使用

gcc

編輯器編譯生成可執(zhí)行文件

6.3

使用命令./當(dāng)前名字,來執(zhí)行

7.運行結(jié)果和結(jié)果分析

7.1

運行結(jié)果:

申請成功如圖

2,申請失敗如圖

3:

申請金額在需求范圍之內(nèi)同意

申請金額在需求范圍之外拒絕

7.2

結(jié)果分析

首先是自己定義

個用戶所需的金額數(shù),銀行可以給用戶貸款的總金額數(shù)是100,用戶

Id

號的范圍是在0

4,超過

之后的id

請求貸款,會顯示拒絕提示信息,每個客戶的貸款數(shù)量必須是在之前定義的范圍之內(nèi),如果超出,也會出現(xiàn)錯誤提示,只有在規(guī)定的用戶

id

和在客戶所要求金額的范圍之內(nèi)請求,才會給予貸款,并且輸出安全序列號。

8.自我評價與總結(jié)

一周的課程設(shè)計結(jié)束了。在這一周里,我收獲很多,以前都是在自己的教室由我們自己的老師進(jìn)行講課,這次學(xué)校沒有這樣做,而是請的校外的老師給我們做課程設(shè)計,讓我們體會一下真正的公司是怎樣做業(yè)務(wù)的。在這一周里我做一個模擬銀行家算法。我覺得在著手設(shè)計前設(shè)計的思路是很重要的。只有思路清晰才能進(jìn)行下一階段的設(shè)計。這樣才能完成整個程序的設(shè)計,完成整個文報告的書寫。

課程設(shè)計這幾天學(xué)到的東西還真不少。以前不清楚的現(xiàn)在都暴露出來了。以前認(rèn)為學(xué)了沒用的東西現(xiàn)在也用到了。這次的課程設(shè)計使我進(jìn)一步了解了調(diào)度與死鎖的問題。以及有關(guān)資源申請的問題、避免死鎖的具體實施方法。深入了解了銀行家算法的資源申請和資源分配的過程及原則。保證系統(tǒng)處于安全狀態(tài)。

經(jīng)過本周的課程設(shè)計,我對操作系統(tǒng)的掌握又進(jìn)了一步,收獲了很多知識。,終于我了由于對

c

語言不夠熟練,在試驗過程中,進(jìn)行了反復(fù)的修改和調(diào)試,解銀行家算法的基本原理,并且在此次的課程設(shè)計中我又復(fù)習(xí)了一下

c

語言,加深了對它的了解,而且在課程設(shè)計的過程中我們同樣學(xué)會了如何簡單的操作與使用

Linux

操作系統(tǒng),學(xué)習(xí)到了許多

Linux

操作系統(tǒng)中常用的一些密令。

這次的設(shè)計數(shù)據(jù)是通過一道實際的題目來體現(xiàn)銀行家算法避免死鎖的問題,先用銀行家算法給其中一個進(jìn)程分配資源,看它所請求的資源是否大于它的需求量,才和系統(tǒng)所能給的資源相比較.讓進(jìn)程形成一個安全隊列看系統(tǒng)是否安全.再利用安全性算法檢查此時系統(tǒng)是否安全。

操作系統(tǒng)的基本特征是并發(fā)與共享。系統(tǒng)允許多個進(jìn)程并發(fā)執(zhí)行,并且共享系統(tǒng)的軟、硬件資源。為了最大限度的利用計算機(jī)系統(tǒng)的資源,操作系統(tǒng)應(yīng)采用動態(tài)分配的策略,但是這樣就容易因資源不足,分配不當(dāng)而引起“死鎖”。而我本次課程設(shè)計就是得用銀行家算法來避免“死鎖”。銀行家算法就是一個分配資源的過程,使分配的序列不會產(chǎn)生死鎖。此算法的中心思想是:按該法分配資源時,每次分配后總存在著一個進(jìn)程,如果讓它單獨運行下去,必然可以獲得它所需要的全部資源,也就是說,它能結(jié)束,而它結(jié)束后可以歸還這類資源以滿足其他申請者的需要。

通過這次實驗,我體會到銀行家算法的重要性,銀行家算法是避免死鎖的主要方法,其思路在很多方面都非常值得我來學(xué)習(xí)借鑒。

附錄:

主要源程序

參考文獻(xiàn)

[1]

張堯?qū)W主編.計算機(jī)操作系統(tǒng)教程(第三版).北京:清華大學(xué)出版社,2006

[2]

張堯?qū)W編.計算機(jī)操作系統(tǒng)教程(第三版)習(xí)題解答與實驗指導(dǎo).北京:清華大學(xué)出版社,2006

[3]

湯子瀛主編.計算機(jī)操作系統(tǒng)(第三版).西安:西安電子科技大學(xué)出版社,2001

[4]

張坤等編.操作系統(tǒng)實驗教程.北京:清華大學(xué)出版社,2008

[5]

張麗芬等編.操作系統(tǒng)實驗教程.北京:清華大學(xué)出版社,2006

[6]

屠祁等編.操作系統(tǒng)基礎(chǔ)(第三版).北京:清華大學(xué)出版社,2000

[7]

馮耀霖等編.操作系統(tǒng).西安:西安電子科技大學(xué)出版社,2001

[8]

左萬歷.計算機(jī)操作系統(tǒng)教程(第二版).北京:高等教育出版社,2004

[9]譚浩強.《C語言程序設(shè)計》.北京:清華大學(xué)出版社2003

[8]

龐麗華.《操作系統(tǒng)原理》(第四版).北京.華中科技大學(xué)出版社

2002

設(shè)計過程中質(zhì)疑(或答辯)記載:

1.銀行家算法的主要思想是什么?

答:一個進(jìn)程進(jìn)入系統(tǒng)時分配資源之前,判斷系統(tǒng)是否是安全的,即看它所請求的資源是否大于它的最大需求量,若正常,則判斷該進(jìn)程所需剩余剩余量(包括本次申請)是否超出系統(tǒng)所掌握的剩余資源量,若不超出,則分配,否則等待。

2.銀行家算法的主要問題是什么?

答:要求每個進(jìn)程必須事先知道資源的最大需求量,而且,在系統(tǒng)運行過程中,考查每個進(jìn)程對各類資源的申請需花費較多的時間。

3.在銀行家算法中各個資源存在什么關(guān)系?

答:該進(jìn)程所需要的資源數(shù)NEED[m][n]=MAX[m][n](該進(jìn)程所需要的最多的資源數(shù))-----ALLOCATION[m][n](該進(jìn)程所占有的資源數(shù))

指導(dǎo)教師評語:

簽名:

****年**月**日

下載計算機(jī)操作系統(tǒng) 課程設(shè)計報告 銀行家算法word格式文檔
下載計算機(jī)操作系統(tǒng) 課程設(shè)計報告 銀行家算法.doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報,并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

相關(guān)范文推薦

    操作系統(tǒng)課程設(shè)計銀行家算法的模擬實現(xiàn)

    操作系統(tǒng)課程設(shè)計報告專業(yè)計算機(jī)科學(xué)與技術(shù)學(xué)生姓名班級學(xué)號指導(dǎo)教師完成日期信息工程學(xué)院題目:銀行家算法的模擬實現(xiàn)一、設(shè)計目的本課程設(shè)計是學(xué)習(xí)完“操作系統(tǒng)原理”課程后......

    操作系統(tǒng)課程設(shè)計實驗報告-用C++實現(xiàn)銀行家算法

    操 作 系 統(tǒng) 實 驗 報 告 (2) 學(xué)院:計算機(jī)科學(xué)與技術(shù)學(xué)院 班級:計091 學(xué)號:姓名: 時間:2011/12/30 目 錄 1. 實驗名稱……………………………………………………3 2. 實驗?zāi)康摹?.....

    東南大學(xué)操作系統(tǒng)實驗報告--銀行家算法

    操作系統(tǒng)實驗三:銀行家算法的實現(xiàn) 一、 基本信息: a) 實驗題目:銀行家算法的實現(xiàn) b) 完成人姓名:韓璐璐 c) 學(xué)號:71114115 d) 報告日期:2016.5.27 二、 實驗?zāi)康?通過實驗,加深對......

    計算機(jī)操作系統(tǒng) 課程設(shè)計報告(推薦)

    操作系統(tǒng)課程設(shè)計報告 時間:2010-12-20~2010-12-31 地點:信息技術(shù)實驗中心 計算機(jī)科學(xué)與技術(shù)專業(yè) 2008級2班15號 楊 燁2010-12-31 信息工程學(xué)院計算機(jī)科學(xué)與技術(shù)082班 目錄 一......

    操作系統(tǒng)課程設(shè)計----模擬銀行家算法避免死鎖(優(yōu)秀范文五篇)

    模擬通過銀行家算法避免死鎖 一、 銀行家算法產(chǎn)生的背景及目的 1:在多道程序系統(tǒng)中,雖然借助于多個進(jìn)程的并發(fā)執(zhí)行來改善系統(tǒng)的利用率,提高系統(tǒng)的吞吐量,但可能發(fā)生一種危險—死......

    操作系統(tǒng)課程設(shè)計六種算法

    《計算機(jī)操作系統(tǒng)》 學(xué)號:班級:軟技姓名:張靖偉 課 程 設(shè) 計 報 告 4班 1367003270 目錄 1 實驗:進(jìn)程調(diào)度算法——時間片輪轉(zhuǎn)算法 2 實驗:銀行家算法3 實驗:分區(qū)分配算法——4......

    操作系統(tǒng)銀行家算法(避免死鎖)實驗報告

    操作系統(tǒng)實驗:銀行家算法 姓名:李天瑋班級:軟工1101 實驗內(nèi)容: 在windows系統(tǒng)中實現(xiàn)銀行家算法程序。 學(xué)號:201126630117 實現(xiàn)銀行家算法所用的數(shù)據(jù)結(jié)構(gòu): 假設(shè)有5個進(jìn)程3類資源,則......

    操作系統(tǒng)課程設(shè)計-磁盤調(diào)度算法

    1. 實驗題目: 磁盤調(diào)度算法。 建立相應(yīng)的數(shù)據(jù)結(jié)構(gòu); 在屏幕上顯示磁盤請求的服務(wù)狀況; 將一批磁盤請求的情況存磁盤文件,以后可以讀出并重放; 計算磁頭移動的總距離及平均移動距......

主站蜘蛛池模板: 男女肉粗暴进来动态图| 少妇中文字幕乱码亚洲影视| 挺进邻居丰满少妇的身体| 夜夜爽狠狠天天婷婷五月| 成人亚洲国产精品一区不卡| 尹人香蕉久久99天天拍| 日韩一区二区三区无码a片| 强制高潮18xxxxhd日韩| 色综合久久久无码中文字幕| 99久久久无码国产精品古装| 色综合天天综合网国产| 精品无码av一区二区三区不卡| 99re6在线视频精品免费| 久久99精品国产麻豆| 狠狠色丁香婷婷久久综合不卡| 成人艳情一二三区| 内射小寡妇无码| 成人啪精品视频网站午夜| 精品无码中文字幕在线| 插鸡网站在线播放免费观看| 亚洲精品无码永久在线观看性色| 色妺妺av爽爽影院| 国产∨亚洲v天堂无码久久久| 97超碰人人人人人人少妇| 久久国产av影片| 国产无套乱子伦精彩是白视频| 国产精品毛片无码| 女女互磨互喷水高潮les呻吟| 久久天天躁狠狠躁夜夜2020老熟妇| 亚洲国产美女精品久久久久| 男女性高爱潮是免费国产| 欧洲多毛裸体xxxxx| 亚洲精品久久国产精品| 久爱www人成免费网站| av无码av天天av天天爽| 亚洲国产欧美在线观看| 国产伦精品一区二区三区| 亚洲色欲色欲www在线看| 亚洲午夜成人精品无码app| 日韩人妻少妇一区二区| 国产大陆亚洲精品国产|