久久综合丝袜日本网手机版,日韩欧美中文字幕在线三区,亚洲精品国产品国语在线,极品在线观看视频婷婷

      <small id="aebxz"><menu id="aebxz"></menu></small>
    1. 模擬銀行家算法

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

      模擬銀行家算法

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

      模擬銀行家算法

      設(shè)計題目:編程序模擬銀行家算法

      設(shè)計目的

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

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

      設(shè)計任務(wù) (在規(guī)定的時間內(nèi)完成下列任務(wù))

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

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

      1. 需求分析

      1.1 課程設(shè)計題目

      編程序模擬銀行家算法

      1.2 課程設(shè)計目的

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

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

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

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

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

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

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

      1.4.1硬件環(huán)境

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

      1.4.2軟件環(huán)境

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

      2. 概要設(shè)計

      2.1 程序流程圖

      2.2 設(shè)計原理及方法

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

      實現(xiàn)銀行家算法要有若干數(shù)據(jù)結(jié)構(gòu),它們用來表示資源分配系統(tǒng)的狀態(tài)。令n表示系統(tǒng)中進程的數(shù)目,m表示資源的分類數(shù)。還需要以下數(shù)據(jù)結(jié)構(gòu):

      1. Available是一個長度為m的向量,它表示每類資源可用的數(shù)量。Available [j]=k,表示rj類資源可用的數(shù)量為k。

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

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

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

      這些數(shù)據(jù)結(jié)構(gòu)的大小和數(shù)值隨時間推移而改變。

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

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

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

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

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

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

      3. 詳細設(shè)計

      3.1 程序源代碼

      #include "string.h"

      #include

      #include

      #define M 5

      #define N 3

      #define FALSE 0

      #define TRUE 1

      /*M個進程對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個進程對N類資源最大資源需求量*/

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

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

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

      /*M個進程還需要N類資源的資源量*/

      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("請輸入需申請資源的進程號(從0到");

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

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

      scanf("%d",&i);

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

      }

      printf("請輸入進程");

      printf("%d",i);

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

      for (j=0;j

      {

      printf("資源");

      printf("%d",j);

      printf(":");

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

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

      {

      printf("進程");

      printf("%d",i);

      printf("申請的資源數(shù)大于進程");

      printf("%d",i);

      printf("還需要");

      printf("%d",j);

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

      flag=N;

      break;

      }

      else

      {

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

      {

      printf("進程");

      printf("%d",i);

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

      printf("%d",j);

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

      flag=N;

      break;

      }

      }

      }

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

      {

      changdata(i);

      if(chkerr(i))

      {

      rstordata(i);

      showdata();

      }

      else

      showdata();

      }

      else

      showdata();

      printf(" ");

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

      scanf("%c",&flag);

      }

      }

      void showdata()

      {

      int i,j;

      printf("系統(tǒng)可用的資源數(shù)為: ");

      printf(" ");

      for (j=0;j

      printf(" 資源");

      printf("%d",j);

      printf(":");

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

      printf(" ");

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

      for (i=0;i

      {

      printf(" 進程");

      printf("%d",i);

      printf(":");

      for (j=0;j

      printf("資源");

      printf("%d",j);

      printf(":");

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

      /*printf(" ");*/

      }

      printf(" ");

      }

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

      for (i=0;i

      {

      printf(" 進程");

      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

      銀行家屬慰問信07-05

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

      焊工的工資算法07-13

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

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

      小小銀行家親子活動方案04-29