操作系統(tǒng)進(jìn)程調(diào)度課程設(shè)計報告_第1頁
已閱讀1頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p>  設(shè)計時間: 2012-1-1至2012-1-08 </p><p>  姓名: 學(xué)號: </p><p><b>  組員:</b></p><p>  專業(yè)年級: </p><p><b>  一.設(shè)計目的:</b></p>

2、<p>  通過課程設(shè)計, 加深對操作系統(tǒng)各資源管理模塊的理解,掌握操作系統(tǒng)的基本原理及功能, 具有初步分析實際操作系統(tǒng)、設(shè)計、構(gòu)造和開發(fā)現(xiàn)代操作系統(tǒng)的基本能力。</p><p><b>  二.設(shè)計內(nèi)容:</b></p><p>  2.題目:進(jìn)程調(diào)度算法的設(shè)計</p><p><b>  設(shè)計要求:</b>&

3、lt;/p><p> ?、僭O(shè)計進(jìn)程控制塊PCB表結(jié)構(gòu),分別適用于優(yōu)先數(shù)調(diào)度算法和循環(huán)輪轉(zhuǎn)調(diào)度算法。</p><p> ?、诮⑦M(jìn)程就緒隊列。對兩種不同算法編制入鏈子程序。</p><p>  ③編制兩種進(jìn)程調(diào)度算法:1)優(yōu)先數(shù)調(diào)度;2)循環(huán)輪轉(zhuǎn)調(diào)度</p><p>  開發(fā)環(huán)境:VC++6.0</p><p><b&

4、gt;  設(shè)計技術(shù)參數(shù):</b></p><p> ?、俦境绦蛴脙煞N算法對五個進(jìn)程進(jìn)行調(diào)度,每個進(jìn)程可有三個狀態(tài),并假設(shè)初始狀態(tài)為就緒狀態(tài)。</p><p> ?、跒榱吮阌谔幚恚绦蛑械哪尺M(jìn)程運(yùn)行時間以時間片為單位計算。各進(jìn)程的優(yōu)先數(shù)或輪轉(zhuǎn)時間數(shù)以及進(jìn)程需運(yùn)行的時間片數(shù)的初始值均由用戶給定。</p><p> ?、墼趦?yōu)先數(shù)算法中,優(yōu)先數(shù)的值為50與運(yùn)行時

5、間的差值,即P_TIME-process->needtime。進(jìn)程每執(zhí)行一次,優(yōu)先數(shù)減3,CPU時間片數(shù)加1,進(jìn)程還需要的時間片數(shù)減1。在輪轉(zhuǎn)算法中,采用固定時間片(即:每執(zhí)行一次進(jìn)程,該進(jìn)程的執(zhí)行時間片數(shù)為已執(zhí)行了2個單位),這時,CPU時間片數(shù)加2,進(jìn)程還需要的時間片數(shù)減2,并排列到就緒隊列的尾上。</p><p> ?、軐τ谟龅絻?yōu)先數(shù)一致的情況,采用FIFO策略解決。</p><p

6、><b>  三.設(shè)計過程</b></p><p>  個人負(fù)責(zé)實現(xiàn)的功能:</p><p>  /函數(shù)功能:優(yōu)先級法調(diào)度將進(jìn)程插入到就緒隊列算法 </p><p>  void FirstInsert(PCB *q)</p><p><b>  {</b></p><p&

7、gt;  PCB *p,*s,*r; /*p,*r用來控制就緒隊列滾動,S指向插入的隊列*/</p><p>  int b; /*b作為插入控制標(biāo)志的*/ </p><p><b>  s=q;</b></p><p><b>  p=READY;</b></p><p><b>  r

8、=p;</b></p><p><b>  b=1;</b></p><p>  if(s->PRIO>=READY->PRIO)</p><p><b>  {</b></p><p>  s->next=READY;</p><p> 

9、 READY=s; </p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  while((p!=NULL)&&b)</p><p&g

10、t;<b>  {</b></p><p>  if(p->PRIO>=s->PRIO)</p><p><b>  {</b></p><p><b>  r=p;</b></p><p>  p=p->next;</p><p&g

11、t;<b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p><b>  b=0;</b></p><p><b>  }</b></p><p&

12、gt;<b>  } </b></p><p>  s->next=p;</p><p>  r->next=s;</p><p><b>  }</b></p><p><b>  }</b></p><p>  //函數(shù)功能:時間片輪轉(zhuǎn)算

13、法調(diào)度將進(jìn)程插入到就緒隊列算法 </p><p>  void SecondInsert(PCB *q)</p><p><b>  {</b></p><p>  tail->next=q;</p><p><b>  tail=q;</b></p><p>  q-

14、>next=NULL;</p><p><b>  }</b></p><p><b>  設(shè)計思路</b></p><p>  首先設(shè)計分成兩個主要部分:</p><p>  1、優(yōu)先級法調(diào)度將進(jìn)程插入到就緒隊列算法:</p><p>  *p,*r用來控制就緒隊列滾

15、動,*S指向插入的隊列,再比較p和s的進(jìn)程的優(yōu)先度大小,如果大于等于則直接加到首部。否則和第二個再比較,p指向下一個進(jìn)程,r指向p的上一個進(jìn)程,如果p==NULL,則將新進(jìn)程插到隊尾。否則s的next指向p,r的next指向s。</p><p>  2時間片輪轉(zhuǎn)算法調(diào)度將進(jìn)程插入到就緒隊列算法:</p><p>  直接將要插進(jìn)的進(jìn)程插進(jìn)就緒隊尾即可,也就是將尾部的進(jìn)程的next指向新插進(jìn)

16、隊列。tail指向新插進(jìn)程的地址。</p><p><b>  算法和流程圖</b></p><p>  Main函數(shù)流程圖:</p><p>  P R</p><p><b>  優(yōu)先數(shù)算法流程圖:</b></p><p>

17、<b>  Y</b></p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  N</b></p><p><b

18、>  Y</b></p><p>  循環(huán)輪轉(zhuǎn)調(diào)度算法流程圖:</p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  N</b

19、></p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  Y</b></p><p><b>  N</b></p><p>  四.操作界面截圖及分析</p>

20、<p>  優(yōu)先數(shù)調(diào)度算法運(yùn)行過程:</p><p><b>  回車直至結(jié)束:</b></p><p>  時間輪轉(zhuǎn)調(diào)度算法運(yùn)行過程:</p><p><b>  回車直至結(jié)束:</b></p><p><b>  五.設(shè)計總結(jié):</b></p>

21、<p>  通過這次課程設(shè)計,加深了對進(jìn)程調(diào)度算法的理解,掌握了操作系統(tǒng)中利用軟件工程的方法和思想來設(shè)計大型軟件的過程。基本掌握實際操作系統(tǒng)、設(shè)計、構(gòu)造和開發(fā)的基本能力。將課本上學(xué)習(xí)到的理論知識與實際編程想結(jié)合,提高了實踐的能力和經(jīng)驗,為以后進(jìn)一步深造和鉆研有關(guān)操作系統(tǒng)的學(xué)科建立了扎實的基礎(chǔ)。</p><p>  但是,我發(fā)現(xiàn)這個程序還有很多缺點,例如界面不好,進(jìn)程允許重命名的情況,這個都是需要做進(jìn)一步

22、的改進(jìn)的,但是時間比較倡促,現(xiàn)在就不進(jìn)行改進(jìn)了。</p><p>  還有如果自己親手寫還需要很長時間!</p><p><b>  附錄:</b></p><p>  各程序主要函數(shù)及注釋</p><p>  #include <stdio.h></p><p>  #include

23、 <stdlib.h></p><p>  #include <string.h></p><p>  #include <ctype.h></p><p>  //進(jìn)程控制塊PCB的設(shè)計</p><p>  typedef struct node </p><p><b>

24、;  {</b></p><p>  char Name[10]; //進(jìn)程名</p><p>  int PRIO; //進(jìn)程的優(yōu)先級</p><p>  int ROUND; //進(jìn)程分配的時間片 </p><p>  int CpuTime; //進(jìn)程消耗的CUP時間</p><p>

25、  int NeedTime; //進(jìn)程需要的CUP時間</p><p>  int Count; //進(jìn)程運(yùn)行時間</p><p>  char State; //進(jìn)程的狀態(tài):'R':運(yùn)行,'W':等待,'F':結(jié)束</p><p>  struct node *next;//指向下一個進(jìn)程的指針

26、</p><p><b>  }PCB;</b></p><p>  void Begin(void); //將進(jìn)程就緒隊列中第一個放進(jìn)運(yùn)行隊列 </p><p>  void PRINTF1(char a); //打印進(jìn)程標(biāo)志信息</p><p>  void PRINTF2(char a); //輸出單個進(jìn)程信

27、息的函數(shù)</p><p>  void PRINTF(char CH); // 輸出所有進(jìn)程信息的函數(shù)------1</p><p>  void pcreate_task(char CH);//采用優(yōu)先級進(jìn)程調(diào)度法時,進(jìn)程初始化函數(shù) </p><p>  void rcreate_task(char CH); //采用時間片輪轉(zhuǎn)法進(jìn)程調(diào)度法時,進(jìn)程初始化函數(shù)&

28、lt;/p><p>  void PRIOrity(char CH);//采用優(yōu)先級進(jìn)程調(diào)度法時,進(jìn)程調(diào)度函數(shù) </p><p>  void RoundRun(char CH); //采用時間片輪轉(zhuǎn)調(diào)度函數(shù)--------2 </p><p>  void FirstInsert(PCB *q); //優(yōu)先級法調(diào)度將進(jìn)程插入到就緒隊列 </p><

29、p>  void SecondInsert(PCB *q);//時間片輪轉(zhuǎn)算法調(diào)度將進(jìn)程插入到就緒隊列-----3</p><p>  PCB *Finish,*READY,*tail,*RUN;/*指向三個隊列的隊首的指針,tail為就緒隊列的隊尾指針*/ </p><p>  int N;/*定義進(jìn)程的數(shù)目*/ </p><p>  /*main 函數(shù),運(yùn)

30、行直到用戶退出*/</p><p>  int main()</p><p><b>  {</b></p><p><b>  char CH;</b></p><p>  char flag='Y'; //設(shè)定標(biāo)志位初始值為 ‘Y’</p><p> 

31、 char f=1; </p><p>  while(toupper(flag)=='Y') // toupper(int c)返回對應(yīng)字母的大寫值。</p><p><b>  {</b></p><p>  printf("| O(∩_∩)O 選擇菜單

32、 |\n");</p><p>  printf("| 選擇一: 優(yōu)先級調(diào)度請按 ‘P’ |\n");</p><p>  printf("| 選擇二: 時間輪轉(zhuǎn)法調(diào)度請按‘R’ |\n");<

33、/p><p><b>  if(f==0)</b></p><p><b>  {</b></p><p>  getchar();</p><p><b>  }</b></p><p>  scanf("%c",&CH);&l

34、t;/p><p>  printf("請輸入進(jìn)程的數(shù)目:\n");</p><p><b>  if(f==0)</b></p><p><b>  {</b></p><p>  getchar();</p><p><b>  }</b&g

35、t;</p><p>  scanf("%d",&N);</p><p>  if((CH=='p')||(CH=='P')) //如果選擇p 則執(zhí)行優(yōu)先級調(diào)度算法</p><p><b>  {</b></p><p>  pcreate_task(CH

36、); </p><p>  PRIOrity(CH);</p><p><b>  } </b></p><p>  else if((CH=='r')||(CH=='R')) //如果選擇r 則選擇執(zhí)行時間片輪轉(zhuǎn)算法</p><p><b>  {&l

37、t;/b></p><p>  rcreate_task(CH);</p><p>  RoundRun(CH);</p><p><b>  }</b></p><p>  printf("繼續(xù)請按 Y,按任意鍵退出。 \n ");</p><p>  scanf(&q

38、uot;%c",&flag);</p><p><b>  f=0;</b></p><p><b>  }</b></p><p><b>  return 0;</b></p><p><b>  }</b></p>&

39、lt;p>  //函數(shù)功能: 將優(yōu)先級調(diào)度算法的進(jìn)程就緒隊列中第一個運(yùn)行,插入運(yùn)行隊列。 </p><p>  void Begin(void) //將就緒態(tài)的進(jìn)程,調(diào)入cpu運(yùn)行,并將狀態(tài)改為運(yùn)行態(tài) R</p><p><b>  {</b></p><p>  if(READY!=NULL) </p><p&g

40、t;<b>  {</b></p><p>  RUN=READY; //就緒態(tài)改為運(yùn)行態(tài)</p><p>  READY=READY->next; //等待隊列中,刪除被改為運(yùn)行態(tài)的進(jìn)程</p><p>  RUN->State='R'; //狀態(tài)改為運(yùn)行態(tài)</p><p>  RUN-

41、>next=NULL;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  RUN=NULL; //如果沒有就緒態(tài)的進(jìn)程,則無法將進(jìn)程轉(zhuǎn)為運(yùn)行態(tài)。</p>&l

42、t;p><b>  }</b></p><p><b>  }</b></p><p><b>  /*</b></p><p>  函數(shù)功能:輸出進(jìn)程信息的標(biāo)題函數(shù) </p><p>  函數(shù)原型:void PRINTF1(char a)</p><

43、p>  函數(shù)參數(shù):char a :a=='p'為優(yōu)先級,=='r'為時間片輪轉(zhuǎn) </p><p>  函數(shù)返回值:void</p><p><b>  */</b></p><p>  void PRINTF1(char a)</p><p><b>  {</b&g

44、t;</p><p>  if(toupper(a)=='P')</p><p><b>  {</b></p><p>  printf("進(jìn)程名 耗時 需時 優(yōu)先級 狀態(tài) \n");</p><p><b>  }</b></p><

45、p><b>  else</b></p><p><b>  {</b></p><p>  printf("進(jìn)程名 耗時 需時 已用時 時間片 狀態(tài) \n"); </p><p><b>  } </b></p><p><b>

46、;  }</b></p><p><b>  /*</b></p><p>  函數(shù)功能:輸出單個進(jìn)程信息的函數(shù) </p><p>  函數(shù)原型:void PRINTF2(char a,PCB *p)</p><p>  函數(shù)參數(shù):char a :a=='p'為優(yōu)先級,=='r'

47、;為時間片輪轉(zhuǎn) </p><p>  PCB *p 為指向待輸出的進(jìn)程控制塊的指針 </p><p>  函數(shù)返回值:void</p><p><b>  */</b></p><p>  void PRINTF2(char a,PCB *p)</p><p><b>  {&l

48、t;/b></p><p>  if(toupper(a)=='P')</p><p><b>  {</b></p><p>  printf("%s %d %d %d %c\n",p->Name,p->CpuTime,p->NeedTime

49、,p->PRIO,p->State);</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  printf("%s %d %d

50、%d %d %c\n",p->Name,p->CpuTime,p->NeedTime,p->Count,p->ROUND,p->State);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  

51、/*</b></p><p>  函數(shù)功能:輸出所有進(jìn)程信息的函數(shù) </p><p>  函數(shù)原型:void PRINTF(char CH)</p><p>  函數(shù)參數(shù):char a :a=='p'為優(yōu)先級,=='r'為時間片輪轉(zhuǎn) </p><p>  函數(shù)返回值:void</p>

52、<p><b>  */</b></p><p>  void PRINTF(char CH)</p><p><b>  {</b></p><p><b>  PCB *p;</b></p><p>  PRINTF1(CH);</p><p&

53、gt;  if(RUN!=NULL)</p><p><b>  {</b></p><p>  PRINTF2(CH,RUN);</p><p><b>  }</b></p><p><b>  p=READY;</b></p><p>  whil

54、e(p!=NULL)</p><p><b>  {</b></p><p>  PRINTF2(CH,p);</p><p>  p=p->next;</p><p><b>  }</b></p><p><b>  p=Finish;</b>

55、</p><p>  while(p!=NULL)</p><p><b>  {</b></p><p>  PRINTF2(CH,p);</p><p>  p=p->next;</p><p><b>  }</b></p><p>  g

56、etchar();</p><p><b>  }</b></p><p>  //函數(shù)功能:優(yōu)先級法調(diào)度將進(jìn)程插入到就緒隊列算法 </p><p>  void FirstInsert(PCB *q)</p><p><b>  {</b></p><p>  PCB *p

57、,*s,*r; /*p,r用來控制就緒隊列滾動,S指向插入的隊列*/</p><p>  int b; /*b作為插入控制標(biāo)志的*/ </p><p><b>  s=q;</b></p><p><b>  p=READY;</b></p><p><b>  r=p;</b>

58、;</p><p><b>  b=1;</b></p><p>  if(s->PRIO>=READY->PRIO)</p><p><b>  {</b></p><p>  s->next=READY;</p><p>  READY=s;

59、 </p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  while((p!=NULL)&&b)</p><p><b> 

60、 {</b></p><p>  if(p->PRIO>=s->PRIO)</p><p><b>  {</b></p><p><b>  r=p;</b></p><p>  p=p->next;</p><p><b> 

61、 }</b></p><p><b>  else</b></p><p><b>  {</b></p><p><b>  b=0;</b></p><p><b>  }</b></p><p><b>

62、  } </b></p><p>  s->next=p;</p><p>  r->next=s;</p><p><b>  }</b></p><p><b>  }</b></p><p>  //函數(shù)功能:時間片輪轉(zhuǎn)算法調(diào)度將進(jìn)程插入到就緒隊

63、列算法 </p><p>  void SecondInsert(PCB *q)</p><p><b>  {</b></p><p>  tail->next=q;</p><p><b>  tail=q;</b></p><p>  q->next=NUL

64、L;</p><p><b>  }</b></p><p>  //函數(shù)功能:采用優(yōu)先級進(jìn)程調(diào)度法時,進(jìn)程初始化函數(shù) </p><p>  void pcreate_task(char CH)</p><p><b>  {</b></p><p><b>  P

65、CB *p;</b></p><p>  int i,time;</p><p>  char na[10]; //定義一個數(shù)組</p><p>  READY=NULL; //將就緒隊列、運(yùn)行隊列和運(yùn)行結(jié)束隊列清空</p><p>  Finish=NULL; //

66、隊列清空</p><p>  RUN=NULL; //隊列清空</p><p>  for(i=0;i<N;i++) //循環(huán)輸入N個進(jìn)程,插入到隊列中</p><p><b>  {</b></p><p>  p=(PCB*)malloc(sizeof(PCB)); //

67、為進(jìn)程申請空間</p><p>  printf("輸入進(jìn)程名字:\n");</p><p>  scanf("%s",na);</p><p><b>  again: ;</b></p><p>  printf("輸入進(jìn)程%s的時間:\n",na);&l

68、t;/p><p>  scanf("%d",&time); //獲取時間</p><p>  if(time<=0) //判斷輸入時間有效性</p><p><b>  {</b></p><p>  printf("輸入出錯!請再次輸入!\n");

69、</p><p>  goto again;</p><p><b>  }</b></p><p>  strcpy(p->Name,na);</p><p>  p->CpuTime=0; //cpu所用時間設(shè)初值為0</p><p>  p->NeedTim

70、e=time; //將時間傳給所需時間</p><p>  p->State='W'; //進(jìn)程狀態(tài)變?yōu)榫途w態(tài)。</p><p>  p->PRIO=50-time; //優(yōu)先級減小</p><p>  if(READY==NULL) //如果就緒態(tài)隊列為空,則將該進(jìn)程作為頭結(jié)點,插入就緒隊

71、列。</p><p><b>  {</b></p><p><b>  READY=p;</b></p><p>  READY->next=NULL;</p><p>  } //如果就緒隊列非空,則插入就緒隊列。</p><

72、;p><b>  else</b></p><p><b>  {</b></p><p>  FirstInsert(p);</p><p><b>  }</b></p><p>  printf("進(jìn)程優(yōu)先級調(diào)度信息如下:\n");</p&

73、gt;<p>  PRINTF(CH); </p><p><b>  }</b></p><p>  Begin(); //開始運(yùn)行函數(shù)。</p><p><b>  }</b></p><p>  //函數(shù)功能:采用時間片輪轉(zhuǎn)法進(jìn)程調(diào)度法時

74、,進(jìn)程初始化函數(shù) </p><p>  void rcreate_task(char CH)</p><p><b>  {</b></p><p><b>  PCB *p;</b></p><p>  int i,time; //初始化定義,跟上面的差不多</p><p&

75、gt;  char na[10];</p><p>  READY=NULL; //定義都初始化為空</p><p>  Finish=NULL;</p><p><b>  RUN=NULL;</b></p><p>  for(i=0;i<N;i++)</p><p><b&g

76、t;  {</b></p><p>  p=(PCB*)malloc(sizeof(PCB)); //為進(jìn)程控制塊申請動態(tài)空間</p><p>  printf("請輸入進(jìn)程名字:\n");</p><p>  scanf("%s",na);</p><p>  again: ;&

77、lt;/p><p>  printf("請輸入該進(jìn)程%s的運(yùn)行時間:\n",na);</p><p>  scanf("%d",&time);</p><p>  if(time<=0)</p><p><b>  {</b></p><p>  

78、printf("輸入有誤!請再次輸入!\n");</p><p>  goto again;</p><p><b>  }</b></p><p>  strcpy(p->Name,na);</p><p>  p->CpuTime=0;</p><p>  p-

79、>NeedTime=time;</p><p>  p->Count=0;</p><p>  p->State='W';</p><p>  p->ROUND=3; //設(shè)時間片為3,可以設(shè)置其他數(shù)</p><p>  if(READY!=NULL) //如果就緒隊列不為空,則將該進(jìn)程插入就緒

80、隊列中。</p><p><b>  {</b></p><p>  SecondInsert(p); </p><p><b>  }</b></p><p>  else //如果就緒隊列為空,則以該進(jìn)程為頭結(jié)點,初始化就緒隊列。</p><p>&

81、lt;b>  {</b></p><p>  p->next=READY;</p><p><b>  READY=p;</b></p><p><b>  tail=p;</b></p><p><b>  }</b></p><p

82、>  printf("進(jìn)程時間片輪轉(zhuǎn)法調(diào)度信息如下:\n ");</p><p>  PRINTF(CH);</p><p><b>  }</b></p><p>  RUN=READY; //開始運(yùn)行</p><p>  READY=READY->next;</p>

83、<p>  RUN->State='R';</p><p><b>  }</b></p><p>  //函數(shù)功能:采用優(yōu)先級進(jìn)程調(diào)度法時,進(jìn)程調(diào)度函數(shù) </p><p>  void PRIOrity(char CH)</p><p><b>  {</b><

84、;/p><p>  while(RUN!=NULL) //只要運(yùn)行態(tài) 不為空則繼續(xù)運(yùn)行</p><p><b>  {</b></p><p>  RUN->CpuTime+=1; //運(yùn)行時間加 1</p><p>  RUN->NeedTime-=1; //需要時間 減1</p><p

85、>  RUN->PRIO-=3; //運(yùn)行后 優(yōu)先級減少3</p><p>  if(RUN->NeedTime==0) //運(yùn)行所需時間為0是 插入調(diào)度結(jié)束隊列 Finish</p><p><b>  {</b></p><p>  RUN->next=Finish;</p><p>

86、;  Finish=RUN;</p><p>  RUN->State='F'; //表示結(jié)束</p><p>  RUN=NULL; //設(shè)置為空</p><p>  Begin(); </p><p><b>  }</b></p>

87、<p><b>  else</b></p><p><b>  {</b></p><p>  if((READY!=NULL)&&(RUN->PRIO<READY->PRIO)) //如果就緒態(tài)不為空,且優(yōu)先級較低,則為就緒態(tài)等待運(yùn)行。</p><p><b> 

88、 {</b></p><p>  RUN->State='W';</p><p>  FirstInsert(RUN);</p><p><b>  RUN=NULL;</b></p><p><b>  Begin();</b></p><p&

89、gt;<b>  }</b></p><p><b>  }</b></p><p>  PRINTF(CH);</p><p><b>  }</b></p><p><b>  }</b></p><p>  //函數(shù)功能:采用

90、時間片輪轉(zhuǎn)法進(jìn)程調(diào)度函數(shù) </p><p>  void RoundRun(char CH)</p><p><b>  {</b></p><p>  while(RUN!=NULL)</p><p><b>  {</b></p><p>  RUN->CpuTim

91、e=RUN->CpuTime+1; //cpu時間+1</p><p>  RUN->NeedTime=RUN->NeedTime-1;//需要時間-1</p><p>  RUN->Count=RUN->Count+1; //運(yùn)行時間+1</p><p>  if(RUN->NeedTime==0) //直到所需時間為0

92、,則改為Finish態(tài)</p><p><b>  { </b></p><p>  RUN->next=Finish;</p><p>  Finish=RUN;</p><p>  RUN->State='F'; //狀態(tài)改為完成</p><p><b>

93、;  RUN=NULL;</b></p><p>  if(READY!=NULL)</p><p><b>  {</b></p><p><b>  Begin();</b></p><p>  } </p><p><b>  }&

94、lt;/b></p><p>  else //所需時間不為0</p><p><b>  {</b></p><p>  if(RUN->Count==RUN->ROUND) //cpu分配的時間和時間片相等 則設(shè)運(yùn)行時間為0</p><p><b>  {</b><

95、/p><p>  RUN->Count=0; </p><p>  if(READY!=NULL) //就緒隊列不為空,則將進(jìn)程改為就緒態(tài),插入就緒隊列。</p><p><b>  { </b></p><p>  RUN->State='W';//運(yùn)行態(tài)改為就緒態(tài)</p&

96、gt;<p>  SecondInsert(RUN);</p><p><b>  Begin();</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論