亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

進程調度模擬程序

2019-11-17 04:59:46
字體:
來源:轉載
供稿:網友
   我們課程設計,我選擇了一個進程調度模擬,希望大家給看看,多提意見,好久沒來發帖子了。
#include<iostream.h>
#include<stdlib.h>
#include<time.h>
#include<stdio.h>
#include<string.h>const int  MAXCOMMANDLEN =50;         /////////////////////////////////////////////////////////////////////////////////////
//           
//         PROCESS 
// 
/////////////////////////////////////////////////////////////////////////////////////
class Process                          //進程類
{
friend class CPU;
protected:
 static int init_ID;     //隨機進程ID
    int ID;        //進程ID
 char runText[MAXCOMMANDLEN];  //進程指令數組
 int ip;        //進程指令指針,保存進程指令執行到的具體位置
 bool ISuseSource;     //此進程是否使用資源,ture:使用中  false : 未使用
 bool ISblocked;      //此進程是否被阻塞  ture:阻塞  false :未阻塞
 int unitTime;      //進程單位被cpu執行時間, 默認 1
 int blockTime;      //進程被阻塞時間
public:
 static void RandID();    //隨機生成進程ID
 Process();
 int getID();      
 int getIP();      
 void setIP(int);     
 void Runed();      //進程被cpu執行
 int getUnittime();     //得到進程單位執行時間
 int getBlcoktime();     //得到進程阻塞時間
 void setBlocktime(int);    //設置進程阻塞時間
 void setUnittime(int);    //設置進程單位執行時間
 char getResult(int);    //得到進程執行結果
 char* getRuntext();     //得到進程執行的指令
 void setBlockstate(bool);   //設置阻塞狀態
 bool getBlockstate();      
 bool getISusesource();    //得到資源的狀態  使用  未使用
 void setISusesource(bool);   //設置資源的使用狀態
};int Process::init_ID;void Process::RandID()
{
 srand( (unsigned)time( NULL ) );
 init_ID=rand();
}
Process::Process()
{
 ID=init_ID++;     
 int commandLen;
 IP=0; cout<<"Please input the text which process runed by CPU [#command#] :>/ ";
 cin>>runText;
 if( (commandLen=strlen(runText) ) > MAXCOMMANDLEN )
  exit(0);

 
 runText[commandLen]='#';     // 指令結束標志 '#'
 runText[commandLen+1]='';
 ISuseSource=false;
 ISblocked=false;
 unitTime=1;
 blockTime=0;
}
void Process::Runed()

int Process::getID()
{
 return ID;
}int Process::getIP()
{
 return IP;
}void Process::setIP(int ip)
bool Process::getISusesource()
{
 return ISuseSource;
}void Process::setISusesource(bool s)
char* Process::getRuntext()
{
 return runText;
}int Process::getUnittime()
{
 return unitTime;
}
int Process::getBlcoktime()
{
 return blockTime;
}void Process::setBlocktime(int BT)
void Process::setUnittime(int UT)
void Process::setBlockstate(bool state)
bool Process::getBlockstate()
{
 return ISblocked;
}char Process::getResult(int k)
{
  return runText[k];
}/////////////////////////////////////////////////////////////////////////////////////
//           
//         SOURCE 
// 
/////////////////////////////////////////////////////////////////////////////////////class Source        //資源類
{
protected:
 int ID;         //資源 ID
 bool state;        //資源狀態 true : 未被進程占有  false : 已被占有
 int pro_ID;        //使用資源的進程id
 Process *pro;       //使用資源的進程指針
 int time;        //進程使用資源的時間
public:
 Source(int);
 bool getState();      //得到進程狀態
 void setState(bool);     //設置進程狀態
 void setTime(int);      //設置進程使用資源的時間
 void setPro(Process *);     //設置使用該資源的進程
 int getID();       //得到資源id
 int getPorID();       //得到使用資源的進程id
 void setProID(int);      //設置使用資源的進程id
 void runned();       //資源被cpu調用
};Source::Source(int id)
void Source::setProID(int id)
void Source::setTime(int t)
void Source::setState(bool s)
bool Source::getState()
{
 return state;
}void Source::setPro(Process *p)
void Source::runned()
{
 if(time>0)
 {
  cout<<"( Source :"<<ID<<")";

  time--;
 }
 if(time<=0)          //進程使用完資源釋放資源,使用資源的時間到
 {
  pro->setISusesource(false);
  int ip=pro->getIP();
  pro->setIP(++ip);
  Source::setState(true);
  cout<<endl<<"The process "<<pro->getID()<<" relase the source!"<<endl;
  pro=NULL;
 }
}/////////////////////////////////////////////////////////////////////////////////////
//           
//         CPU 
// 
/////////////////////////////////////////////////////////////////////////////////////typedef strUCt Block     //阻塞隊列結構
{
 Process *p_BlockProcess;   //被阻塞的進程隊列
 int index;       //被阻塞的進程在就緒隊列中的索引(位置) 
}Block;class CPU       
{
protected:
 Process *p_Process;     //進程隊列
 Process **pp_Process;    //進程就緒隊列
 Block *blockQueue ;    //進程阻塞隊列
 Source  *p_Source;     //資源指針
 int numOfprocess;     //進程數量
 int numOfblock;      //被阻塞的進程數
 int PC;        //程序計數器
 int allTime;      //cpu運行的總時間
public :
 CPU(int); 
 void Run();       //cpu運行進程
 bool _IC(Process&);     //虛擬IC,進行進程指令翻譯
 void useSource(Process&);   //進程申請資源
 void blockProcess(Process&);        //阻塞進程
 void releaseBlockPro();    //釋放阻塞進程
 int getAlltime();     //得到進程運行的總時間
 void displayPro();     //顯示進程的基本信息,id,指令,運行時間等
 void blockTimeADD();    //阻塞時間加1
};CPU::CPU(int num)
{
  p_Source=new Source(379857);
  numOfprocess=num;
  numOfblock=0;
  allTime=0;
  p_Process=new Process[numOfprocess];
  pp_Process=new Process*[numOfprocess];
  blockQueue=new Block[numOfprocess];
  for(int i=0;i<numOfprocess;i++)
  
}int CPU::getAlltime()
{
 return allTime;
}void CPU::displayPro()
{
 for(int i=0;i<numOfprocess;i++)
 {
  cout<<" Process ID : "<<p_Process[i].getID()<<endl;

  cout<<"   text of runned :"<<p_Process[i].getRuntext()<<endl;
 }
}void CPU::Run()
{
 int numPro=numOfprocess; do
 {
  for(int num=0;num < numOfprocess;num++)
  {
   if(!pp_Process[num])      //假如該指針為空,說明該進程不在就緒隊列中
    continue;   for(int t=0;t<p_Process[num].getUnittime();t++)
   {
    PC=p_Process[num].getIP();
    if(_IC(p_Process[num]))     
    {
     if(t==0)
      cout<<"the process ["<<p_Process[num].getID()<<"] runed : ";
     if(!p_Process[num].getISusesource())
     
     else
     {
       p_Source->runned();
       if( p_Source->getState() && numOfblock>0 )     //釋放阻塞進程
       
     }
    }
    else
    {
     if(!p_Process[num].getBlockstate())
     {
      numPro--;
         pp_Process[num]=NULL;
      continue; 
     }
     break;
    }
    allTime++;
    if(numOfblock>0)
     blockTimeADD();
   }//end for t...
   if( p_Process[num].getUnittime() )
    p_Process[num].setUnittime(1);
   cout<<endl;
  }//end for num... }while(numPro);
}bool CPU::_IC(Process &p)                    
{
 //對進程中的指令進行翻譯
 char resultRunned;
 
 resultRunned=p.getResult(PC);
 if(resultRunned=='#')
  return false;
 else
 {
  if(resultRunned==' )      //申請資源指令
  {
   PC++;
   p.setIP(PC);
   resultRunned=p.getResult(PC);
   if( resultRunned >='1' && resultRunned <='9' )
   {
    if(p_Source->getState())
    {
     //資源未被使用則使用資源
     useSource(p);

     cout<<"The process "<<p.getID()<<" take up the source!"<<endl;
    }
    else
    {
     //資源已被使用則阻塞進程
     blockProcess(p);
     cout<<"The process "<<p.getID()<<" is blocked !"<<endl;
     return false;     }
   }
   else
   {
    //' 后跟的不是數字,則語法錯誤
    cout<<"The process ["<<p.getID()<<"] runned fail ! It has been stopped! "<<endl;
    return false;
   }
  }  }
  return true;
}void CPU::blockTimeADD()
{
 for(int i=0;i<numOfblock;i++)
 {
  int BT=blockQueue[i].p_BlockProcess->getBlcoktime();
  blockQueue[i].p_BlockProcess->setBlocktime(++BT);
 }
}void CPU::useSource(Process& p)
{
 p.setISusesource(true);
 p_Source->setState(false);
 p_Source->setProID(p.getID());
 p_Source->setTime(p.getResult(PC)-'0');
 p_Source->setPro(&p);}void CPU::blockProcess(Process& p)
{
 int tempIndex=numOfprocess-( Process::init_ID-p.getID() );
 blockQueue[numOfblock].p_BlockProcess=&p;
 blockQueue[numOfblock].index=tempIndex;
 numOfblock++;
 int ip=p.getIP();
 p.setIP(--ip);
 p.setBlockstate(true);
 p.setBlocktime(1);
 p.setUnittime(0);
 pp_Process[tempIndex]=NULL;}void CPU::releaseBlockPro()
{
 //釋放阻塞隊列的第一個進程,因為它阻塞時間最長
 pp_Process[blockQueue[0].index]=blockQueue[0].p_BlockProcess;
 blockQueue[0].index=-1;
 blockQueue[0].p_BlockProcess->setBlockstate(false);
 blockQueue[0].p_BlockProcess->setUnittime( blockQueue[0].p_BlockProcess->getBlcoktime() );
 blockQueue[0].p_BlockProcess->setBlockstate(0);
 blockQueue[0].p_BlockProcess=NULL;
 numOfblock--;
 
 //阻塞隊列中的其他進程向前移動一個位置
 for(int i=0;i<numOfblock;i++)
 
}
/////////////////////////////////////////////////////////////////////////////////////
//           
//        The main progress
// 
/////////////////////////////////////////////////////////////////////////////////////
void main()
{
 int num;
 cout<<" ********************************************************"<<endl
  <<endl; 
 cout<<"              The virtual CPU    the process runned           "<<endl

  <<endl;
 cout<<" *******************************************************"<<endl
  <<endl;
 
 cout<<"initialize the information of processes "<<endl; cout<<"Please input the number of process [#command#] >/ "; try
 
 catch(int)
 {
  cout<<"You input the numbers of process is error !"<<endl;
  exit(1);
 } Process::RandID();   // 隨機生成第一個進程的ID,以后生成的進程ID順序加1
 CPU virtualCPU(num);        
 
 cout<<"Pocesses runed by CPU "<<endl;
 virtualCPU.Run(); 
 
 cout<<"Processes runned over ! "<<endl;
 cout<<" ********************************************************"<<endl
  <<endl; 
 cout<<" The time which processes runned by CPU : "<<virtualCPU.getAlltime()<<endl
  <<endl;
 virtualCPU.displayPro();
 cout<<" *******************************************************"<<endl
  <<endl;
}這里沒有任何的API調用 只是模擬,我給進程設定了自己的語法,輸入一般的字符cpu調用時只是正常輸出,假如碰到' 表示該進程要調用系統資源后面必須跟一個數字表示占有的時間,假如資源閑置則占有資源否則阻塞,等資源釋放在占有資源。進程的調用算法我采用的是時間片輪轉算法并有所改進,當某個進程從阻塞隊列釋放后,他將把以前因為等待資源而被浪費的時間補回來。
希望大家多提意見

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美在线播放| 亚洲精品成a人在线观看| 日韩福利伦理影院免费| 欧美精品免费播放| 2018日韩中文字幕| 一区二区三区www| 欧美电影免费观看高清完整| 久久久亚洲精品视频| 欧美色另类天堂2015| 欧美性一区二区三区| 久久天堂电影网| 亚洲福利精品在线| 九九热这里只有精品免费看| 欧美理论电影在线观看| 久久人91精品久久久久久不卡| 国产做受高潮69| 日本精品视频在线播放| 欧美成人手机在线| 欧美性生交xxxxxdddd| 久久久国产精品免费| 精品二区三区线观看| 奇米四色中文综合久久| 91亚洲精品久久久久久久久久久久| 日韩欧美中文字幕在线播放| 九九九久久久久久| 国产丝袜视频一区| 亚洲激情国产精品| 97超级碰碰碰| 日韩成人在线视频观看| 欧美成人在线免费视频| 国产福利精品视频| 在线视频欧美性高潮| 国产精品69精品一区二区三区| 69av成年福利视频| 91高清视频在线免费观看| 亚洲视频在线观看网站| 亚洲欧美日韩国产精品| 欧美极品少妇xxxxⅹ免费视频| 亚洲一区美女视频在线观看免费| 国产精品亚洲美女av网站| 九九久久综合网站| 亚洲久久久久久久久久久| 国产精品女人久久久久久| 国产a级全部精品| 中文字幕在线看视频国产欧美| 精品毛片网大全| 国产精品中文在线| 欧美性xxxx极品hd欧美风情| 国产精品美乳在线观看| 国产一区二区三区久久精品| 欧美日本在线视频中文字字幕| 欧美夜福利tv在线| 91免费的视频在线播放| 成人激情春色网| 久久久人成影片一区二区三区| 91精品国产色综合久久不卡98口| 欧美成人第一页| 久久精品视频在线观看| 97国产一区二区精品久久呦| 成人av资源在线播放| 97av视频在线| 日韩中文字幕亚洲| 久久综合久中文字幕青草| 视频在线观看一区二区| 欧美在线影院在线视频| 久久久久在线观看| 欧美精品一二区| 国产成人jvid在线播放| 久久久久五月天| 国产美女久久精品香蕉69| 久久好看免费视频| 欧美精品日韩三级| 亚洲第一精品电影| 国产视频久久网| 欧美性少妇18aaaa视频| 国产91精品高潮白浆喷水| 欧美精品久久久久久久| 欧美日韩一区二区在线| 日韩欧美成人精品| 国产精品福利在线观看| 久久久91精品国产一区不卡| 国产精品第一区| 一区二区三区视频观看| 国产精品久久久久久久久久东京| 欧美激情va永久在线播放| 性欧美xxxx交| 国产精品日韩精品| 欧美极品少妇xxxxⅹ免费视频| 91免费国产视频| 成人xvideos免费视频| 亚洲性视频网站| 亚洲精品suv精品一区二区| 色综合色综合网色综合| 日韩欧美一区视频| 国产精品日韩在线观看| 欧美黑人性视频| 国产美女精品视频免费观看| 热门国产精品亚洲第一区在线| 国产成人久久久精品一区| 亚洲一区中文字幕在线观看| 国产精品扒开腿做| 中文字幕亚洲字幕| 国产精品欧美亚洲777777| 久久久av免费| 91在线视频九色| 91最新在线免费观看| 欧美一级免费看| 亚洲精品电影在线| 精品色蜜蜜精品视频在线观看| 国产美女直播视频一区| 国产欧洲精品视频| 日韩av快播网址| 久久精品国产69国产精品亚洲| 高跟丝袜一区二区三区| 欧美xxxx做受欧美.88| 欧美大片免费看| 日韩av免费一区| 97热精品视频官网| 亚洲精品99999| 午夜欧美不卡精品aaaaa| 国内精品一区二区三区| 国产精品海角社区在线观看| 欧美日韩国产专区| 97精品国产97久久久久久春色| 国产v综合v亚洲欧美久久| 91亚洲精品久久久久久久久久久久| 日韩av免费在线观看| 国产精品成人观看视频国产奇米| 91日本在线视频| 亚洲一区二区福利| 国产成人97精品免费看片| 亚洲第一网站男人都懂| 国产精品pans私拍| 色香阁99久久精品久久久| 欧美国产日韩中文字幕在线| 最近2019中文免费高清视频观看www99| 国产精品激情av在线播放| 俺也去精品视频在线观看| 亚洲自拍偷拍网址| 久久在线观看视频| 亚洲免费精彩视频| 成人xxxxx| 欧美日韩免费在线| 亚洲图片欧美日产| 成人免费激情视频| 国产成人一区二区| 精品香蕉一区二区三区| 性欧美长视频免费观看不卡| 亚洲精品98久久久久久中文字幕| 亚洲人成网站999久久久综合| 日韩精品亚洲精品| 国产91精品久久久久| www.欧美免费| 久久伊人精品天天| 欧美激情国产日韩精品一区18| 精品国产福利在线| 亚洲一区二区三区四区在线播放| 欧美中文字幕在线观看| 97在线视频免费看| 91精品国产免费久久久久久| 亚洲乱亚洲乱妇无码| 亚洲激情在线视频| 亚洲国产精品一区二区久| 国产午夜一区二区|