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

操作系統(tǒng)銀行家算法實(shí)驗(yàn)報(bào)告

時(shí)間:2019-05-14 02:35:40下載本文作者:會(huì)員上傳
簡(jiǎn)介:寫寫幫文庫(kù)小編為你整理了多篇相關(guān)的《操作系統(tǒng)銀行家算法實(shí)驗(yàn)報(bào)告》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫(kù)還可以找到更多《操作系統(tǒng)銀行家算法實(shí)驗(yàn)報(bào)告》。

第一篇:操作系統(tǒng)銀行家算法實(shí)驗(yàn)報(bào)告

實(shí)驗(yàn)四

死鎖

一、實(shí)驗(yàn)?zāi)康?/p>

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

二、實(shí)驗(yàn)題目

系統(tǒng)中有m個(gè)同類資源被n個(gè)進(jìn)程共享,每個(gè)進(jìn)程對(duì)資源的最大需求數(shù)分別為S1, S2,…,Sn,且 Max(Si)<=m,(i=1,2,…n)。進(jìn)程可以動(dòng)態(tài)地申請(qǐng)資源和釋放資源。編寫一個(gè)程序,現(xiàn)銀行家算法,當(dāng)系統(tǒng)將資源分配給某一進(jìn)程而不會(huì)死鎖時(shí),就分配之。否則,推遲分配,并顯示適當(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);//安全檢測(cè)函數(shù) };

四、銀行家算法的流程圖 開(kāi)始初始化資源類數(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);//安全檢測(cè)函數(shù)

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

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

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

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

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

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

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

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

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

//安全檢測(cè)函數(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)程下面的安全性檢測(cè)只檢測(cè)了A類。如果A類通過(guò)了,那么還要判斷B類,C類。否則不用 { for(i=0;i

} i=s;//s傳遞進(jìn)來(lái)賦給i,s是用戶輸入的進(jìn)程號(hào)(有主函數(shù)里的in傳遞進(jìn)來(lái))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é)果:

七、實(shí)驗(yàn)總結(jié)

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

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

第二篇:東南大學(xué)操作系統(tǒng)實(shí)驗(yàn)報(bào)告--銀行家算法

操作系統(tǒng)實(shí)驗(yàn)三:銀行家算法的實(shí)現(xiàn)

一、基本信息:

a)實(shí)驗(yàn)題目:銀行家算法的實(shí)現(xiàn) b)完成人姓名:韓璐璐 c)學(xué)號(hào):71114115 d)報(bào)告日期:2016.5.27

二、實(shí)驗(yàn)?zāi)康?/p>

通過(guò)實(shí)驗(yàn),加深對(duì)多實(shí)例資源分配系統(tǒng)中死鎖避免方法——銀行家算法的理解,掌握Windows環(huán)境下銀行家算法的實(shí)現(xiàn)方法,同時(shí)鞏固利用Windows API進(jìn)行共享數(shù)據(jù)互斥訪問(wèn)和多線程編程的方法。

三、實(shí)驗(yàn)內(nèi)容

1.在Windows操作系統(tǒng)上,利用Win32 API編寫多線程應(yīng)用程序?qū)崿F(xiàn)銀行家算法。

2.創(chuàng)建n個(gè)線程來(lái)申請(qǐng)或釋放資源,只有保證系統(tǒng)安全,才會(huì)批準(zhǔn)資源申請(qǐng)。3.通過(guò)Win32 API提供的信號(hào)量機(jī)制,實(shí)現(xiàn)共享數(shù)據(jù)的并發(fā)訪問(wèn)。

四、程序運(yùn)行時(shí)的初值和運(yùn)行結(jié)果(系統(tǒng)截圖)

五、源程序并附上注釋 #include #include #include #include using namespace std;int r[3] = { 3, 3, 2 };//系統(tǒng)擁有的資源 int r0 = 0, r1 = 0, r2 = 0;//記錄申請(qǐng)資源 class pcb { public: int id;bool state;int max[3];int alc[3];int need[3];

pcb(){ } void init(){

state = false;

cout << “請(qǐng)輸入進(jìn)程的id,各個(gè)資源總需求量和已占用資源” << endl;

cin >> id;

cout << “a,b,c三種資源的最大使用量” << endl;

cin >> max[0] >> max[1] >> max[2];

cout << “a,b,c三種資源的已占有量” << endl;

cin >> alc[0] >> alc[1] >> alc[2];} int rd(int n){

return rand()%(n + 1);

} int request(){

// Sleep(1000);

r0 = rd(max[0]alc[1]);

r2 = rd(max[2]alc[0]))&& r1 ==(max[1]alc[2]))

{

r[0] = r[0] + alc[0];

r[1] = r[1] + alc[1];

r[2] = r[2] + alc[2];

return 1;

}

return 2;

} };bool safe(vector

temp, int i){ int u = r[0]r1, l = r[2]1;j++)

temp[j] = temp[j + 1];temp.pop_back();int size = temp.size();//記錄下容器內(nèi)還有多少個(gè)進(jìn)程

// int range[size];//記錄下隊(duì)列

int x = 0;//計(jì)數(shù)器

while(!temp.empty()){

static int j = 0;

if((temp[j].max[0]temp[j].alc[1])<= k &&

(temp[j].max[2]1;e++)

temp[e] = temp[e + 1];

temp.pop_back();

if(j >= temp.size())

j = 0;

}

else

{

j++;

if(j >= temp.size())

j = 0;

}

x++;

if(x ==(size*size))

{

cout << “沒(méi)有安全隊(duì)列,以上情況不成立” << endl;

cout << endl;

return false;

}

} return true;} int main(){ srand(time(0));pcb p[4];vector

vp;for(int i = 0;i<4;i++){

p[i].init();

vp.push_back(p[i]);} int x = 0;//計(jì)算器

int c;cout << “請(qǐng)選擇分配資源方法:1.銀行家算法 2.隨機(jī)算法” << endl;cin >> c;switch(c){ case 1:

while(!vp.empty())

{

int a;

static int i = 0;

if((a = vp[i].request())!= 0)

{

if(a == 1)

endl;

r[1] << “ c

{

cout << ”進(jìn)程“ << vp[i].id << ”已經(jīng)結(jié)束“ <<

for(int j = i;j

r[1] = r[1]r2;

cout << ”a資源還剩“ << r[0] << ” b資源還剩“ << r[1] << ” c資源還剩“ << r[2] << endl;

cout << endl;

}

i++;

if(i >= vp.size())

i = 0;

}

}

else

i++;

if(i >= vp.size())

i = 0;

x++;

if(x >= 200)

{

cout << ”初始化的表不安全“ << endl;

return 0;

}

}

cout << ”進(jìn)程已經(jīng)全部結(jié)束“ << endl;

break;case 2:

while(!vp.empty())

{

int a2;

static int i2 = 0;

if((a2 = vp[i2].request())!= 0)

{

if(a2 == 1)

{

cout << ”進(jìn)程“ << vp[i2].id << ”已經(jīng)結(jié)束“ << endl;

for(int j = i2;j

r[1] = r[1]r2;

cout << ”a資源還剩“ << r[0] << ” b資源還剩“ << r[1] << ” c資源還剩“ << r[2] << endl;

cout << endl;

i2++;

if(i2 >= vp.size())

i2 = 0;

}

}

else

i2++;

if(i2 >= vp.size())

i2 = 0;

x++;

if(x >= 200)

{

cout << ”產(chǎn)生死鎖“ << endl;

return 0;

}

}

cout << ”進(jìn)程已經(jīng)全部結(jié)束“ << endl;

break;default:

cout << ”選擇錯(cuò)誤“ << endl;

break;

} system(”pause");return 1;}

要求:實(shí)驗(yàn)報(bào)告以電子版的形式通過(guò)Email提交給助教,做到內(nèi)容翔實(shí)、圖表清晰,層次分明,標(biāo)題突出。

一班 助教老師:丁文江 Email:dingwj@seu.edu.cn 二班 助教老師:張潤(rùn)環(huán) Email:seu-zrh@seu.edu.cn 兩位助教老師工作地點(diǎn):九龍湖校區(qū)計(jì)算機(jī)樓333房間

第三篇:操作系統(tǒng)銀行家算法(避免死鎖)實(shí)驗(yàn)報(bào)告

操作系統(tǒng)實(shí)驗(yàn):銀行家算法

姓名:李天瑋

班級(jí):軟工1101 實(shí)驗(yàn)內(nèi)容:

在windows系統(tǒng)中實(shí)現(xiàn)銀行家算法程序。

學(xué)號(hào):201126630117 實(shí)現(xiàn)銀行家算法所用的數(shù)據(jù)結(jié)構(gòu):

假設(shè)有5個(gè)進(jìn)程3類資源,則有如下數(shù)據(jù)結(jié)構(gòu): 1.MAX[5,3] 5個(gè)進(jìn)程對(duì)3類資源的最大需求量。2.AVAILABLE[3]系統(tǒng)可用資源數(shù)。

3.ALLOCATION[5,3]5個(gè)進(jìn)程已經(jīng)得到3類資源的資源量。4.NEED[5,3]5個(gè)進(jìn)程還需要3類資源的資源量。

銀行家算法:

設(shè)進(jìn)程1提出請(qǐng)求Request[N],則銀行家算法按如下規(guī)則進(jìn)行判斷。(1)如果Request[N]<=NEED[1,N],則轉(zhuǎn)(2);否則,出錯(cuò)。(2)如果Request[N]<=AVALIABLE,則轉(zhuǎn)(3);否則,出錯(cuò)。(3)系統(tǒng)試探非配資源,修改相關(guān)數(shù)據(jù)。

AVALIABLE=AVALIABLE-REQUEST ALLOCATION=ALLOCATION+REQUEST NEED=NEED-REQUEST(4)系統(tǒng)執(zhí)行安全性檢查,如安全,則分配成立;否則試探險(xiǎn)性分配作廢,系統(tǒng)恢復(fù)原狀,進(jìn)程等待。

安全性檢查:

(1)設(shè)置兩個(gè)工作向量WORK=AVAILABLE;FINISH[M]=FALSE.(2)從晉城集合中找到一個(gè)滿足下述條件的進(jìn)程,F(xiàn)INISH[i]=FALSE NEED<=WORK 如找到,執(zhí)行(3);否則,執(zhí)行(4)。

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

WORK=WORK+ALLOCATION FINISH[i]=TRUE GOTO(2)

(4)如所有進(jìn)程FINISH[M]=TRUE,則表示安全;否則系統(tǒng)不安全。

1.用init()函數(shù)對(duì)于數(shù)據(jù)的初始化

關(guān)鍵代碼:

#define M 5 #define N 3

void init(){

cout<<“請(qǐng)輸入5個(gè)進(jìn)程對(duì)3類資源最大資源需求量:”<

} cout<<“請(qǐng)輸入系統(tǒng)可用的資哩源數(shù):”<

{ } cin>>AVAILABLE[j];for(int j=0;j>MAX[i][j];} //cout<

cout<<“請(qǐng)輸入5個(gè)進(jìn)程已經(jīng)-的到的3類資源的資源量:”<

for(int i=0;i

} cout<<“請(qǐng)?輸?入?5個(gè)?進(jìn)?程ì還1需è要癮3類え?資哩?源′的?資哩?源′量?:”<

} for(int j=0;j>NEED[i][j];} //cout<>ALLOCATION[i][j];} //cout<

}// Stack around the variable 'AVAILABLE' was corrupted.顯示數(shù)據(jù)詳細(xì)信息

進(jìn)行測(cè)試 輸入一號(hào)進(jìn)程號(hào),并給需要申請(qǐng)資源設(shè)定為{1,0,2}

檢驗(yàn)錯(cuò)誤輸入時(shí)候的報(bào)錯(cuò)信息

檢驗(yàn)當(dāng)再次申請(qǐng)0號(hào)資源并申請(qǐng)資源數(shù)目為{0,2,0}時(shí),系統(tǒng)提示系統(tǒng)不安全申請(qǐng)不成功。

每當(dāng)驗(yàn)證申請(qǐng)成功后會(huì)進(jìn)行的修改操作:

if(flag=='Y'||flag=='y')//進(jìn)?行D數(shù)簓據(jù)Y修T改?

{ changdata(i);

}

} if(chkerr(0)){

} else showdata();rstordata(i);showdata();else showdata();cout<>flag;退?出?演Y示?”;

第四篇:銀行家算法實(shí)驗(yàn)報(bào)告

計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)報(bào)告

何美西109253030212

一、實(shí)驗(yàn)名稱:銀行家算法

二、實(shí)驗(yàn)?zāi)康模恒y行家算法是避免死鎖的一種重要方法,通過(guò)編寫一個(gè)簡(jiǎn)單的銀行家算法程序,加深了解有關(guān)資源申請(qǐng)、避免死鎖等概念,并體會(huì)和了解死鎖和避免死鎖的具體實(shí)施方法。

三、問(wèn)題分析與設(shè)計(jì):

1、算法思路:先對(duì)用戶提出的請(qǐng)求進(jìn)行合法性檢查,即檢查請(qǐng)求是否大于需要的,是否大于可利用的。若請(qǐng)求合法,則進(jìn)行預(yù)分配,對(duì)分配后的狀態(tài)調(diào)用安全性算法進(jìn)行檢查。若安全,則分配;若不安全,則拒絕申請(qǐng),恢復(fù)到原來(lái)的狀態(tài),拒絕申請(qǐng)。

2、銀行家算法步驟:(1)如果Requesti<o(jì)r =Need,則轉(zhuǎn)向步驟(2);否則,認(rèn)為出錯(cuò),因?yàn)樗枰馁Y源數(shù)已超過(guò)它所宣布的最大值。

(2)如果Request<o(jì)r=Available,則轉(zhuǎn)向步驟(3);否則,表示系統(tǒng)中尚無(wú)足夠的資源,進(jìn)程必須等待。

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

Available=Available-Request[i];Allocation=Allocation+Request;Need=Need-Request;(4)系統(tǒng)執(zhí)行安全性算法,檢查此次資源分配后,系統(tǒng)是否處于安全狀態(tài)。

3、安全性算法步驟:

(1)設(shè)置兩個(gè)向量

①工作向量Work。它表示系統(tǒng)可提供進(jìn)程繼續(xù)運(yùn)行所需要的各類資源數(shù)目,執(zhí)行安全算法開(kāi)始時(shí),Work=Allocation;②布爾向量Finish。它表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,使之運(yùn)行完成,開(kāi)始時(shí)先做Finish[i]=false,當(dāng)有足夠資源分配給進(jìn)程時(shí),令Finish[i]=true。

(2)從進(jìn)程集合中找到一個(gè)能滿足下述條件的進(jìn)程:

①Finish[i]=false ②Need

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

Work=Work+Allocation;Finish[i]=true;轉(zhuǎn)向步驟(2)。(4)如果所有進(jìn)程的Finish[i]=true,則表示系統(tǒng)處于安全狀態(tài);否則,系統(tǒng)處于不安全狀態(tài)。

4、流程圖: 系統(tǒng)主要過(guò)程流程圖

銀行家算法流程圖

安全性算法流程圖

四、實(shí)驗(yàn)代碼:

#include #include #include #define False 0 #define True 1 int Max[100][100]={0};//各進(jìn)程所需各類資源的最大需求 int Avaliable[100]={0};//系統(tǒng)可用資源 char name[100]={0};//資源的名稱

int Allocation[100][100]={0};//系統(tǒng)已分配資源 int Need[100][100]={0};//還需要資源 int Request[100]={0};//請(qǐng)求資源向量 int temp[100]={0};//存放安全序列 int Work[100]={0};//存放系統(tǒng)可提供資源 int p[100]={0};int q[100][100]={0};int z[100][100]={0};int M=100;//作業(yè)的最大數(shù)為100 int N=100;//資源的最大數(shù)為100 int gg=1;void showdata()//顯示資源矩陣 { int i,j;cout<

int changdata(int i)//進(jìn)行資源分配 { int j;for(j=0;j

for(i=0;i

cout<

}//變分配數(shù) Finish[i]=True;temp[k]=i;cout<<“ ”;cout<<“true”<<“ ”;cout<

for(i=0;i

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

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

} cout<

return 0;} }

cout<

cout<<“安全序列為:”;for(i=0;i”;} cout<>i;//輸入須申請(qǐng)的資源號(hào)

cout<>Request[j];//輸入需要申請(qǐng)的資源 } for(j=0;jNeed[i][j])//判斷申請(qǐng)是否大于需求,若大于則出錯(cuò)

{ cout<Avaliable[j])//判斷申請(qǐng)是否大于當(dāng)前資源,若大于則

{ //出錯(cuò)

cout<

int main()//主函數(shù) {

int t=1,i,j,number,choice,m,n,flag;char ming;cout<<“*****************銀行家算法的設(shè)計(jì)與實(shí)現(xiàn)*****************”<>n;N=n;for(i=0;i>ming;name[i]=ming;cout<<“資源的數(shù)量:”;cin>>number;Avaliable[i]=number;} cout<>m;M=m;cout<>Max[i][j];do{ flag=0;cout<>Allocation[i][j];if(Allocation[i][j]>Max[i][j])flag=1;Need[i][j]=Max[i][j]-Allocation[i][j];} if(flag)cout<

showdata();//顯示各種資源

safe();//用銀行家算法判定系統(tǒng)是否安全

while(1){

if(t==1){ cout<

t=0;} else break;cout<

}

return 1;}

五、程序執(zhí)行結(jié)果: cin>>t;cout<

六、實(shí)驗(yàn)總結(jié)

多個(gè)進(jìn)程同時(shí)運(yùn)行時(shí),系統(tǒng)根據(jù)各類系統(tǒng)資源的最大需求和各類系統(tǒng)的剩余資源為進(jìn)程安排安全序列,使得系統(tǒng)能快速且安全地運(yùn)行進(jìn)程,不至發(fā)生死鎖。銀行家算法是避免死鎖的主要方法,其思路在很多方面都非常值得我們來(lái)學(xué)習(xí)借鑒。

09信管(2)班

何美西 109253030212

第五篇:銀行家算法實(shí)驗(yàn)報(bào)告

計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)報(bào)告

一、實(shí)驗(yàn)名稱:銀行家算法

二、實(shí)驗(yàn)?zāi)康模恒y行家算法是避免死鎖的一種重要方法,通過(guò)編寫一個(gè)簡(jiǎn)單的銀行家算法程序,加深了解有關(guān)資源申請(qǐng)、避免死鎖等概念,并體會(huì)和了解死鎖和避免死鎖的具體實(shí)施方法。

三、問(wèn)題分析與設(shè)計(jì):

1、算法思路:先對(duì)用戶提出的請(qǐng)求進(jìn)行合法性檢查,即檢查請(qǐng)求是否大于需要的,是否大于可利用的。若請(qǐng)求合法,則進(jìn)行預(yù)分配,對(duì)分配后的狀態(tài)調(diào)用安全性算法進(jìn)行檢查。若安全,則分配;若不安全,則拒絕申請(qǐng),恢復(fù)到原來(lái)的狀態(tài),拒絕申請(qǐng)。

2、銀行家算法步驟:(1)如果Requesti<o(jì)r =Need,則轉(zhuǎn)向步驟(2);否則,認(rèn)為出錯(cuò),因?yàn)樗枰馁Y源數(shù)已超過(guò)它所宣布的最大值。

(2)如果Request<o(jì)r=Available,則轉(zhuǎn)向步驟(3);否則,表示系統(tǒng)中尚無(wú)足夠的資源,進(jìn)程必須等待。

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

Available=Available-Request[i];Allocation=Allocation+Request;Need=Need-Request;(4)系統(tǒng)執(zhí)行安全性算法,檢查此次資源分配后,系統(tǒng)是否處于安全狀態(tài)。

3、安全性算法步驟:

(1)設(shè)置兩個(gè)向量

①工作向量Work。它表示系統(tǒng)可提供進(jìn)程繼續(xù)運(yùn)行所需要的各類資源數(shù)目,執(zhí)行安全算法開(kāi)始時(shí),Work=Allocation;②布爾向量Finish。它表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,使之運(yùn)行完成,開(kāi)始時(shí)先做Finish[i]=false,當(dāng)有足夠資源分配給進(jìn)程時(shí),令Finish[i]=true。

(2)從進(jìn)程集合中找到一個(gè)能滿足下述條件的進(jìn)程:

①Finish[i]=false ②Need

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

Work=Work+Allocation;Finish[i]=true;轉(zhuǎn)向步驟(2)。

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

4、流程圖: 系統(tǒng)主要過(guò)程流程圖

銀行家算法流程圖

安全性算法流程圖

四、實(shí)驗(yàn)代碼:

//#define M 5 //#define N 3 #include //本實(shí)驗(yàn)中使用到的庫(kù)函數(shù) #include #include int max[5][1];//開(kāi)始定義銀行家算法中需要用到的數(shù)據(jù) int allocation[5][1];int need[5][1];int available[1];int request[5][1];char *finish[5];int safe[5];int n,i,m;int k=0;int j=0;int work[1];int works[5][1];

void line()//美化程序,使程序運(yùn)行時(shí)更加明朗美觀 { printf(“-----------------n”);} void start()//表示銀行家算法開(kāi)始 { line();printf(“ 銀行家算法開(kāi)始n”);printf(“--死鎖避免方法 line();} void end()//表示銀行家算法結(jié)束 { line();printf(” 銀行家算法結(jié)束,謝謝使用n“);line();} void input()//輸入銀行家算法起始各項(xiàng)數(shù)據(jù) {

for(n=0;n<5;n++)

{

printf(”請(qǐng)輸入進(jìn)程P%d的相關(guān)信息:n“,n);

printf(”Max:“);

for(m=0;m<1;m++)

scanf(”%d“,&max[n][m]);

printf(”Allocation:“);

for(m=0;m<1;m++)

scanf(”%d“,&allocation[n][m]);

n”);

}

for(m=0;m<1;m++)

need[n][m]=max[n][m]-allocation[n][m];printf(“請(qǐng)輸入系統(tǒng)可利用資源數(shù)Available:”);for(m=0;m<1;m++)

} void output()//輸出系統(tǒng)現(xiàn)有資源情況 { line();printf(“資源情況 Max Allocation Need Availablen”);printf(“進(jìn)程 A A A A n”);line();for(n=0;n<5;n++){ printf(“P%d%3d%3d%3d”,n,max[n][0],allocation[n][0],need[n][0]);

} line();}

void change()//當(dāng)Request[i,j]<=Available[j]時(shí),系統(tǒng)把資源分配給進(jìn)程P[i],Available[j]和Need[i,j]發(fā)生改變

{ for(m=0;m<1;m++){ if(n==0)else

printf(“n”);

printf(“%3d%3dn”,available[0]);scanf(“%d”,&available[m]);

} } available[m]-=request[i][m];allocation[i][m]+=request[i][m];need[i][m]-=request[i][m];void outputsafe()//輸出安全序列的資源分配表 { printf(“該安全序列的資源分配圖如下:n”);line();printf(“資源情況 Work Need Allocation Work+Allocation Finishn”);printf(“進(jìn)程 A A A A n”);line();for(n=0;n<5;n++)

printf(“P%d%9d%3d%3d%5d%12sn”,safe[n],works[safe[n]][0],need[safe[n]][0],allocation[safe[n]][0],works[safe[n]][0]+allocation[safe[n]][0],finish[n]);line();} int check()//安全性算法 { printf(“開(kāi)始執(zhí)行安全性算法……n”);for(m=0;m<1;m++)//數(shù)組work和finish初始化

work[m]=available[m];for(n=0;n<5;n++){

} finish[n]=“false”;safe[n]=0;k=0;for(m=0;m<5;m++)for(n=0;n<5;n++)

if(strcmp(finish[n],“false”)==0 && need[n][0]<=work[0])//查找可以分配資源但尚未分配到資源的進(jìn)程

{

safe[k]=n;//以數(shù)組safe[k]記下各個(gè)進(jìn)程得到

分配的資源的順序

works[safe[k]][0]=work[0];

放出分配給它的資源

work[0]+=allocation[n][0];//進(jìn)程執(zhí)行后釋

finish[n]=“ture”;//finish[n]變?yōu)?以示該進(jìn)

程完成本次分

}

k++;for(m=0;m<5;m++)//判斷是否所有進(jìn)程分配資源完成{

0

素都為ture } else

if(m==4)//此處m=4表示所有數(shù)組finish的所有元if(strcmp(finish[m],“false”)==0){

printf(“找不到安全序列,系統(tǒng)處于不安全狀態(tài)。n”);return 0;//找不到安全序列,結(jié)束check函數(shù),返回 {

printf(“找到安全序列P%d->P%d->P%d->P%d->P%d,系統(tǒng)是安全的n”,safe[0],safe[1],safe[2],safe[3],safe[4]);

} return 1;} void main()//主程序開(kāi)始 { start();for(;j==0;)//確認(rèn)輸入數(shù)據(jù)的正確性,若輸入錯(cuò)誤,重新輸入

{

入:“);

} printf(”數(shù)據(jù)確認(rèn)無(wú)誤,算法繼續(xù)。n“);if(check()==0)//若check函數(shù)返回值為0,表示輸入的初始數(shù)據(jù)找不到安全序列,無(wú)法進(jìn)行下一步,程序結(jié)束

{

} for(;j==1;)//當(dāng)有多個(gè)進(jìn)程請(qǐng)求資源時(shí),循環(huán)開(kāi)始

{

printf(”請(qǐng)輸入請(qǐng)求資源的進(jìn)程i(0、1、2、3、4):“);//輸入發(fā)出請(qǐng)求向量的進(jìn)程及請(qǐng)求向量 end();exit(0);input();printf(”以下為進(jìn)程資源情況,請(qǐng)確認(rèn)其是否正確:n“);output();printf(”數(shù)據(jù)是否無(wú)誤:n正確:輸入1n錯(cuò)誤:輸入0n請(qǐng)輸

}

j=1;

outputsafe();//輸出安全序列的資源分配表

scanf(“%d”,&j);

scanf(“%d”,&i);printf(“請(qǐng)輸入進(jìn)程P%d的請(qǐng)求向量Request%d:”,i,i);for(n=0;n<1;n++)

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

for(;request[i][0]>need[i][0];)//若請(qǐng)求向量大于需求資源,則認(rèn)為是輸入錯(cuò)誤,要求重新輸入

{

printf(“數(shù)據(jù)輸入有誤,請(qǐng)重試!n請(qǐng)輸入進(jìn)程P%d的請(qǐng)求向量Request%d:”,i,i);

提供分配

n“,i);

} if(request[i][0]<=available[0])//判斷系統(tǒng)是否有足夠資源

for(n=0;n<1;n++)

scanf(”%d“,&request[i][n]);{

} else

printf(”系統(tǒng)沒(méi)有足夠的資源,進(jìn)程P%d需要等待。printf(“系統(tǒng)正在為進(jìn)程P%d分配資源……n”,i);change();//分配資源 j=0;if(j==0)//j=0表示系統(tǒng)有足夠資源分配的情況 {

printf(“當(dāng)前系統(tǒng)資源情況如下:n”);//輸出分配資源后的系統(tǒng)資源分配情況

分配無(wú)效

output();

if(check()==0)//若找不到安全系列,則之前的資源 {

printf(“本次資源分配作廢,恢復(fù)原來(lái)的資源分配

狀態(tài)。n”);

資源狀態(tài)

輸入:“);

for(m=0;m<1;m++)//恢復(fù)分配資源前的系統(tǒng)

}

}

{

}

output();//輸出系統(tǒng)資源狀態(tài)

available[m]+=request[i][m];allocation[i][m]-=request[i][m];need[i][m]+=request[i][m];printf(”是否還有進(jìn)程請(qǐng)求資源?n是:輸入1n否:輸入0n請(qǐng)

scanf(“%d”,&j);//若還有進(jìn)程請(qǐng)求資源,j=1,之前的for循環(huán)條件滿足

} end();}

五、程序執(zhí)行結(jié)果:

六、實(shí)驗(yàn)總結(jié)

多個(gè)進(jìn)程同時(shí)運(yùn)行時(shí),系統(tǒng)根據(jù)各類系統(tǒng)資源的最大需求和各類系統(tǒng)的剩余資源為進(jìn)程安排安全序列,使得系統(tǒng)能快速且安全地運(yùn)行進(jìn)程,不至發(fā)生死鎖。銀行家算法是避免死鎖的主要方法,其思路在很多方面都非常值得我們來(lái)學(xué)習(xí)借鑒。

下載操作系統(tǒng)銀行家算法實(shí)驗(yàn)報(bào)告word格式文檔
下載操作系統(tǒng)銀行家算法實(shí)驗(yàn)報(bào)告.doc
將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
點(diǎn)此處下載文檔

文檔為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)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

相關(guān)范文推薦

    銀行家算法_實(shí)驗(yàn)報(bào)告

    課程設(shè)計(jì)報(bào)告 課程設(shè)計(jì)名稱 共享資源分配與銀行家算法 系(部)專業(yè)班級(jí)姓 名學(xué) 號(hào)指導(dǎo)教師 年 月 日 第 1 頁(yè) 共 1 頁(yè) 、 目 錄 一、課程設(shè)計(jì)目的和意義 ........................

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

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

    操作系統(tǒng)實(shí)驗(yàn)報(bào)告-利用銀行家算法避免死鎖(推薦五篇)

    計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)報(bào)告 題 目 利用銀行家算法避免死鎖一、 實(shí)驗(yàn)?zāi)康模?1、加深了解有關(guān)資源申請(qǐng)、避免死鎖等概念,并體會(huì)和了解死鎖和避免死鎖的具體實(shí)施方法。 2、要求編寫和......

    銀行家算法實(shí)驗(yàn)報(bào)告[推薦閱讀]

    實(shí)驗(yàn)三 銀行家算法 (1)死鎖產(chǎn)生的原因和必要條件是什么? 原因: a) 系統(tǒng)資源不足; b) 進(jìn)程運(yùn)行推進(jìn)的順序不合適; c) 資源分配不當(dāng)。 如果系統(tǒng)資源充足,進(jìn)程的資源請(qǐng)求都能夠得到滿......

    死鎖_銀行家算法實(shí)驗(yàn)報(bào)告

    實(shí)驗(yàn)?zāi)康?銀行家算法是避免死鎖的一種重要方法。通過(guò)編寫一個(gè)模擬動(dòng)態(tài)資源分配的銀行家算法程序,進(jìn)一步深入理解死鎖、產(chǎn)生死鎖的必要條件、安全狀態(tài)等重要概念,并掌握避免死......

    銀行家算法《操作系統(tǒng)》課程設(shè)計(jì)報(bào)告

    《操作系統(tǒng)》課程設(shè)計(jì)報(bào)告課題:銀行家算法專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)生姓名班級(jí)計(jì)算機(jī)學(xué)號(hào)指導(dǎo)教師信息工程學(xué)院一、實(shí)驗(yàn)要求和實(shí)驗(yàn)?zāi)康膶?shí)驗(yàn)?zāi)康模罕菊n程設(shè)計(jì)是學(xué)生學(xué)習(xí)完《操作系......

    操作系統(tǒng)實(shí)驗(yàn)報(bào)告(clock算法)

    實(shí)驗(yàn)四 頁(yè)面置換算法 一、實(shí)驗(yàn)?zāi)康?本實(shí)驗(yàn)主要對(duì)操作系統(tǒng)中請(qǐng)求分頁(yè)式內(nèi)存管理及其應(yīng)用的一些關(guān)鍵算法進(jìn)行模擬。學(xué)生通過(guò)設(shè)計(jì)與實(shí)現(xiàn)Clock算法,能夠加強(qiáng)對(duì)相應(yīng)理論的理解,并對(duì)......

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

    《計(jì)算機(jī)操作系統(tǒng)》 課 程 設(shè) 計(jì) 報(bào) 告 題 目: 銀行家算法班 級(jí): XXXXXXXXXXXXXXXX 姓 名: XXM 學(xué) 號(hào): XXXXXXXXXXXX 指導(dǎo)老師: XXXXXXXXXXXXXX 設(shè)計(jì)時(shí)間: XXXXXXXXXXXXXXX......

主站蜘蛛池模板: 婷婷久久香蕉五月综合加勒比| a一区二区三区乱码在线 | 欧洲| 天天躁日日躁狠狠躁av麻豆男男| 日本成本人片视频免费| 午夜福利yw在线观看2020| av无码国产在线观看岛国| 国产精品自产拍在线观看中文| 少妇一区二区三区| 国产女人乱子对白av片| 中文字幕无码视频专区| 成年无码av片| 久久人妻xunleige无码| 蜜桃视频一区二区三区在线观看| 久久国产精品波多野结衣av| 色欲久久久天天天综合网| 在线观看的av网站| 久久 国产 尿 小便 嘘嘘| 18禁免费吃奶摸下激烈视频| 老熟女高潮一区二区三区| 亚洲中文有码字幕日本| 国产传媒麻豆剧精品av| 色偷一区国产精品| 国产成人一卡2卡3卡4卡| 亚洲成a人片在线观看中文| 精品亚洲国产成人av在线| 亚洲国产精品一区二区www| 亚洲国产精品国自产拍电影| 丰满少妇被猛烈进入av久久| 国产玖玖玖九九精品视频靠爱| 国产成人8x视频网站入口| 亚洲午夜福利在线观看| 妺妺跟我一起洗澡没忍住| 久久精品成人欧美大片| 国产免费又色又爽又黄软件| 日日噜噜噜夜夜爽爽狠狠视频| 国产xxxx做受性欧美88| 天堂а√中文在线官网| 国产日产欧洲无码视频无遮挡| 精品少妇无码av无码专区| 激情国产一区二区三区四区| 亚洲人成自拍网站在线观看|