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

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

?? 銀行家算法.cpp

?? 操作系統程序設計-銀行家算法 操作系統程序設計-銀行家算法
?? CPP
字號:

#include "string.h" 

#include "iostream"

#include "iomanip"

using namespace std;

#define FALSE 0 

#define TRUE 1 

#define W 10

#define R 20

int FINISH[W];

int M ; //總進程數

int N ; //資源種類 

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

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

int AVAILABLE[R]; //系統可用資源數

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

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

int Request[R]; //請求資源個數

int WORK[100];

int Q[100];

int L=0;
//int FINISH[100];

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

{ 

   int i,j; 
   
cout<<" ————————————————————————"<<endl;

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

   cout<<"  "; 

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

   cout<<endl<<endl; 

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

   cout<<"  "; 

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

   cout<<endl<<endl; 

   cout<<"—————————————————————";

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

   cout<<"      ";

   for (j=0;j<N;j++)cout<<setw(8)<<"資源"<<j;

   //cout<<"       資源0"<<"     資源1"<<"    資源2"<<endl;

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

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

   { 

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

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

     //cout<<endl; 

   } 

   cout<<endl; 

   cout<<"—————————————————————";

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


   for (j=0;j<N;j++)cout<<setw(8)<<"資源"<<j;

   //cout<<"       資源0"<<"     資源1"<<"     資源2"<<endl;

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

   { 

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

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

     //cout<<endl; 

   } 

   cout<<endl;
   
   /*  
       for (i=0;i<M;i++)
	   for (j=0;j<N;j++){
	   if (NEED[i][j]!=0)
		cout<<"進程p"<<i<<"狀態:  運行結束"<<endl;
	   else 
		   cout<<"進程p"<<i<<"狀態:  等待調用"<<endl;}
   */
   

} 

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

{ 

   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];

	 //WORK[j]=AVAILABLE[j];
   }
}

void rstordata(int k) //函數rstordata,恢復可用資源和已經拿到資源和還需要的資源的值

{  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];
	 
	 //WORK[j]=AVAILABLE[j];

   }
}

int chkerr(int s) //函數chkerr,檢查是否安全

{ int WORKrest;//FINISH[W] 

    int i,j,k=0; 

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

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

     {

        WORKrest=AVAILABLE[j]; 

        i=s; 

        do

            { 

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

            {

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

                   FINISH[i]=TRUE; 

                   i=0; 

            } 

          else 

            { 
			  i++; 
            } 

            }while(i<M);

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

        if(FINISH[i]==FALSE) 

            {

            cout<<endl; 

            cout<<" 系統不安全!!! 本次資源申請不成功!!!"<<endl;     

            cout<<endl; 

            return 1;

			  cout<<"進程p"<<i<<"狀態:  阻塞"<<endl;
	          //else 
	          //cout<<"進程p"<<i<<"狀態:  等待調用"<<endl;
 

            } 

     } 

    cout<<endl; 

    cout<<" 經安全性檢查,系統安全,本次分配成功。"<<endl; 

    cout<<endl; 

    return 0; 

}
 void set()
 {
	 int t[10];
	 for(int i=0;i<M;i++){
		 t[i]=0;
		 for(int j=0;j<N;j++){if(NEED[i][j]==0) t[i]+=1;}
	 }
	 for(i=0;i<M;i++)
		 if(t[i]==N)
		 {cout<<"進程p"<<i<<"狀態:  運行結束"<<endl;
		 for(int k=0;k<N;k++) 
			 AVAILABLE[k]=AVAILABLE[k]+ALLOCATION[i][k];
		     ALLOCATION[i][k]=0;
		 }
		 else 
			 cout<<"進程p"<<i<<"狀態:  等待調用"<<endl;
 }

 void safe()       //對進程進行安全行檢查,此時是否存在安全性序列
{ cout<<endl<<"···現在計算機自動檢測是否存在安全序列···"<<endl;
	int i,j;
	for(j=0;j<N;j++)
		WORK[j]=AVAILABLE[j];//cout<<"a"<<WORK[j];

	//int q[100];
	int flag=0;
	for(i=0; i<M;i++)
		FINISH[i]=FALSE;//chushi
	for(i=0; i<M;i++)
	{
		if(FINISH[i]==FALSE)
		{
			flag=0;
			for(j=0; j<N; j++)
			{   //cout<<WORK[i]<<"  ";
				//WORK[j]=AVAILABLE[j];cout<<"a"<<WORK[j];
				if(WORK[j]>=NEED[i][j])
					flag=flag+1;
				else
					break;
			}  
			if(flag==N)
			{
				Q[L]=i;   //cout<<Q[L]<<"ql"<<L<<endl;
				FINISH[i]=TRUE;
				for(j=0; j<N;j++)
				{
					WORK[j]=WORK[j]+ALLOCATION[i][j];//cout<<"b"<<WORK[j];
					
				}
				L=L+1;     //cout<<L<<endl;
				cout<<"進程p"<<i<<"資源釋放后系統目前各種資源可用的數為(available):"<<endl;// cout<<"*********************";		cout<<"l"<<L<<endl;					
				cout<<endl;
				for (j=0;j<N;j++)
					cout<<"  "<<"資源"<<j<<": "<<WORK[j]; 
				cout<<endl<<endl; 				
				i=0;
			}
		}
		else;
		//i++;
	//cout<<"i"<<i<<endl;//cout<<q[l]<<"ql"<<i<<endl;
	}
	
}

int test()
{
	if (L<M)
	{
	   cout<<"\n當前狀態不安全!!!!!";	   
	   cout<<"不存在安全序列 "<<endl;
	   cout<<"^^^您不能向系統申請資源^^^"<<endl;
	   cout<<"………計算機檢測結束………"<<endl;
	   return 0;
	}
   else
   {
	   int i;
	   //l=0;
	   cout<<"\n此時處于安全的狀態!!!"<<endl;
	   cout<<endl;
	   cout<<"安全序列是:   ";
	   for (i=0; i<M; i++)
	   {
		   cout<<"進程"<<"p"<<Q[i]<<" --> ";		   
		   FINISH[i]=FALSE;  
	   }	  
	   cout<<endl;
	   cout<<"………計算機檢測結束………"<<endl;

	    return 1;
   }
   //cout<<endl<<"計算機檢測結束"<<endl;
}
 
void bank()   //銀行家算法

{

     int  i=0,j=0; 
	   //i=0;intj=0;

     char flag='Y'; 

     

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

     { 

       i=-1; 

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

        { cout<<endl;

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

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

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

        } 

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

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

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

           cin>>Request[j];

             if(Request[j]>NEED[i][j]) //若請求的資源數大于進程還需要i類資源的資源量j

			 { 

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

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

              flag='N'; 

              break; 

			 } 

                  else 

				  {

                     if(Request[j]>AVAILABLE[j]) //若請求的資源數大于可用資源數

					 { 

                      cout<<" 進程P"<<i<<"申請的資源數大于系統可用"<<j<<"類資源的資源量!"; 


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

                      flag='N'; 

                      break; 

					 } 

				  } 

		 } 

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

     { 

      changdata(i); //調用changdata(i)函數,改變資源數

      if(chkerr(i)) //若系統不安全

	  { 

            rstordata(i); //調用rstordata(i)函數,恢復資源數

            showdata();   //輸出資源分配情況

	  } 

      else  {     //若系統安全 

      showdata(); //輸出資源分配情況
      
      /* super buge 沒有釋放擁有的資源*/
      
      
      
       
	  set();
	  }

     } 

      else      //若flag=N||flag=n

      showdata(); 
	  

      cout<<endl; 

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

      cin>>flag; 

     }
	
} 


/*void set()
{for(int i=0;i<=M;i++)
	if (flag=='y'||flag=='Y')
    cout<<"進程p"<<i<<"狀態:  運行結束"<<endl;
	else 
	cout<<"進程p"<<i<<"狀態:  等待調用"<<endl;

}*/




void main() //主函數

{
	cout<<"********************************"<<endl;
	cout<<"歡迎使用銀行家安全性算法模擬程序"<<endl;
	cout<<endl;
	cout<<"     本程序由曉光編制完成       "<<endl;
	cout<<"   gyzhangxiaoguang@126.com    "<<endl;
	cout<<"  學號061114031  班級2006教育   "<<endl;
	cout<<endl;
	cout<<"********************************"<<endl;

   int i=0,j=0,p; 

   do{cout<<"請輸入總進程數:"<<endl;

   cin>>M;}while(M<0);

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

   cin>>N;}while(N<0);

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

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

   {cout<<"資源"<<i<<":"; cin>>ALL_RESOURCE[i];}

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

   for (i=0;i<M;i++)//M是總進程個數

   {

      for (j=0;j<N;j++)//N是總資源種類

	  { // cout<<"進程"<<i<<"所需";

        do

         {
			 cout<<"進程"<<i<<"所需";
			 
			 cout<<j<<"類資源的數目:";

			 cin>>MAX[i][j];
			 
			 if (MAX[i][j]>ALL_RESOURCE[j])         //最大需求量小于資源的總數
				 
				 cout<<endl<<"所需資源超過了聲明的該資源總數,請重新輸入"<<endl;

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

      }

}


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

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

{ //cout<<"進程"<<i+1<<"已占有";

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

     {//cout<<"進程"<<i<<"已占有";

       do

         {cout<<"進程"<<i<<"已占有";
			 
		  cout<<j<<"類資源的數目:";

          cin>>ALLOCATION[i][j];

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

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

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

         }

     }


     //初始化資源數量

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

      { p=ALL_RESOURCE[j];

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

          {

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

           AVAILABLE[j]=p;

           if(AVAILABLE[j]<0)

           AVAILABLE[j]=0;

           }

     }


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

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

         NEED[i][j]=MAX[i][j]-ALLOCATION[i][j];
	  safe();

	  //cout<<endl<<"手動申請資源"<<endl;

      //showdata();

	 // safe();

	 if (test()==0);
	   // showdata();
	 else{
	  char letter;
	  cout<<endl<<"如果需要手動為進程申請資源,\n請輸入字母 k :";
	  cin>>letter;
	  if (letter=='k')
	  {showdata();
      bank();};
	  //set();
	 };
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产高清久久久| 成人爽a毛片一区二区免费| 成人97人人超碰人人99| 国产午夜一区二区三区| 另类小说图片综合网| 欧美性xxxxxx少妇| 亚洲色图在线看| 色综合久久久久综合99| 中文字幕中文字幕一区| 成人激情综合网站| 欧美韩日一区二区三区| 床上的激情91.| 亚洲精品免费在线| 欧美视频精品在线观看| 秋霞成人午夜伦在线观看| 日韩欧美美女一区二区三区| 韩国视频一区二区| 1000部国产精品成人观看| 在线这里只有精品| 国产一区二区调教| 夜夜嗨av一区二区三区| 日韩三级中文字幕| 色综合咪咪久久| 美腿丝袜在线亚洲一区| 国产精品久久综合| 日韩一区二区三区四区五区六区 | 欧美猛男超大videosgay| 麻豆久久一区二区| 亚洲婷婷综合久久一本伊一区| 4438x成人网最大色成网站| 国产精品一区在线观看乱码| 亚洲欧美另类图片小说| 日韩视频一区二区三区| 日本精品裸体写真集在线观看 | 91麻豆123| 成人毛片视频在线观看| 奇米色777欧美一区二区| 亚洲女女做受ⅹxx高潮| 国产亚洲污的网站| 欧美成人官网二区| 日韩一卡二卡三卡| 欧美一区二区三区爱爱| 欧美日韩小视频| 在线精品视频一区二区三四| 欧美一区二区三区在线电影| 国产一区在线精品| 黄色精品一二区| 激情五月婷婷综合| 蜜桃视频在线观看一区二区| 视频一区中文字幕国产| 亚洲美女电影在线| 久久欧美中文字幕| 国产亚洲精品资源在线26u| 久久九九99视频| 欧美韩日一区二区三区| 亚洲欧美综合色| 亚洲一区二区综合| 亚洲gay无套男同| 免费在线视频一区| 国产麻豆视频一区| 3d动漫精品啪啪一区二区竹菊| 国产自产视频一区二区三区| 亚洲欧美另类综合偷拍| 亚洲一区二区四区蜜桃| 日本va欧美va瓶| 国产999精品久久久久久| 成人性视频免费网站| 99久久精品国产导航| 欧美喷潮久久久xxxxx| 久久综合视频网| 亚洲免费观看高清完整版在线观看 | 欧美日韩精品系列| 美女久久久精品| 综合色天天鬼久久鬼色| 中文字幕一区二区三区四区| 亚洲主播在线播放| 久久国产三级精品| 在线视频综合导航| 亚洲精品在线观| 日韩vs国产vs欧美| 波多野结衣欧美| 久久嫩草精品久久久久| 依依成人精品视频| 国产一区二区三区国产| 欧美日本韩国一区二区三区视频 | 肉色丝袜一区二区| 久久蜜桃一区二区| 欧美精品亚洲二区| 亚洲欧美在线观看| 国产经典欧美精品| 日韩精品中文字幕在线不卡尤物| 亚洲精品视频在线观看网站| 国产精品一区在线观看乱码 | 欧美精品一区二区三区蜜臀| 水蜜桃久久夜色精品一区的特点| 色综合久久88色综合天天| 日本一区二区视频在线观看| 久久狠狠亚洲综合| 91丨九色porny丨蝌蚪| 国产激情91久久精品导航| 欧美三级视频在线播放| 亚洲欧美偷拍三级| 色香蕉久久蜜桃| 国产精品一区二区久久精品爱涩| 日韩欧美国产1| 国产精品影音先锋| 中文字幕第一区第二区| 99久久精品国产一区| 亚洲色图丝袜美腿| 色综合久久88色综合天天免费| 国产精品久久久久久久久搜平片| 成人av在线资源| 亚洲国产日韩精品| 欧美一区二区大片| 国产精品99久久久久| 亚洲综合图片区| 欧美影院一区二区| 天天av天天翘天天综合网| 欧美精品日日鲁夜夜添| 国产成人小视频| 蜜桃传媒麻豆第一区在线观看| 亚洲同性gay激情无套| 国产欧美一区二区精品性色| 欧美视频一区二区在线观看| 国产69精品一区二区亚洲孕妇| 日韩高清国产一区在线| 一区二区三区蜜桃网| 国产目拍亚洲精品99久久精品| 在线不卡中文字幕| 欧美日韩午夜在线| 麻豆精品久久久| 精品久久久久久久人人人人传媒 | 欧美日本免费一区二区三区| 久久国产剧场电影| 亚洲国产日韩在线一区模特| wwwwww.欧美系列| 日韩无一区二区| 欧美日韩1区2区| 91国偷自产一区二区三区观看| www.激情成人| 韩日精品视频一区| www一区二区| 中文字幕第一页久久| 亚洲亚洲人成综合网络| 强制捆绑调教一区二区| 午夜精品久久久久久久久 | 精品理论电影在线| 欧美一级免费观看| 日韩欧美三级在线| 欧美国产日产图区| 中文字幕人成不卡一区| 亚洲精品亚洲人成人网在线播放| 亚洲欧美欧美一区二区三区| 亚洲精品国产成人久久av盗摄| 亚洲丝袜精品丝袜在线| 亚洲成a人片在线观看中文| 久久电影国产免费久久电影| 99久久国产综合精品麻豆| 69av一区二区三区| 国产精品网站导航| 日韩精品免费专区| 99re热视频这里只精品| 欧美一区二区三区免费大片| 中文一区二区在线观看| 午夜精品久久久久久久久久久| 韩国三级在线一区| 欧美日韩亚洲综合一区二区三区| 久久蜜臀中文字幕| 精品无人码麻豆乱码1区2区| 成人蜜臀av电影| 欧美r级电影在线观看| 日韩欧美色综合| 精品粉嫩aⅴ一区二区三区四区 | 国产精品久久精品日日| 久热成人在线视频| av在线综合网| 18成人在线观看| 91黄色免费版| 亚洲国产精品久久一线不卡| 91麻豆免费在线观看| 亚洲丝袜美腿综合| 91小视频免费看| 亚洲激情第一区| 在线看国产日韩| 天天影视色香欲综合网老头| 欧美综合视频在线观看| 亚洲成人免费观看| 欧美一区二区视频在线观看2020 | 在线视频一区二区免费| 一区二区理论电影在线观看| 91高清视频在线| 亚洲123区在线观看| 在线成人高清不卡| 久久99国产精品尤物| 国产偷国产偷亚洲高清人白洁| 国产在线视频精品一区| 国产欧美一区二区三区鸳鸯浴| 国产精品69毛片高清亚洲| 一区二区中文字幕在线| 91精品国产一区二区三区香蕉|