亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? suanfa1computer.cpp

?? 模擬計算機進程分配各種資源的數(shù)目總和 M個進程對N類資源最大資源需求量 系統(tǒng)可用資源數(shù) M個進程已經(jīng)得到N類資源的資源量 M個進程還需要N類資源的資源量 請求資源個數(shù)
?? CPP
字號:



#include "string.h" 

#include "iostream"

using namespace std;


#define FALSE 0 

#define TRUE 1 


#define W 10

#define R 20

int M ; //總進程數(shù)

int N ; //資源種類 

int ALL_RESOURCE[W];//各種資源的數(shù)目總和

int MAX[W][R]; //M個進程對N類資源最大資源需求量

int AVAILABLE[R]; //系統(tǒng)可用資源數(shù)

int ALLOCATION[W][R]; //M個進程已經(jīng)得到N類資源的資源量

int NEED[W][R]; //M個進程還需要N類資源的資源量

int Request[R]; //請求資源個數(shù)


void showdata() //函數(shù)showdata,輸出資源分配情況

{ 

int i,j; 

cout<<"各種資源的總數(shù)量(all):"<<endl; 

cout<<" "; 

for (j=0;j<N;j++)cout<<" 資源"<<j<<": "<<ALL_RESOURCE[j]; 

cout<<endl<<endl; 

cout<<"系統(tǒng)目前各種資源可用的數(shù)為(available):"<<endl; 

cout<<" "; 

for (j=0;j<N;j++)cout<<" 資源"<<j<<": "<<AVAILABLE[j]; 

cout<<endl<<endl; 


cout<<" 各進程還需要的資源量(need):"<<endl<<endl; 


cout<<"       資源"<<"     資源"<<"    資源"<<endl;

for (i=0;i<M;i++) 

for (i=0;i<M;i++) 

{ 

cout<<"進程p"<<i<<":   "; 

for (j=0;j<N;j++)cout<<NEED[i][j]<<"        ";; 

cout<<endl; 

} 

cout<<endl; 

cout<<" 各進程已經(jīng)得到的資源量(allocation): "<<endl<<endl; 

cout<<"       資源"<<"     資源"<<"     資源"<<endl;

for (i=0;i<M;i++) 

{ 

cout<<"進程p"<<i<<":    "; 

for (j=0;j<N;j++)cout<<ALLOCATION[i][j]<<"       "; 

cout<<endl; 

} 

cout<<endl; 

}; 


void changdata(int k) //函數(shù)changdata,改變可用資源和已經(jīng)拿到資源和還需要的資源的值

{ 

int j; 

for (j=0;j<N;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) //函數(shù)rstordata,恢復可用資源和已經(jīng)拿到資源和還需要的資源的值

{ 

int j; 

for (j=0;j<N;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) //函數(shù)chkerr,檢查是否安全

{ 

int WORK,FINISH[W],temp[R]; 

int i,j,k=0; 

for(i=0;i<M;i++)FINISH[i]=FALSE; 

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

{ 

WORK=AVAILABLE[j]; 

i=s; 

while(i<M) 

{ 

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

{ 

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

FINISH[i]=TRUE; 

temp[k]=i; 

k++; 

i=0; 

} 

else 

{ 

i++; 

} 

} 

for(i=0;i<M;i++) 

if(FINISH[i]==FALSE) 

{ 

cout<<endl; 

cout<<" 系統(tǒng)不安全!!! 本次資源申請不成功!!!"<<endl; 

cout<<endl; 

return 1; 

} 

} 

cout<<endl; 

cout<<" 經(jīng)安全性檢查,系統(tǒng)安全,本次分配成功。"<<endl; 

cout<<endl; 

cout<<" 本次安全序列:"; 

for(i=0;i<M;i++)cout<<"p"<<temp[i]<<"->"; 

cout<<endl<<endl;

return 0; 

}





附錄

int chkerr2(int s) //函數(shù)chkerr2,檢查是否安全

{ 

int WORK,FINISH[W],temp[R]; 

int i,j,k=0; 

for(i=0;i<M;i++)FINISH[i]=FALSE; 

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

{ 

WORK=AVAILABLE[j]; 

i=s; 

while(i<M) 

{ 

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

{ 

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

FINISH[i]=TRUE; 

temp[k]=i; 

k++; 

i=0; 

} 

else 

{ 

i++; 

} 

} 

for(i=0;i<M;i++) 

if(FINISH[i]==FALSE) 

{ 

cout<<endl; 

cout<<" 本次資源申請成功!!!但系統(tǒng)不安全!!! "<<endl; 

cout<<endl; 

return 1; 

} 

} 

cout<<endl; 

cout<<" 經(jīng)安全性檢查,系統(tǒng)安全,本次分配成功。"<<endl; 

cout<<endl; 

cout<<" 本次安全序列:"; 

for(i=0;i<M;i++)cout<<"p"<<temp[i]<<"->"; 

cout<<endl<<endl;

return 0; 

}


void   bank()   //銀行家算法

{

     int i=0,j=0; 

     char flag='Y'; 

     

     while(flag=='Y'||flag=='y') 

{ 

i=-1; 

while(i<0||i>=M) 

{ 

cout<<" 請輸入需申請資源的進程號(從P0到P"<<M-1<<",否則重輸入!):"; 

cout<<"p";cin>>i; 

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

} 

cout<<" 請輸入進程P"<<i<<"申請的資源數(shù):"<<endl; 

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

{ 

cout<<" 資源"<<j<<": "; 

cin>>Request[j]; 

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

{ 

cout<<" 進程P"<<i<<"申請的資源數(shù)大于進程P"<<i<<"還需要"<<j<<"類資源的資源量!"; 

cout<<"申請不合理,出錯!請重新選擇!"<<endl<<endl; 

flag='N'; 

break; 

} 

else 

{ 

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

{ 

cout<<" 進程P"<<i<<"申請的資源數(shù)大于系統(tǒng)可用"<<j<<"類資源的資源量!"; 

cout<<"申請不合理,出錯!請重新選擇!"<<endl<<endl; 

flag='N'; 

break; 

} 

} 

} 

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

{ 

changdata(i); 

if(chkerr(i)) 

{ 

rstordata(i); 

showdata(); 

} 

else 

showdata(); 

} 

else 

showdata(); 

cout<<endl; 

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

cin>>flag; 

} 


}


 
void randomallocation()   //隨機分配算法

{

int i=0,j=0; 

     char flag='Y'; 

     

     while(flag=='Y'||flag=='y') 

{ 

  i=-1; 

  while(i<0||i>=M) 

   { 

        cout<<" 請輸入需申請資源的進程號(從P0到P"<<M-1<<",否則重輸入!):"; 

        cout<<"p";cin>>i; 

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

    } 

   cout<<" 請輸入進程P"<<i<<"申請的資源數(shù):"<<endl; 

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

    { 

         cout<<" 資源"<<j<<": "; 

         cin>>Request[j]; 

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

        { 

             cout<<" 進程P"<<i<<"申請的資源數(shù)大于系統(tǒng)可用"<<j<<"類資源的資源量!"; 

             cout<<"申請不合理,出錯!請重新選擇!"<<endl<<endl; 

             flag='N'; 

             break; 

        } 

     }

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

     { 

          changdata(i); 

          showdata();

          chkerr2(i);


      }

     cout<<" 是否繼續(xù)隨機分配算法演示,按'Y'或'y'鍵繼續(xù),按'N'或'n'鍵退出演示: "; 

    cin>>flag; 


}


}



void main() //主函數(shù)

{ 


int i=0,j=0,p; 

cout<<"輸入總進程數(shù):"<<endl;

cin>>M;

cout<<"輸入總資源種類:"<<endl;

cin>>N;

cout<<"請輸入總資源數(shù)(all_resource):"<<endl;

for(i=0;i<M;i++)

cin>>ALL_RESOURCE[i];

cout<<"依次輸入各進程所需要的最大資源數(shù)量(max):"<<endl;

for (i=0;i<M;i++)

  {

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

     {

       do

         {

          cin>>MAX[i][j];

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

          cout<<endl<<"占有資源超過了聲明的該資源總數(shù),請重新輸入"<<endl;

          }while (MAX[i][j]>ALL_RESOURCE[j]);

     }

  }

cout<<"依次輸入各進程已經(jīng)占據(jù)的資源數(shù)量(allocation):"<<endl;

for (i=0;i<M;i++)

  {

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

     {

       do

         {

          cin>>ALLOCATION[i][j];

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

          cout<<endl<<"占有資源超過了聲明的最大資源,請重新輸入"<<endl;

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


         }

       }

     //初始化資源數(shù)量

     for (i=0;i<M;i++)

      { p=ALL_RESOURCE[i];

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

          {

           p-=ALLOCATION[j][i];//減去已經(jīng)被占據(jù)的資源

           AVAILABLE[i]=p;

           if(AVAILABLE[i]<0)

           AVAILABLE[i]=0;

           }

      }

      

      for (i=0;i<M;i++)

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

         NEED[i][j]=MAX[i][j]-ALLOCATION[i][j];

showdata();

do{

cout<<endl<<"1--隨機分配算法        2--銀行家算法"<<endl;

cout<<endl<<"請選擇算法: ";

cin>>i;

if(i==2)  //m=2表賦值,m==2表判斷

bank();

else 

randomallocation();

}while(!((i==1)||(i==2)));


}
 
課程設計目的和意義

此次課程設計的主要內(nèi)容是模擬實現(xiàn)資源分配。同時要求編寫和調(diào)試一個系統(tǒng)動態(tài)分配資源的簡單模擬程序,觀察死鎖產(chǎn)生的條件,并使用適當?shù)乃惴ǎ行У姆乐购捅苊馑梨i的發(fā)生。

具體用銀行家算法實現(xiàn)資源分配。要求如下:

(1) 設計一個3個并發(fā)進程共享3類不同資源的系統(tǒng),進程可動態(tài)地申請資源和釋放資源,系統(tǒng)按各進程的申請動態(tài)地分配資源。

(2) 設計用銀行家算法和隨機分配算法,實現(xiàn)資源分配的兩個資源分配程序,應具有顯示或打印各進程依次要求申請的資源數(shù)以及依次分配資源的情況。

(3) 確定一組各進程依次申請資源數(shù)的序列,在相同的情況下分別運行上述兩種資源分配程序,觀察運行結果。

銀行家算法是避免死鎖的一種重要方法,本實驗要求用高級語言編寫和調(diào)試一個簡單的銀行家算法程序。加深了解有關資源申請、避免死鎖等概念,并體會和了解死鎖和避免死鎖的具體實施方法。死鎖的產(chǎn)生,必須同時滿足四個條件,即一個資源每次只能由一個進程占用:第二個為等待條件,即一個進程請求資源不能滿足時,它必須等待,但它仍繼續(xù)保持已得到的所有其他資源:第四個為循環(huán)等待條件,系統(tǒng)中存在若干個循環(huán)等待的進程,即其中每一個進程分別等待它前一個進程所持有的資源。防止死鎖的機構只能確保上述四個條件之一不出現(xiàn),則系統(tǒng)就不會發(fā)生死鎖。通過這個算法可用解決生活中的實際問題,如銀行貸款等.

通過對這個算法的設計,讓學生能夠對書本知識有更深的理解,在操作和其它方面有更高的提升.

二、方案設計及開發(fā)過程

隨機分配算法:當進程申請資源時,如果系統(tǒng)中現(xiàn)存資源數(shù)能滿足進程的當前資源申請量,就把資源能會產(chǎn)生死鎖。隨機分配算法很容易進入死鎖.

銀行家分配算法,顧名思義是來源于銀行的借貸業(yè)務,一定數(shù)量的本金要應多個客戶的借貸周轉,為了防止銀行加資金無法周轉而倒閉,對每一筆貸款,必須考察其是否能限期歸還。在操作系統(tǒng)中研究資源分配策略時也有類似問題,系統(tǒng)中有限的資源要供多個進程使用,必須保證得到的資源的進程能在有限的時間內(nèi)歸還資源,以供其他進程使用資源。如果資源分配不得到就會發(fā)生進程循環(huán)等待資源,個進程都無法繼續(xù)執(zhí)行下去的死鎖現(xiàn)象。

把個進程需要和已占有資源的情況記錄在進程控制中,假定進程控制塊PCB其中“狀態(tài)”有就緒態(tài)、等待態(tài)和完成態(tài)。當進程在處于等待態(tài)時,表示系統(tǒng)不能滿足該進程當前的資源申請。“資源需求總量”表示進程在整個執(zhí)行過程中總共要申請的資源量。顯然,,每個進程的資源需求總量不能超過系統(tǒng)擁有的資源總數(shù), 銀行算法進行資源分配可以避免死鎖.


2.算法描述


隨機分配算法:

設進程I提出請求Request[N],則銀行家算法按如下規(guī)則進行判斷

(1)  如果Request[N]<=AVAILABLE,則轉(2);否則,出錯。

(2)  系統(tǒng)分配資源,修改相關數(shù)據(jù):

AVAILABLE=AVAILABLE-REQUEST 
ALLOCATION=ALLOCATION+REQUEST 
NEED=NEED-REQUES

(3)  系統(tǒng)執(zhí)行安全性檢查

銀行家算法: 
設進程I提出請求Request[N],則銀行家算法按如下規(guī)則進行判斷。 
(1)如果Request[N]<=NEED[I,N],則轉(2);否則,出錯。 
(2)如果Request[N]<=AVAILABLE,則轉(3);否則,出錯。 
(3)系統(tǒng)試探分配資源,修改相關數(shù)據(jù): 
AVAILABLE=AVAILABLE-REQUEST 
ALLOCATION=ALLOCATION+REQUEST 
NEED=NEED-REQUEST 
(4)系統(tǒng)執(zhí)行安全性檢查,如安全,則分配成立;否則試探險性分配作廢,系統(tǒng)恢復原狀,進程等待。 
3.安全性檢查 
(1)設置兩個工作向量WORK=AVAILABLE;FINISH[M]=FALSE 
(2)從進程集合中找到一個滿足下述條件的進程, 
FINISH[i]=FALSE 
NEED<=WORK 
如找到,執(zhí)行(3);否則,執(zhí)行(4) 
(3)設進程獲得資源,可順利執(zhí)行,直至完成,從而釋放資源。 
WORK=WORK+ALLOCATION 
FINISH=TRUE 
GO TO 2 
(4)如所有的進程Finish[M]=true,則表示安全;否則系統(tǒng)不安全。 



3.數(shù)據(jù)結構

假設有M個進程N類資源,則有如下數(shù)據(jù)結構:

#define W 10

#define R 20

int M ;                     //總進程數(shù)

int N ;                    //資源種類 

int ALL_RESOURCE[W];       //各種資源的數(shù)目總和

int MAX[W][R];            //M個進程對N類資源最大資源需求量

int AVAILABLE[R];         //系統(tǒng)可用資源數(shù)

int ALLOCATION[W][R];     //M個進程已經(jīng)得到N類資源的資源量

int NEED[W][R];           //M個進程還需要N類資源的資源量

int Request[R];           //請求資源個數(shù)


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

void showdata();          //主要用來輸出資源分配情況

void changdata(int);      //主要用來輸出資源分配后后的情況

void rstordata(int);      //用來恢復資源分配情況,如:銀行家算法時,由于分配不安全

則要恢復資源分配情況

int chkerr(int);          //銀行家分配算法的安全檢查

int chkerr2(int) ;        //隨機分配算法安全檢查

void bank()  ;            //銀行家算法

void randomallocation();  //隨機分配算法

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产凹凸成av人网站| 国产精品国产三级国产aⅴ入口 | 国产在线不卡一卡二卡三卡四卡| 中日韩av电影| 欧美一级欧美三级| 一本大道av伊人久久综合| 国产在线播精品第三| 丝袜亚洲精品中文字幕一区| 国产精品日产欧美久久久久| 亚洲精品一区在线观看| 欧美日韩一区二区三区在线 | 五月婷婷另类国产| 国产精品视频你懂的| 日韩久久精品一区| 欧美久久一二区| 色吧成人激情小说| 成人av综合一区| 精品系列免费在线观看| 青青草国产成人av片免费| 亚洲狠狠丁香婷婷综合久久久| 日本一区二区免费在线观看视频 | 亚洲一区二区三区国产| 中文字幕在线一区二区三区| 久久免费美女视频| 精品少妇一区二区三区视频免付费| 欧美日韩精品一区二区天天拍小说 | 欧美国产日韩一二三区| 久久奇米777| 精品欧美乱码久久久久久1区2区| 欧美高清激情brazzers| 欧美美女直播网站| 欧美色图第一页| 欧美丝袜第三区| 欧美日韩一区不卡| 欧美日韩午夜在线视频| 欧美色手机在线观看| 欧美亚洲自拍偷拍| 欧美中文一区二区三区| 在线观看亚洲成人| 在线国产亚洲欧美| 精品视频在线免费看| 欧美色倩网站大全免费| 欧美久久久久久久久中文字幕| 91成人网在线| 欧美挠脚心视频网站| 欧美一区二区三级| 日韩片之四级片| 国产偷国产偷精品高清尤物| 国产亚洲一二三区| 最新高清无码专区| 亚洲午夜精品久久久久久久久| 亚洲无线码一区二区三区| 五月天久久比比资源色| 奇米精品一区二区三区在线观看一 | 欧美日韩视频一区二区| 制服丝袜中文字幕亚洲| 日韩免费观看高清完整版| 久久你懂得1024| 国产精品久久久久久久久搜平片| 综合激情成人伊人| 同产精品九九九| 国产麻豆视频一区二区| 99精品国产91久久久久久| 欧美天堂亚洲电影院在线播放| 欧美一卡二卡三卡| 国产欧美日韩在线看| 一区二区三区日韩在线观看| 日本强好片久久久久久aaa| 国产精品一区二区免费不卡| 91污片在线观看| 69堂成人精品免费视频| 国产亚洲美州欧州综合国| 亚洲嫩草精品久久| 久久se精品一区二区| 99免费精品在线| 欧美一卡2卡三卡4卡5免费| 国产精品视频一二三区| 五月婷婷综合激情| 成人小视频在线| 在线91免费看| 亚洲欧美在线视频观看| 免费成人在线影院| 97aⅴ精品视频一二三区| 日韩欧美中文字幕公布| 亚洲丝袜自拍清纯另类| 久久er99精品| 欧美午夜精品久久久| 久久精品一区八戒影视| 亚洲图片欧美综合| 成人永久免费视频| 日韩免费观看高清完整版在线观看| 成人欧美一区二区三区| 精品无码三级在线观看视频| 欧美优质美女网站| 国产欧美日韩在线看| 免费成人小视频| 在线欧美小视频| 日本一区二区三区视频视频| 日韩高清欧美激情| 色婷婷av一区二区三区大白胸| 久久久久久免费| 奇米色一区二区三区四区| 在线观看一区二区精品视频| 国产精品麻豆网站| 国产在线观看一区二区| 3d成人动漫网站| 亚洲综合小说图片| www.成人网.com| 国产欧美在线观看一区| 九色综合狠狠综合久久| 538prom精品视频线放| 一区二区三区中文字幕电影| 北条麻妃一区二区三区| 久久亚洲免费视频| 秋霞电影网一区二区| 欧美性大战xxxxx久久久| 国产精品久久久久久久久久免费看| 国产美女视频91| 精品日韩欧美一区二区| 男女性色大片免费观看一区二区| 欧美天堂一区二区三区| 亚洲欧美一区二区三区极速播放| 成人激情黄色小说| 中文字幕乱码久久午夜不卡| 国产一区二区美女| 精品国产区一区| 狠狠色丁香久久婷婷综合丁香| 欧美一级片在线观看| 免费高清成人在线| 日韩欧美亚洲另类制服综合在线| 亚洲午夜免费视频| 欧美日韩成人综合在线一区二区| 一级精品视频在线观看宜春院| 91国内精品野花午夜精品| 依依成人综合视频| 欧洲av在线精品| 亚洲伊人色欲综合网| 欧美日韩不卡一区二区| 人人精品人人爱| 精品日产卡一卡二卡麻豆| 国产综合色视频| 国产人妖乱国产精品人妖| 成人午夜av影视| 成人欧美一区二区三区白人| 91免费在线看| 亚洲成人自拍偷拍| 制服.丝袜.亚洲.另类.中文| 美女在线一区二区| 2020国产精品| 成人黄色av电影| 亚洲精品v日韩精品| 欧美肥大bbwbbw高潮| 久久精品国产第一区二区三区| 久久先锋影音av鲁色资源网| 国产91精品一区二区麻豆网站| 国产精品久久久久婷婷| 日本久久一区二区三区| 亚洲成人av电影在线| 欧美一区二区三区在线| 国产成人自拍网| 亚洲色图清纯唯美| 91精品国产综合久久福利软件| 久久99精品国产91久久来源| 亚洲国产岛国毛片在线| 欧美中文字幕一区二区三区| 久久精品国产秦先生| 欧美国产一区视频在线观看| 欧美亚州韩日在线看免费版国语版| 蜜臀久久久久久久| 国产精品嫩草影院av蜜臀| 欧美日韩日日夜夜| 国产成人精品一区二区三区四区 | 777午夜精品视频在线播放| 极品少妇一区二区| 国产精品国模大尺度视频| 欧美三级电影在线看| 国产一区在线精品| 亚洲欧美国产毛片在线| 欧美v日韩v国产v| 91麻豆文化传媒在线观看| 男女性色大片免费观看一区二区 | 久久综合五月天婷婷伊人| 色偷偷久久人人79超碰人人澡| 日本v片在线高清不卡在线观看| 久久久精品影视| 欧美精品v国产精品v日韩精品 | 中文字幕在线观看一区| 91精品久久久久久久99蜜桃| 成人激情午夜影院| 强制捆绑调教一区二区| 中文字幕一区二区在线观看| 日韩免费一区二区| 欧美性猛交xxxxxx富婆| 成人综合婷婷国产精品久久蜜臀| 三级不卡在线观看| 亚洲天堂中文字幕| 国产欧美一区视频| 日韩免费观看高清完整版在线观看| 色婷婷国产精品| 成人免费高清视频|