日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

计算机操作系统实验银行家算法,实验六 银行家算法(下)

發布時間:2023/12/9 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算机操作系统实验银行家算法,实验六 银行家算法(下) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實驗六 銀行家算法(下)

一、實驗說明

實驗說明:本次實驗主要是對銀行家算法進行進一步的實踐學習,掌握銀行家算法的整體流程,理解程序測試時每一步的當前狀態,能對當前的資源分配進行預判斷。

二、實驗要求

1、獲取源代碼

2、看懂大致框架

3、嘗試運行并知道運行中輸入的信息的意義

4、通過運行程序分配如下: 總需求:a 8 5 5; b 5 3 4; 已分配:a 4 2 3; b 4 2 2; 現在a 提出分配 1 1 1。 可以分配嗎?

5、請從銀行家算法的理論進行分析上述分配是否會造成死鎖,如果會造成死鎖,說明源代碼并不完整,請同學改進完善源代碼,使其能有效判斷是否存在安全序列,進而拒絕不安全的分配要求。

三、實驗步驟

1、在文檔右邊的虛擬化操作系統中,打開桌面的 Xfce 終端,輸入cd Desktop

2、輸入touch 6-1.c

3、輸入gedit 6-1.c

4、在 gedit 里面輸入源代碼,點擊 save 保存

5、關掉 gedit 編輯器

6、輸入g++ -o 6-1 6-1.c

7、在桌面的 Xfce 終端繼續輸入命令./6-1

8、按要求輸入并運行,觀察結果

9、針對實驗要求5,改進完善源代碼.

四、實驗報告要求 1、通過運行程序分配如下: 總需求:a 8 5 5; b 5 3 4; 已分配:a 4 2 3; b 4 2 2; 現在a 提出分配 1 1 1 完成

2、簡述自己對銀行家算法的理解?

銀行家算法是避免死鎖的算法,在每一個進程進入系統時,都必須申明在運行過程中所需要每種資源的最大單元數目,其數目不嫩超過系統所擁有的資源總量,當進程請求資源時,系統會確認是否有足夠的資源分配給該進程,若有的話,還要進一步判斷如果分配給該進程所申請的資源會不會使系統處于不安全狀態,如果不會,才將資源分配給該進程。

3、針對實驗要求5,改進完善源代碼.對改進之處說明或截圖,并重新進行前面的分配過程,并截圖。

4、將最后的完整源代碼復制。

#include

#include

#include

#include

#include

//#include

const int MAX_P=20;

const int MAXA=10; //定義A類資源的數量

const int MAXB=5;

const int MAXC=7;

using namespace std;

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;

//初始化函數

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;

}

}

//新加作業

void add()

{

char name[20];

int flag=0;

int t;

int need_a,need_b,need_c;

int i;

cout<

cout<

cout<

cout<

cin>>name;

for(i=0;i

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

flag=1;

break;

}

}

if(flag){

cout<

}

else{

cout<

cin>>need_a;

cout<

cin>>need_b;

cout<

cin>>need_c;

t=1;

cout<

if(need_a>banker.remain_a){

cout<

t=0;

}

if(need_b>banker.remain_b){

cout<

t=0;

}

if(need_c>banker.remain_c){

cout<

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<

}

else{

cout<

}

}

}

//為作業申請資源

void bid()

{

char name[20];

int i,p;

int a,b,c;

int flag;

cout<

cout<

cout<

cin>>name;

p=-1;

for(i=0;i

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

p=i;

break;

}

}

if(p!=-1){

cout<

cin>>a;

cout<

cin>>b;

cout<

cin>>c;

flag=1;

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

cout<

flag=0;

}

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

cout<

flag=0;

}

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

cout<

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<

}

else{

cout<

}

}

else{

cout<

}

}

//撤消作業

void finished()

{

char name[20];

int i,p;

cout<

cout<

cout<

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<

}

else{

cout<

}

}

//查看資源情況

void view()

{

int i;

cout<

cout<

cout<

cout<

cout<

cout<

cout<

if(quantity>0){

for(i=0;i

cout<

cout<

cout<

cout<

cout<

}

}

else{

cout<

}

}

//顯示版權信息函數

void version()

{

cout<

cout<

}

int main()

{

int chioce;

int flag=1;

initial();

version();

while(flag){

cout<

cout<

cout<

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<

}

}

return 0;

}

總結

以上是生活随笔為你收集整理的计算机操作系统实验银行家算法,实验六 银行家算法(下)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。