您現在的位置是:電腦技術吧?>? 編程技術 ??>??at對進程進行調度,進程調度算法代碼??>??正文詳情

at對進程進行調度,進程調度算法代碼

戲駿喆2019-12-11 09:02:50 人圍觀
簡介c sort函數在我們的課程設計中,我選擇了流程調度模擬。我希望你能多看一眼,多做些評論。我很久沒發郵件了。#includeiostream.h#includestdlib.hpython

我們課程設計,我選擇了一個進程調度模擬,希望大家給看看,多提意見,好久沒來發帖子了。

  #includeiostream.h  #includestdlib.h  #includetime.h  #includestdio.h  #includestring.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; coutPlease in put the text which process runed by CPU [#command#] : ;  cinrunText;  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(time0)  {  cout( Source :ID);  time--;  }  if(time=0) //進程使用完資源釋放資源,使用資源的時間到  {  pro-setISusesource(false);  int ip=pro-getIP();  pro-setIP( ip);  Source::setState(true);  coutendlThe 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;inumOfprocess;i )  } int CPU::getAlltime()  {  return allTime;  } void CPU::displayPro()  {  for(int i=0;inumOfprocess;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;tp_Process[num].getUnittime();t )  {  PC=p_Process[num].getIP();  if(_IC(p_Process[num]))  {  if(t==0)  coutthe process [p_Process[num].getID()] runed : ;  if(!p_Process[num].getISusesource())  else  {  p_Source-runned();  if( p_Source-getState() numOfblock0 ) //釋放阻塞進程  }  }  else  {  if(!p_Process[num].getBlockstate())  {  numPro--;  pp_Process[num]=NULL;  continue;  }  break;  }  allTime ;  if(numOfblock0)  blockTimeADD();  }//end for t...  if( p_Process[num].getUnittime() )  p_Process[num].setUnittime(1);  coutendl;  }//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);  coutThe process p.getID() take up the source!endl;  }  else  {  //資源已被使用則阻塞進程  blockProcess(p);  coutThe process p.getID() is blocked !endl;  return false; }  }  else  {  //' 后跟的不是數字,則語法錯誤  coutThe process [p.getID()] runned fail ! It has been stopped! endl;  return false;  }  } }  return true;  } void CPU::blockTimeADD()  {  for(int i=0;inumOfblock;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;inumOfblock;i )  }  /////////////////////////////////////////////////////////////////////////////////////  //  // The main progress  //  /////////////////////////////////////////////////////////////////////////////////////  void main()  {  int num;  cout ********************************************************endl  endl;  cout The virtual CPU the process runned endl  endl;  cout *******************************************************endl  endl;  coutinitialize the information of processes endl; coutPlease in put the number of process [#command#] ; try  catch(int)  {  coutYou in put the numbers of process is error !endl;  exit(1);  } Process::RandID(); // 隨機生成第一個進程的ID,以后生成的進程ID順序加1  CPU virtualCPU(num);  coutPocesses runed by CPU endl;  virtualCPU.Run();  coutProcesses 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調用時只是正常輸出,假如碰到' 表示該進程要調用系統資源后面必須跟一個數字表示占有的時間,假如資源閑置則占有資源否則阻塞,等資源釋放在占有資源。

進程的調用算法我采用的是時間片輪轉算法并有所改進,當某個進程從阻塞隊列釋放后,他將把以前因為等待資源而被浪費的時間補回來。

版權聲明:本文由 戲駿喆 整理編輯。

原標題:c語言模擬進程調度,一個模擬進程調度程序Linux

轉載注明出處:http://www.dn9ww09s.icu/program/15314.html

文章評論

    共有條評論來說兩句吧...

    用戶名:

    驗證碼:

作者推薦

  • gurobi使用實例,canalyzer使用實例

    gurobi使用實例,canalyzer使用實例 相關圖片使用與滿足理論的實例本文主要介紹splfix數組在phpspl標準庫中的使用實例。Splfixedarray主要處理與數組相關的主要功能,具有固定的長度和比普通數組處理速度快的特點Qt實例...

  • 服務器組件,組件正在調用服務器

    服務器組件,組件正在調用服務器 相關圖片服務器插件ASP檢測服務器安裝的組件服務器框架...

  • 安裝總結,自動線安裝與調試總結

    安裝總結,自動線安裝與調試總結 相關圖片安裝課程設計總結Tomcat是一個具有web服務器功能的servlet容器。我們可以從以下地址下載。http://apache.mirror.phpchina.com/tomc安裝實訓總結...

  • defined,undefined

    defined,undefined 相關圖片ill defined本文的例子描述了在PHP中使用get_defined_constants函數的方法。與您分享以供參考。具體分析如下:get defined_常量(PHP 4=4well defined...

  • 國際化培訓,國際化培訓作業

    國際化培訓,國際化培訓作業 相關圖片什么是國際化教育目標:掌握Java Web應用程序的國際化;掌握頁面信息中數字的格式;掌握頁面信息中日期和時間的格式。隨著全球經濟的國際化,許多公司的業務涉及多個國家和語言,...

  • asp上傳文件,asp上傳文件教程

    asp上傳文件,asp上傳文件教程 相關圖片asp上傳文件md5Functions chkimg (IMG), dim returnValue, chkjpeg returnValue = true for next errasp上傳文件太慢...

  • 本地環境怎么樣搭建,搭建環境

    本地環境怎么樣搭建,搭建環境 相關圖片php服務器環境搭建所謂Wamp環境就是windows Apache MySQL PHP開發操作環境,這是我們學習PHP開發最基本的一步。雖然現在集成開發環境已經邁出了一大步,但是怎么搭建php的環境...

  • 異常處理培訓收獲,異常處理培訓心得

    異常處理培訓收獲,異常處理培訓心得 相關圖片制程異常處理培訓心得要處理JSP程序可能生成的異常,您可以從多個角度進行處理:特定代碼、特定文件和錯誤類型。如果您特定于您的代碼,則可以使用標準標記庫中核心標記庫中的...

  • asp開源代碼,html代碼

    asp開源代碼,html代碼 相關圖片怎樣將asp源代碼Size appealnum, appealcountappealnum = 10 'same ip60 secondsasp采集器...

  • ajax用戶名是否重復,ajax校驗用戶名

    ajax用戶名是否重復,ajax校驗用戶名 相關圖片ajax實現判斷用戶名是否存在! DOCTYPE HTML public-//W3C//DTD HTML 4.0 transitional//enhtmlheadtitle ASP Ajax用ajax做登錄...

熱評文章

  • 保險基本原理的總結,基本原理的意思

    保險基本原理的總結,基本原理的意思 相關圖片唯物史觀三個基本原理JSP的優點是將業務邏輯處理和Web UI工作分離開來。JSP頁面將一些JSP元素插入到普通的web頁面中,根據不同的請求輸出動態文本。JSP容器負責將JSP文分子生物學的三...

  • php gd庫,php

    php gd庫,php 相關圖片php圖像處理本文主要介紹了利用GD庫在PHP中實現遠程圖像下載的實例。本文直接給出了實現代碼。您可以參考今天的類編寫遠程圖像下載,并提前編寫PHP GD庫來實現遠程圖像下載php實戰小...

  • 數據庫有哪些,數據庫

    數據庫有哪些,數據庫 相關圖片數據庫視圖SP操作access數據庫最近用JSP編寫了公司網站的示例程序,用JSP操作access數據庫,很多事情都不難,但我們不知道。^-^哈哈,現在我已經寫了一個小程SQL數據庫...

  • 數組的最大值及下標,返回數組最大值的下標

    數組的最大值及下標,返回數組最大值的下標 相關圖片php數組最大值的下標本文主要介紹了PHP獲取數組最大下標的方法,包括PHP的功能,如馬克斯和數組[查找]操作數組。對于您的朋友,可以參考本文的以下示例來描述PHP獲取數組最大下標的...

  • 案例分析和實例分析,qfd實例分析

    案例分析和實例分析,qfd實例分析 相關圖片autoform實例分析系統:對于JSP初學者來說,Win2003 iis6.0 J2SE 5.0,當他們談到JSP IIS時,一定要有一個大腦袋!雖然在雅加達JK2可以解決這個問題,實例分析的亮點...

  • asp語法,asp語法教程

    asp語法,asp語法教程 相關圖片razor 語法下次循環使用時,需要多次執行一段代碼。語法如下:for counter=initial“value to finish”value[step incrementasp語言特點...

  • while語法,since語法

    while語法,since語法 相關圖片while是介詞嗎另一個常見的post do while循環。。。下一個循環。在do while循環語句中重復語句塊的次數是可變的。當條件為真或條件變為真時,重復該語句。語法如下while后面動詞用法...

  • 緩存,什么是緩存

    緩存,什么是緩存 相關圖片ie清理緩存內容緩存是web應用程序中最常用的優化技術之一。例如,我們可以使用自定義JSP標記來命名它,并封裝需要緩存的每個頁面片段。任何自定義標記都可以控制它包含的部分(緩...

  • ap數據庫,ap數據庫怎么升級

    ap數據庫,ap數據庫怎么升級 相關圖片api數據庫AP plet是一個用Java語言編寫的小型應用程序。它可以嵌入到HTML中,通過WWW瀏覽器進行解釋和執行。但是,如何處理互聯網世界中大量的數據和分布在網絡各tp5數據庫增刪改查...

  • php猴子大王,php猴子選大王

    php猴子大王,php猴子選大王 相關圖片PHP猴王本文舉例說明如何解決這一問題。與您分享以供參考。具體分析如下:問題描述:一群猴子圍成一圈,依次按1、2、…、N。然后從第一個開始數數,數到m,把它踢出圓圈,從后猴...

關注微信

变脸官网查询