欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

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

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

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

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

      何美西109253030212

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

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

      三、問題分析與設(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ù)到原來的狀態(tài),拒絕申請(qǐng)。

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

      (2)如果Request<o(jì)r=Available,則轉(zhuǎn)向步驟(3);否則,表示系統(tǒng)中尚無足夠的資源,進(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í)行安全算法開始時(shí),Work=Allocation;②布爾向量Finish。它表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,使之運(yùn)行完成,開始時(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)主要過程流程圖

      銀行家算法流程圖

      安全性算法流程圖

      四、實(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ā)生死鎖。銀行家算法是避免死鎖的主要方法,其思路在很多方面都非常值得我們來學(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行家算法是避免死鎖的一種重要方法,通過編寫一個(gè)簡(jiǎn)單的銀行家算法程序,加深了解有關(guān)資源申請(qǐng)、避免死鎖等概念,并體會(huì)和了解死鎖和避免死鎖的具體實(shí)施方法。

      三、問題分析與設(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ù)到原來的狀態(tài),拒絕申請(qǐng)。

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

      (2)如果Request<o(jì)r=Available,則轉(zhuǎn)向步驟(3);否則,表示系統(tǒng)中尚無足夠的資源,進(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í)行安全算法開始時(shí),Work=Allocation;②布爾向量Finish。它表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,使之運(yùn)行完成,開始時(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)主要過程流程圖

      銀行家算法流程圖

      安全性算法流程圖

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

      //#define M 5 //#define N 3 #include //本實(shí)驗(yàn)中使用到的庫(kù)函數(shù) #include #include int max[5][1];//開始定義銀行家算法中需要用到的數(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()//表示銀行家算法開始 { line();printf(“ 銀行家算法開始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(“開始執(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()//主程序開始 { start();for(;j==0;)//確認(rèn)輸入數(shù)據(jù)的正確性,若輸入錯(cuò)誤,重新輸入

      {

      入:“);

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

      {

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

      {

      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ù)是否無誤: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)沒有足夠的資源,進(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)資源分配情況

      分配無效

      output();

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

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

      狀態(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ā)生死鎖。銀行家算法是避免死鎖的主要方法,其思路在很多方面都非常值得我們來學(xué)習(xí)借鑒。

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

      課程設(shè)計(jì)報(bào)告

      課程設(shè)計(jì)名稱 共享資源分配與銀行家算法

      系(部)

      專業(yè)班級(jí)

      學(xué)

      號(hào)

      指導(dǎo)教師

      年 月 日

      、目

      一、課程設(shè)計(jì)目的和意義...................................................................................3

      二、方案設(shè)計(jì)及開發(fā)過程..............................................................................................3

      1.課題設(shè)計(jì)背景.................................................................................................................3 2.算法描述

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

      ............................................................................................................................4 4.主要函數(shù)說明.................................................................................................................4 5.算法流程圖......................................................................................................................5

      三、調(diào)試記錄與分析

      四、運(yùn)行結(jié)果及說明

      ..............................................................................................6

      1.執(zhí)行結(jié)果.........................................................................................................................6 2.結(jié)果分析.........................................................................................................................7

      五、課程設(shè)計(jì)總結(jié)...................................................................................................8

      、一、程設(shè)計(jì)目的和意義

      計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)學(xué)生學(xué)習(xí)完《計(jì)算機(jī)操作系統(tǒng)》課程后,進(jìn)行的一次全面的綜合訓(xùn)練,其目的在于加深催操作系統(tǒng)基礎(chǔ)理論和基本知識(shí)的理解,加強(qiáng)學(xué)生的動(dòng)手能力.銀行家算法是避免死鎖的一種重要方法。通過編寫一個(gè)模擬動(dòng)態(tài)資源分配的銀行家算法程序,進(jìn)一步深入理解死鎖、產(chǎn)生死鎖的必要條件、安全狀態(tài)等重要概念,并掌握避免死鎖的具體實(shí)施方法

      二、方案設(shè)計(jì)及開發(fā)過程

      1.課題設(shè)計(jì)背景

      銀行家算法又稱“資源分配拒絕”法,其基本思想是,系統(tǒng)中的所有進(jìn)程放入進(jìn)程集合,在安全狀態(tài)下系統(tǒng)受到進(jìn)程的請(qǐng)求后試探性的把資源分配給他,現(xiàn)在系統(tǒng)將剩下的資源和進(jìn)程集合中其他進(jìn)程還需要的資源數(shù)做比較,找出剩余資源能滿足最大需求量的進(jìn)程,從而保證進(jìn)程運(yùn)行完成后還回全部資源。這時(shí)系統(tǒng)將該進(jìn)程從進(jìn)程集合中將其清除。此時(shí)系統(tǒng)中的資源就更多了。反復(fù)執(zhí)行上面的步驟,最后檢查進(jìn)程的集合為空時(shí)就表明本次申請(qǐng)可行,系統(tǒng)處于安全狀態(tài),可以實(shí)施本次分配,否則,只要進(jìn)程集合非空,系統(tǒng)便處于不安全狀態(tài),本次不能分配給他。請(qǐng)進(jìn)程等待

      2.算法描述

      1)如果Request[i] 是進(jìn)程Pi的請(qǐng)求向量,如果Request[i,j]=K,表示進(jìn)程Pi需要K個(gè)Rj類型的資源。當(dāng)Pi發(fā)出資源請(qǐng)求后,系統(tǒng)按下述步驟進(jìn)行檢查: 如果Requesti[j]<= Need[i,j],便轉(zhuǎn)向步驟2;否則認(rèn)為出錯(cuò),因?yàn)樗枰馁Y源數(shù)已超過它所宣布的最大值。

      2)如果Requesti[j]<=Available[j],便轉(zhuǎn)向步驟3,否則,表示尚無足夠資源,進(jìn)程Pi須等待。

      3)系統(tǒng)試探著把資源分配給進(jìn)程Pi,并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)值: Available[j]:=Available[j]-Requesti[j];Allocation[i,j]:=Allocation[i,j]+Requesti[j];Need[i,j]:=Need[i,j]-Requesti[j];

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

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

      1.可利用資源向量AVAILABLE。這是一個(gè)含有M個(gè)元素的數(shù)組,其中的每一個(gè)元素代表一類可利用的資源數(shù)目,其3初始值是系統(tǒng)中所配置的該類全部可哦那個(gè)資源的數(shù)目,其數(shù)值隨該類資源的分配和回收而動(dòng)態(tài)的改變。

      2.最大需求矩陣MAX。這是一個(gè)M*N的矩陣,它定義了系統(tǒng)中N個(gè)進(jìn)程中的每一個(gè)進(jìn)程對(duì)M類資源的最大需求。

      3.分配矩陣ALLOCATION。這也是一個(gè)M*N的矩陣,它定義了系統(tǒng)中每一類資源當(dāng)前已分配給每一進(jìn)程的資源數(shù)。

      4.需求矩陣NEED。這也是一個(gè)M*N的矩陣,用以表示每一個(gè)進(jìn)程尚需的各類資源數(shù)。5.NEED[R,W]=MAX[R,W]-ALLOCATION[R,W]

      4.主要函數(shù)說明

      主要的常量變量

      #define W 10 //最大進(jìn)程數(shù)W=10 #define R 20 //最大資源總數(shù)R=20 int AVAILABLE[R];//可利用資源向量 int MAX[W][R];//最大需求矩陣 int ALLOCATION[W][R];//分配矩陣 int NEED[W][R];//需求矩陣 int Request[R];//進(jìn)程請(qǐng)求向量

      void changdata(int k);//進(jìn)程請(qǐng)求資源數(shù)據(jù)改變 int chksec(int s);//系統(tǒng)安全性的檢測(cè)

      主要模塊

      void inputdata()void showdata()void changdata(int k)void restoredata(int k)int chksec(int s)int chkmax(int s)

      、5.算法流程圖

      三、調(diào)試記錄與分析

      調(diào)試通過,程序未出錯(cuò)

      、四、運(yùn)行結(jié)果及說明

      1.執(zhí)行結(jié)果

      、2.結(jié)果分析

      銀行家算法就是當(dāng)接收到一個(gè)系統(tǒng)資源的分配后找到一個(gè)安全序列,使得進(jìn)程間不會(huì)發(fā)生死鎖,若發(fā)生死鎖則讓進(jìn)程等待。

      、五、課程設(shè)計(jì)總結(jié)

      通過本次銀行家算法實(shí)驗(yàn),加深了我對(duì)銀行家算法的了解,掌握了如何利用銀行家算法避免死鎖。實(shí)驗(yàn)中遇到點(diǎn)問題,通過查閱資料、詢問老師順利解決。通過這次的實(shí)踐,使我的理論知識(shí)更加的牢固。

      附錄

      程序源碼:

      #include using namespace std;#define FALSE 0 #define TRUE 1 #define W 10 //最大進(jìn)程數(shù)W=10 #define R 20 //最大資源總數(shù)R=20 int M;int N;int ALL_RESOURCE[W];int AVAILABLE[R];//可利用資源向量 int MAX[W][R];//最大需求矩陣 int ALLOCATION[W][R];//分配矩陣 int NEED[W][R];//需求矩陣 int Request[R];//進(jìn)程請(qǐng)求向量 void inputdata();//數(shù)據(jù)輸入 void showdata();//數(shù)據(jù)顯示

      void changdata(int k);//進(jìn)程請(qǐng)求資源數(shù)據(jù)改變 void restoredata(int k);//數(shù)據(jù)恢復(fù) int chksec(int s);//系統(tǒng)安全性的檢測(cè) int chkmax(int s);//檢測(cè)最大需求

      void bank();//檢測(cè)分配的資源是否合理

      int main(){ int i,j;inputdata();//安全性算法 for(i=0;i=M)

      、cout<<“錯(cuò)誤提示:經(jīng)安全性檢查發(fā)現(xiàn),系統(tǒng)的初始狀態(tài)不安全?。”<

      {

      int i=0,j=0,p;cout<<“請(qǐng)輸入總進(jìn)程數(shù):”<>M;if(M>W)cout<W);cout<>N;if(N>R)cout<R);cout<>ALL_RESOURCE[i];cout<>MAX[i][j];if(MAX[i][j]>ALL_RESOURCE[j])cout<ALL_RESOURCE[j]);} } cout<

      、for(j=0;j

      do{ cin>>ALLOCATION[i][j];

      if(ALLOCATION[i][j]>MAX[i][j])

      cout<

      }while(ALLOCATION[i][j]>MAX[i][j]);} } cout<

      NEED[i][j]=MAX[i][j]-ALLOCATION[i][j];for(j=0;j

      AVAILABLE[j]=0;} } }

      void showdata()//銀行家算法

      { int i,j;cout<<“各種資源的總數(shù)量,即向量all_resource為:”<

      cout<

      、cout<

      cout<

      void changdata(int k)//進(jìn)程請(qǐng)求資源數(shù)據(jù)改變

      { 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 restoredata(int k)//數(shù)據(jù)恢復(fù)

      { int j;for(j=0;j

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

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

      int chksec(int s)//系統(tǒng)安全性的檢測(cè)

      { int WORK,FINISH[W];int i,j,k=0;for(i=0;i

      FINISH[i]=FALSE;for(j=0;j

      WORK=AVAILABLE[j];

      、i=s;do

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

      {

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

      FINISH[i]=TRUE;

      i=0;

      }else

      { i++;

      }

      }while(i

      if(FINISH[i]==FALSE)

      { return 1;

      } } return 0;}

      int chkmax(int s)//檢測(cè)最大需求

      { int j,flag=0;for(j=0;j

      if(MAX[s][j]==ALLOCATION[s][j])

      { flag=1;

      AVAILABLE[j]=AVAILABLE[j]+MAX[s][j];

      MAX[s][j]=0;

      } } return flag;} void bank(){ int i=0,j=0;char flag='Y';while(flag=='Y'||flag=='y'){ i=-1;while(i<0||i>=M){ cout<<“請(qǐng)輸入需申請(qǐng)資源的進(jìn)程號(hào)(從P0到P”<

      cin>>i;if(i<0||i>=M)

      、cout<<“輸入的進(jìn)程號(hào)不存在,重新輸入!”<

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

      { cout<<“進(jìn)程P”<

      cout<<“申請(qǐng)不合理,出錯(cuò)!請(qǐng)重新選擇!”<

      flag='N';

      break;

      }

      else

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

      { cout<<“進(jìn)程P”<

      cout<<“申請(qǐng)不合理,出錯(cuò)!請(qǐng)重新選擇!”<

      flag='N';

      break;

      }

      } } if(flag=='Y'||flag=='y'){ changdata(i);

      if(chksec(i))

      { cout<

      cout<<“該分配會(huì)導(dǎo)致系統(tǒng)不安全!!本次資源申請(qǐng)不成功,不予分配!!”<

      cout<

      restoredata(i);

      }

      else

      { cout<

      cout<<“經(jīng)安全性檢查,系統(tǒng)安全,本次分配成功,且資源分配狀況如下所示:”<

      cout<

      showdata();

      if(chkmax(i))

      {cout<<“在資源分配成功之后,由于該進(jìn)程所需的某些資源的最大需求量已經(jīng)滿足,”<

      cout<<“因此在進(jìn)程結(jié)束后系統(tǒng)將回收這些資源!”<

      showdata();

      、}

      } } cout<>flag;}}

      第四篇:操作系統(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)者。通過本實(shí)驗(yàn)使學(xué)生能進(jìn)一步理解死鎖的概念,并能選擇一個(gè)算法來避免死鎖。

      二、實(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ù) };

      四、銀行家算法的流程圖 開始初始化資源類數(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ù)字無效.”<Need[in][i])cout<<“錯(cuò)誤!超出進(jìn)程需求量”<Available[i])cout<<“錯(cuò)誤!系統(tǒng)還沒有足夠的可用資源量滿足進(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ù)字無效,請(qǐng)重新輸入”<

      { for(int m=0;m>Max[l][m]){ if(Max[l][m]<0)cout<<“輸入數(shù)字無效,請(qǐng)重新輸入”<>Allocation[l][m])if(Allocation[l][m]<0)cout<<“輸入數(shù)字無效,請(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類通過了,那么還要判斷B類,C類。否則不用 { for(i=0;i

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

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

      通過本次實(shí)驗(yàn)了解到用銀行家算法來預(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)行的效率。

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

      第五篇:銀行家算法實(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)求都能夠得到滿足,死鎖出現(xiàn)的可能性就很低,否則就會(huì)因爭(zhēng)奪戰(zhàn)、有限的資源而陷入死鎖。其次,進(jìn)程運(yùn)行推進(jìn)順序與速度不同,也可能產(chǎn)生死鎖。

      必要條件:

      a)互斥條件:一個(gè)資源每次只能被一個(gè)進(jìn)程使用;

      b)請(qǐng)求與保持條件:一個(gè)進(jìn)程因請(qǐng)求資源而阻塞時(shí),對(duì)已獲得的資源保持不放; c)不剝奪條件:進(jìn)程已獲得的資源,在未使用完之前,不能強(qiáng)行剝奪; d)循環(huán)等待條件:若干進(jìn)程之間形成一種頭尾相接的循環(huán)等待資源關(guān)系。

      (2)銀行家算法中的安全性檢查時(shí),Work[j]+Allocation[i,j]的含義是什么?

      work[j]表示當(dāng)前系統(tǒng)可用的第j類資源,Allocation[i][j]表示當(dāng)前已經(jīng)分配給進(jìn)程i使用的第j類資源數(shù)量。Work[j]= Work[j]+ Allocation[i,j]這句的意思是目前進(jìn)程已經(jīng)利用手上資源完成相關(guān)工作了,這些已分配的資源可以重新歸還系統(tǒng)了,所以系統(tǒng)可用的第j類資源work[j]就增加了,增加量就是當(dāng)前進(jìn)程想要?dú)w還的資源量Allocation[i][j]。

      (3)為什么銀行家算法能有效避免死鎖的發(fā)生?算法的主要思想是什么?

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

      銀行家算法的基本思想是分配資源之前,判斷系統(tǒng)是否是安全的;若是,才分配。

      (4)補(bǔ)全Bank()和Safe()函數(shù); void Bank()//銀行家算法 { int q;bool flag = true;printf(“請(qǐng)輸入請(qǐng)求的進(jìn)程向量n”);scanf(“%d”,&q);printf(“請(qǐng)輸入%d個(gè)資源的請(qǐng)求資源數(shù)n”,n);for(int i=0;ineed[q][j]){ flag=false;} } if(flag){ for(int j=0;i

      int Safe()//安全性算法 { //返回1表示安全,返回0表示不安全 int tp=1;int i;int Work[20];int tmp=0,t=0;for(i=0;i

      for(i=0;iWork[j]){ flag = false;} } //所有資源小于需求,允許分配 if(flag){ for(int j=0;j

      for(i=0;i

      (5)給出程序運(yùn)行截圖。

      下載銀行家算法實(shí)驗(yàn)報(bào)告word格式文檔
      下載銀行家算法實(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í)驗(yàn)?zāi)康?銀行家算法是避免死鎖的一種重要方法。通過編寫一個(gè)模擬動(dòng)態(tài)資源分配的銀行家算法程序,進(jìn)一步深入理解死鎖、產(chǎn)生死鎖的必要條件、安全狀態(tài)等重要概念,并掌握避免死......

        東南大學(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)康?通過實(shí)驗(yàn),加深對(duì)......

        銀行家算法的模擬【實(shí)驗(yàn)報(bào)告】(合集5篇)

        實(shí)驗(yàn)二銀行家算法的模擬 專業(yè):信息管理與信息系統(tǒng) 學(xué)號(hào):2014****** 姓名:陳* 實(shí)驗(yàn)日期:2016年12月20日 一、 實(shí)驗(yàn)?zāi)康?銀行家算法是一種最具有代表性的避免死鎖的算法。 要解釋......

        操作系統(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類資源,則......

        操作系統(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è)計(jì)與分析》 實(shí)驗(yàn)報(bào)告 班級(jí)姓名學(xué)號(hào)年 月日 目錄 實(shí)驗(yàn)一二分查找程序?qū)崿F(xiàn)…………………………………………………………………03頁(yè) 實(shí)驗(yàn)二棋盤覆蓋問題(分治法).…......

        銀行家算法《操作系統(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í)完《操作系......