2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩18頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

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

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

3、lt;/p><p> ?、僭O(shè)計(jì)進(jìn)程控制塊PCB表結(jié)構(gòu),分別適用于優(yōu)先數(shù)調(diào)度算法和循環(huán)輪轉(zhuǎn)調(diào)度算法。</p><p>  ②建立進(jìn)程就緒隊(duì)列。對(duì)兩種不同算法編制入鏈子程序。</p><p> ?、劬幹苾煞N進(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è)計(jì)技術(shù)參數(shù):</b></p><p> ?、俦境绦蛴脙煞N算法對(duì)五個(gè)進(jìn)程進(jìn)行調(diào)度,每個(gè)進(jìn)程可有三個(gè)狀態(tài),并假設(shè)初始狀態(tài)為就緒狀態(tài)。</p><p> ?、跒榱吮阌谔幚恚绦蛑械哪尺M(jìn)程運(yùn)行時(shí)間以時(shí)間片為單位計(jì)算。各進(jìn)程的優(yōu)先數(shù)或輪轉(zhuǎn)時(shí)間數(shù)以及進(jìn)程需運(yùn)行的時(shí)間片數(shù)的初始值均由用戶給定。</p><p>  ③在優(yōu)先數(shù)算法中,優(yōu)先數(shù)的值為50與運(yùn)行時(shí)

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

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

7、gt;  PCB *p,*s,*r; /*p,*r用來控制就緒隊(duì)列滾動(dòng),S指向插入的隊(duì)列*/</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ù)功能:時(shí)間片輪轉(zhuǎn)算

13、法調(diào)度將進(jìn)程插入到就緒隊(duì)列算法 </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è)計(jì)思路</b></p><p>  首先設(shè)計(jì)分成兩個(gè)主要部分:</p><p>  1、優(yōu)先級(jí)法調(diào)度將進(jìn)程插入到就緒隊(duì)列算法:</p><p>  *p,*r用來控制就緒隊(duì)列滾

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

16、隊(duì)列。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>  時(shí)間輪轉(zhuǎn)調(diào)度算法運(yùn)行過程:</p><p><b>  回車直至結(jié)束:</b></p><p><b>  五.設(shè)計(jì)總結(jié):</b></p>

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

22、的改進(jìn)的,但是時(shí)間比較倡促,現(xiàn)在就不進(jìn)行改進(jìn)了。</p><p>  還有如果自己親手寫還需要很長(zhǎng)時(shí)間!</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è)計(jì)</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)先級(jí)</p><p>  int ROUND; //進(jìn)程分配的時(shí)間片 </p><p>  int CpuTime; //進(jìn)程消耗的CUP時(shí)間</p><p>

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

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

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

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

29、p>  void SecondInsert(PCB *q);//時(shí)間片輪轉(zhuǎn)算法調(diào)度將進(jìn)程插入到就緒隊(duì)列-----3</p><p>  PCB *Finish,*READY,*tail,*RUN;/*指向三個(gè)隊(duì)列的隊(duì)首的指針,tail為就緒隊(duì)列的隊(duì)尾指針*/ </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)返回對(duì)應(yīng)字母的大寫值。</p><p><b>  {</b></p><p>  printf("| O(∩_∩)O 選擇菜單

32、 |\n");</p><p>  printf("| 選擇一: 優(yōu)先級(jí)調(diào)度請(qǐng)按 ‘P’ |\n");</p><p>  printf("| 選擇二: 時(shí)間輪轉(zhuǎn)法調(diào)度請(qǐng)按‘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("請(qǐng)輸入進(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)先級(jí)調(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í)行時(shí)間片輪轉(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ù)請(qǐng)按 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)先級(jí)調(diào)度算法的進(jìn)程就緒隊(duì)列中第一個(gè)運(yùn)行,插入運(yùn)行隊(duì)列。 </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; //等待隊(duì)列中,刪除被改為運(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)先級(jí),=='r'為時(shí)間片輪轉(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)程名 耗時(shí) 需時(shí) 優(yōu)先級(jí) 狀態(tài) \n");</p><p><b>  }</b></p><

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

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

47、;為時(shí)間片輪轉(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)先級(jí),=='r'為時(shí)間片輪轉(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)先級(jí)法調(diào)度將進(jìn)程插入到就緒隊(duì)列算法 </p><p>  void FirstInsert(PCB *q)</p><p><b>  {</b></p><p>  PCB *p

57、,*s,*r; /*p,r用來控制就緒隊(duì)列滾動(dòng),S指向插入的隊(duì)列*/</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ù)功能:時(shí)間片輪轉(zhuǎn)算法調(diào)度將進(jìn)程插入到就緒隊(duì)

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í)進(jìn)程調(diào)度法時(shí),進(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]; //定義一個(gè)數(shù)組</p><p>  READY=NULL; //將就緒隊(duì)列、運(yùn)行隊(duì)列和運(yùn)行結(jié)束隊(duì)列清空</p><p>  Finish=NULL; //

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

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

68、t;/p><p>  scanf("%d",&time); //獲取時(shí)間</p><p>  if(time<=0) //判斷輸入時(shí)間有效性</p><p><b>  {</b></p><p>  printf("輸入出錯(cuò)!請(qǐng)?jiān)俅屋斎?!\n");

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

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

71、列。</p><p><b>  {</b></p><p><b>  READY=p;</b></p><p>  READY->next=NULL;</p><p>  } //如果就緒隊(duì)列非空,則插入就緒隊(duì)列。</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)先級(jí)調(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ù)功能:采用時(shí)間片輪轉(zhuǎn)法進(jìn)程調(diào)度法時(shí)

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)程控制塊申請(qǐng)動(dòng)態(tài)空間</p><p>  printf("請(qǐng)輸入進(jìn)程名字:\n");</p><p>  scanf("%s",na);</p><p>  again: ;&

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

78、printf("輸入有誤!請(qǐng)?jiān)俅屋斎?!\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è)時(shí)間片為3,可以設(shè)置其他數(shù)</p><p>  if(READY!=NULL) //如果就緒隊(duì)列不為空,則將該進(jìn)程插入就緒

80、隊(duì)列中。</p><p><b>  {</b></p><p>  SecondInsert(p); </p><p><b>  }</b></p><p>  else //如果就緒隊(duì)列為空,則以該進(jìn)程為頭結(jié)點(diǎn),初始化就緒隊(duì)列。</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)程時(shí)間片輪轉(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í)進(jìn)程調(diào)度法時(shí),進(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)行時(shí)間加 1</p><p>  RUN->NeedTime-=1; //需要時(shí)間 減1</p><p

85、>  RUN->PRIO-=3; //運(yùn)行后 優(yōu)先級(jí)減少3</p><p>  if(RUN->NeedTime==0) //運(yùn)行所需時(shí)間為0是 插入調(diào)度結(jié)束隊(duì)列 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)先級(jí)較低,則為就緒態(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、時(shí)間片輪轉(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時(shí)間+1</p><p>  RUN->NeedTime=RUN->NeedTime-1;//需要時(shí)間-1</p><p>  RUN->Count=RUN->Count+1; //運(yùn)行時(shí)間+1</p><p>  if(RUN->NeedTime==0) //直到所需時(shí)間為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 //所需時(shí)間不為0</p><p><b>  {</b></p><p>  if(RUN->Count==RUN->ROUND) //cpu分配的時(shí)間和時(shí)間片相等 則設(shè)運(yùn)行時(shí)間為0</p><p><b>  {</b><

95、/p><p>  RUN->Count=0; </p><p>  if(READY!=NULL) //就緒隊(duì)列不為空,則將進(jìn)程改為就緒態(tài),插入就緒隊(duì)列。</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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論