課程設計報告---處理機調(diào)度模擬程序_第1頁
已閱讀1頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  設計報告題目:處理機調(diào)度模擬程序</p><p><b>  目錄</b></p><p>  一、課程設計題目....................................3</p><p>  二、基本概念及思想..................................3</p>&l

2、t;p>  三、部分程序主要流程圖..............................9</p><p>  四、操作截圖.......................................11</p><p>  五、程序源代碼.....................................12</p><p>  六、心得體會及

3、總結.................................21</p><p>  一. 課程設計題目:</p><p>  課題1:理機調(diào)度模擬程序:選擇一個調(diào)度算法,實現(xiàn)處理機調(diào)度。</p><p>  設計目的:在多道程序和多任務系統(tǒng)中,系統(tǒng)內(nèi)同時處于就緒狀態(tài)的進程可能有若干個。也就是說能運行的進程數(shù)大于處理機個數(shù)。為了使系統(tǒng)中的進程能有條不紊地工

4、作,必須選用某種調(diào)度策略,選擇一進程占用處理機。要求學生設計一個模擬處理機調(diào)度算法,以鞏固和加深處理機調(diào)度的概念。</p><p><b>  設計要求:</b></p><p>  1)進程調(diào)度算法包括:時間片輪轉法,短作業(yè)優(yōu)先算法,最高響應比優(yōu)先算法。</p><p><b>  2)可選擇進程數(shù)量</b></p

5、><p>  3)本程序包括三種算法,可用C語言實現(xiàn),執(zhí)行時在主界面選擇算法(可用函數(shù)實現(xiàn)),進入子頁面后輸入進程數(shù)及每個進程的運行時間,每個進程的優(yōu)先數(shù)由隨機函數(shù)產(chǎn)生且優(yōu)先數(shù)隨等待時間而變化,執(zhí)行,顯示結果。</p><p>  二. 基本概念及思想:</p><p>  (1)進程的創(chuàng)建:由系統(tǒng)為某個進程設置一個進程控制塊PCB,用于對進程進行控制和管理。進程任務完

6、成,由系統(tǒng)收回其PCB,該進程便消亡。</p><p>  (2)進程的三種狀態(tài):運行、就緒、完成。進程的三種狀態(tài)可以通過設計三個鏈隊列來實現(xiàn):finish為完成隊列的頭指針,ready為就緒隊列的頭指針,tail為循環(huán)輪轉法隊列的尾指針。因為每一時刻,CPU只能運行一個進程,所以運行隊列只有一個run指針指向當前運行進程。</p><p>  (3)進程調(diào)度的功能:按照一定的策略從就緒隊

7、列的多個進程中選取一個進程,使其獲得CPU而運行。</p><p>  ①動態(tài)優(yōu)先數(shù)調(diào)度算法: </p><p>  思想:為每一個進程設一個優(yōu)先數(shù),它總是把處理機給就緒隊列中具有最高優(yōu)先級的進程。初始的進程優(yōu)先數(shù)是隨機產(chǎn)生的,隨著進程的運行對優(yōu)先數(shù)進行調(diào)整,每次運行時都是從就緒隊列中選取優(yōu)先數(shù)最大的進程運行,所以將就緒隊列按照優(yōu)先數(shù)的大小從高到低排序,這樣,每次取對首進程即可。將進程按優(yōu)

8、先數(shù)的大小排列在就緒隊列中,每次選取就緒隊列中優(yōu)先權最高的進程首先占用處理機。優(yōu)先數(shù)由隨機函數(shù)產(chǎn)生進程最初的優(yōu)先數(shù)。優(yōu)先數(shù)的動態(tài)變化:進程每執(zhí)行一次優(yōu)先數(shù)-1。優(yōu)先數(shù)隨著進程的執(zhí)行進行調(diào)整,每次執(zhí)行時都從就緒隊列中選取優(yōu)先數(shù)最大的進程投入運行。</p><p>  ②時間片輪轉調(diào)度算法:</p><p>  思想:將所有進程按照先來先服務的規(guī)則排成一個隊列,把CPU分配給就緒隊列的隊首進程

9、,并規(guī)定它的執(zhí)行時間(稱此時間為時間片),當時間片用完但并未執(zhí)行結束時,剝奪該進程的執(zhí)行,將其鏈接到就緒隊列的隊尾,等待下一次的選擇。將就緒隊列的隊首指針投入運行。</p><p> ?、鄱套鳂I(yè)優(yōu)先調(diào)度算法(不可剝奪式的)</p><p>  思想:根據(jù)估計運行時間的長短,將各個進程排成一個就緒隊列(估計運行時間最短的進程排在隊首),每次運行將隊首進程投入運行,直到運行結束,將此進程連接到

10、完成隊列的隊尾。然后,再將下一個隊首進程投入運行,直到所有的進程都運行完畢。</p><p><b>  PCB結構體:</b></p><p>  typedef struct node</p><p>  { char name[10]; /*進程時間輪轉時間片*/</p><p>  int pid;

11、 /*進程的標號*/ </p><p>  int prio; /*優(yōu)先級*/ </p><p>  int round; /*時間片*/</p><p>  int cputime; /*進程占用cpu的時間*/</p><p>  int runtime; /*進程運

12、行所用的時間*/</p><p>  int waittime; /*進程的等待時間*/</p><p>  int length; /*進程的長度*/</p><p>  int count; /*計數(shù)器*/</p><p>  char state; /*進程的狀態(tài)*/ </p><

13、;p>  struct node *next;/*鏈指針*/</p><p>  }PCB; PCB結構體用于標識進程的創(chuàng)建與撤消。</p><p><b>  鏈指針:</b></p><p>  PCB *finish,*ready,*tail,*run;.</p><p>  Finish:完成隊列的首指針

14、,用于標識完成隊列;</p><p>  Ready:就緒隊列的首指針,用于標識就緒隊列;;</p><p>  Run:運行隊列的首指針,用于標識運行隊列;;</p><p>  Tail:循環(huán)輪轉隊列的尾指針;</p><p>  2.3 Create1(),create2(),create3()分別為創(chuàng)建進程的函數(shù)</p>

15、<p>  Create1( ):按照優(yōu)先級調(diào)度算法創(chuàng)建進程,用戶輸入進程名及進程所需的時間后,創(chuàng)建每個進程的PCB,將每個進程的PCB調(diào)用函數(shù)insert1()按照優(yōu)先數(shù)從高到低排列到就緒隊列中。</p><p>  create2( ):按照時間片調(diào)度算法創(chuàng)建進程,用戶輸入進程名及進程所需的時間后,創(chuàng)建每個進程的PCB,將每個進程的PCB調(diào)用函數(shù)insert2( )將每個進程PCB按照輸入的先后順

16、序插入到就緒隊列的末尾。</p><p>  create3( ):按照短作業(yè)優(yōu)先調(diào)度算法創(chuàng)建進程,用戶輸入進程名及進程所需的時間后,創(chuàng)建每個進程的PCB,將每個進程的PCB調(diào)用函數(shù)insert3( ):按照作業(yè)估計執(zhí)行時間的長短從高到低排列到就緒隊列中。</p><p>  就緒隊列創(chuàng)建好后,將隊列當中的第一個PCB變?yōu)檫\行態(tài)“R”,將run 指針指向它,ready指針后移,作為就緒隊列

17、的新頭指針,然后調(diào)用調(diào)度算法。注意每個時刻只能有一個進程處于運行態(tài)。</p><p>  2.4 insert1(),insert2(),insert3()分別為插入函數(shù)</p><p>  這三個函數(shù)完成的是就緒隊列的創(chuàng)建和管理。</p><p>  ①insert1()的功能是將未完成且優(yōu)先數(shù)小于其它進程的PCB按進程優(yōu)先數(shù)的順序插入到就緒隊列中去。</p

18、><p>  ②insert2()的功能是將執(zhí)行了一個時間片且還未完成的進程的PCB插入到就緒隊列的隊尾。</p><p>  ③ insert3()的功能是將未完成且作業(yè)的執(zhí)行時間小于其它進程的PCB按進程的作業(yè)的執(zhí)行時間的長短插入到就緒隊列中去。</p><p>  2.5 priority()優(yōu)先數(shù)調(diào)度算法</p><p>  ①假定系統(tǒng)有

19、三個進程,每一個進程用一個進程控制塊PCB來代表,進程控制塊的格式為:</p><p>  typedef struct node</p><p><b>  { </b></p><p>  int pid; /*進程的標號*/ </p><p>  int prio;

20、 /*優(yōu)先級*/ </p><p>  int cputime; /*進程占用cpu的時間*/</p><p>  int runtime; /*進程運行所用的時間*/</p><p>  char state; /*進程的狀態(tài)*/ </p><p>  struct node *next;/*鏈指針*/<

21、/p><p><b>  }PCB; </b></p><p>  進程名,優(yōu)先數(shù), 進程占用cpu的時間, 進程到完成還需的時間, 狀態(tài) </p><p>  進程名:作為進程的標識,假設三個進程的進程名分別為P1,P2,P3。</p><p>  進程占用cpu的時間;假設進程已經(jīng)運行的單位時間數(shù),初始值為“0”。<

22、;/p><p>  優(yōu)先數(shù):賦予進程的優(yōu)先數(shù),調(diào)度時總是選取優(yōu)先數(shù)大的進程先執(zhí)行。</p><p>  狀態(tài);有三種狀態(tài),“就緒”狀態(tài),“運行”狀態(tài)和“完成”狀態(tài)。三個進程的初始狀態(tài)都為“就緒”,用“w”表示,當一個進程運行結束后,它的狀態(tài)為“完成”,用“F”表示,當一個進程正在占用cpu ,它的狀態(tài)為“運行”狀態(tài)。</p><p> ?、?在每次運行所設計的優(yōu)先數(shù)調(diào)度

23、程序之前,為每個進程隨機確定它的“優(yōu)先數(shù)”和“要求運行時間”。</p><p> ?、蹫榱苏{(diào)度方便,把三個進程按隨機產(chǎn)生的優(yōu)先數(shù)從大到小連成隊列。用一單元指出隊首進程,用指針指出隊列的連接情況。</p><p> ?、?優(yōu)先數(shù)調(diào)度總是選隊首進程運行。采用動態(tài)改變優(yōu)先數(shù)的辦法,進程每運行一次優(yōu)先數(shù)就減“1”。而是執(zhí)行: </p><p><b>  優(yōu)先數(shù)-

24、1</b></p><p><b>  要求運行時間-1</b></p><p>  進程占用cpu的時間+1,</p><p>  來模擬進程的一次運行。 </p><p>  ⑤進程運行一次后,若要求運行時間〉0,則再將它插入就緒隊列(按優(yōu)先數(shù)大小插入,且置隊首標志);若要求運行時間=0,則把它的狀態(tài)修

25、改成“完成”(F),且退出隊列。</p><p> ?、?若“就緒”狀態(tài)的進程隊列不為空,則重復上面(4)和(5)的步驟,直到所有進程都成為“完成”狀態(tài)。</p><p> ?、咴谠O計的程序中有顯示或打印語句,能顯示或打印每次被選中進程的進程名以及運行一次后進程隊列的變化及狀態(tài)。</p><p>  ⑧ 為三個進程隨機確定一組“優(yōu)先數(shù)”和“要求運行時間”,啟動所設計

26、的處理器調(diào)度程序,顯示或打印逐次被選中進程的進程名以及進程控制塊的動態(tài)變化過程。</p><p>  注意:進程的優(yōu)先數(shù)值越小,則代表其優(yōu)先權越高。 </p><p>  2.6 roundrun()時間片輪轉法調(diào)度算法</p><p> ?、?假定系統(tǒng)有三個進程,每一個進程用一個進程控制塊PCB來代表。進程控制塊的格式為: </p><p>

27、;  進程名,進程占用cpu的時間,進程到完成還需的時間,時間片,計數(shù)器,狀態(tài) </p><p>  進程名——作為進程的標識,假設三個進程的進程名分別是p1,p2,p3。</p><p>  時間片——時間片輪轉循環(huán)所需的時間總數(shù)。</p><p>  計數(shù)器——對進程執(zhí)行時間進行計數(shù)。</p><p>  進程占用cpu的時間——假設進程

28、已經(jīng)運行的單位時間數(shù),初始值為“0”。 </p><p>  狀態(tài)——有三種狀態(tài),“就緒”狀態(tài),“運行”狀態(tài)和“完成”狀態(tài)。三個進程的初始狀態(tài)都為“就緒”,用“w”表示,當一個進程運行結束后,它的狀態(tài)為“完成”,用“F”表示,當一個進程正在占用cpu 時,它的狀態(tài)為“運行”狀態(tài)。</p><p> ?、?每次運行所設計的時間片輪轉調(diào)度程序之前,為每個進程任意確定它的“要求運行時間”。&l

29、t;/p><p>  ③ 把三個進程按先來先服務的順序排成循環(huán)隊列,用指針指出隊列連接情況。時間片輪轉調(diào)度總是選擇ready指針指示的進程運行。而是執(zhí)行:</p><p>  進程到完成還需的時間-1</p><p>  進程占用cpu的時間+1</p><p><b>  計數(shù)器+1</b></p><

30、p>  來模擬進程的一次運行,表示進程已經(jīng)運行過一個單位的時間。</p><p>  2.7 shortjob()短作業(yè)優(yōu)先法調(diào)度算法</p><p> ?、偌俣ㄏ到y(tǒng)有三個進程,每一個進程用一個進程控制塊PCB來代表,進程控制塊的格式為:</p><p>  進程名, 進程占用cpu的時間, 進程到完成還需的時間, 狀態(tài)</p><p&g

31、t;  進程名——作為進程的標識,假設三個進程的進程名分別為P1,P2,P3。</p><p>  進程占用cpu的時間——假設進程已經(jīng)運行的單位時間數(shù),初始值為“0”。</p><p>  狀態(tài)——有三種狀態(tài),“就緒”狀態(tài),“運行”狀態(tài)和“完成”狀態(tài)。三個進程的初始狀態(tài)都為“就緒”,用“w”表示,當一個進程運行結束后,它的狀態(tài)為“完成”,用“F”表示,當一個進程正在占用cpu 時,它的狀

32、態(tài)為“運行”狀態(tài)。</p><p> ?、谠诿看芜\行所設計的短作業(yè)優(yōu)先調(diào)度程序之前,為每個進程任意確定它的“要求運行時間”。</p><p> ?、?為了調(diào)度方便,把三個進程按任意給定的作業(yè)長短進行排序。用一單元指出隊首進程,用指針指出隊列的連接情況。每次取對首進程即可。</p><p>  ④ 短作業(yè)調(diào)度總是選隊首進程運行。進程每運行一次,</p>

33、<p><b>  要求運行時間-1</b></p><p>  進程占用cpu的時間+1</p><p>  來模擬進程的一次運行。</p><p> ?、葸M程運行一次后,若要求運行時間〉0,則再將它插入就緒隊列(按作業(yè)長短插入,且置隊首標志);若要求運行時間=0,則把它的狀態(tài)修改成“完成”(F),且退出隊列。</p>

34、<p> ?、?若“就緒”狀態(tài)的進程隊列不為空,則重復上面(4)和(5)的步驟,直到所有進程都成為“完成”狀態(tài)。</p><p>  ⑦ 在設計的程序中有顯示或打印語句,能顯示或打印每次被選中進程的進程名以及運行一次后進程隊列的變化及狀態(tài)。</p><p> ?、?為三個進程隨機確定“要求運行時間”,啟動所設計的處理器調(diào)度程序,顯示或打印逐次被選中進程的進程名以及進程控制塊的動

35、態(tài)變化過程。</p><p><b>  2.8 界面設計:</b></p><p>  主界面:選擇調(diào)度算法;</p><p>  子界面:輸入進程數(shù),進程名及進程所需的時間;</p><p>  利用c語言中的畫圖函數(shù)及清屏函數(shù)設計界面。</p><p>  三.部分程序主要流程圖:</

36、p><p><b>  main</b></p><p><b>  Prt1()</b></p><p>  insert1()函數(shù)</p><p><b>  四.操作截圖:</b></p><p>  主界面設計:(1,2,3算法 4退出)</p

37、><p>  算法1:動態(tài)優(yōu)先級算法</p><p>  算法2:時間片輪轉法</p><p>  算法3:短作業(yè)優(yōu)先法</p><p><b>  五.程序源代碼</b></p><p>  #include <stdio.h></p><p>  #includ

38、e <stdlib.h></p><p>  #include <string.h></p><p>  #include <time.h></p><p>  typedef struct node</p><p><b>  {</b></p><p>  

39、char name[10];</p><p><b>  int prio;</b></p><p>  int round;</p><p>  int cputime;</p><p>  int needtime;</p><p>  int count;</p><p&

40、gt;  char state;</p><p>  struct node *next;</p><p><b>  }PCB;</b></p><p>  PCB *finish,*ready,*tail,*run;</p><p><b>  int N;</b></p><

41、;p><b>  firstin()</b></p><p><b>  {</b></p><p>  run=ready;</p><p>  run->state='R';</p><p>  ready=ready->next;</p><

42、;p><b>  }</b></p><p>  int timesj(void)</p><p><b>  {</b></p><p><b>  int i,xt;</b></p><p><b>  time_t t;</b></p&g

43、t;<p>  srand((unsigned) time(&t));</p><p>  xt = rand() % 10 +1;</p><p>  return xt;</p><p><b>  }</b></p><p>  void prt1(char a)</p><

44、;p><b>  {</b></p><p>  if(toupper(a)=='1')</p><p>  printf(" name cputime needtime priority state\n");</p><p><b>  else</b></

45、p><p>  if(toupper(a)=='2')</p><p>  printf(" name cputime needtime priority state\n");</p><p><b>  else </b></p><p>  printf("

46、 name cputime needtime priority state\n");</p><p><b>  }</b></p><p>  void prt2(char a,PCB *q)</p><p><b>  {</b></p><p>  if(toupper

47、(a)=='1')</p><p>  printf(" %-10s%-10d%-10d%-10d %c\n",q->name,</p><p>  q->cputime,q->needtime,q->prio,q->state);</p><p><b>  else</b>

48、</p><p>  if(toupper(a)=='2')</p><p>  printf(" %-10s%-10d%-10d%-10d %c\n",q->name,</p><p>  q->cputime,q->needtime,q->prio,q->state);</p>&

49、lt;p><b>  else</b></p><p>  printf(" %-10s%-10d%-10d%-10d %c\n",q->name,</p><p>  q->cputime,q->needtime,q->prio,q->state);</p><p><b>

50、  }</b></p><p>  void prt(char algo)</p><p><b>  {</b></p><p><b>  PCB *p;</b></p><p>  prt1(algo); </p><p>  if(run!=NULL)

51、</p><p>  prt2(algo,run); </p><p>  p=ready; </p><p>  while(p!=NULL)</p><p><b>  {</b></p><p>  prt2(algo,p);</p><p>  p=p->n

52、ext;</p><p><b>  }</b></p><p>  p=finish; </p><p>  while(p!=NULL)</p><p><b>  {</b></p><p>  prt2(algo,p);</p><p>  

53、p=p->next;</p><p><b>  }</b></p><p>  getch(); </p><p><b>  return;</b></p><p><b>  }</b></p><p>  insert1(PCB *q)&

54、lt;/p><p><b>  {</b></p><p>  PCB *p1,*s,*r;</p><p><b>  int b;</b></p><p><b>  s=q; </b></p><p><b>  p1=ready;<

55、/b></p><p><b>  r=p1; </b></p><p><b>  b=1;</b></p><p>  while((p1!=NULL)&&b) </p><p>  if(p1->prio>=s->prio)</p>&l

56、t;p><b>  {</b></p><p><b>  r=p1;</b></p><p>  p1=p1->next;</p><p><b>  }</b></p><p><b>  else</b></p><p

57、><b>  b=0;</b></p><p>  if(r!=p1) </p><p><b>  {</b></p><p>  r->next=s;</p><p>  s->next=p1;</p><p><b>  }</b>

58、;</p><p><b>  else</b></p><p><b>  {</b></p><p>  s->next=p1;</p><p><b>  ready=s;</b></p><p><b>  }</b>

59、</p><p><b>  }</b></p><p>  insert2(PCB *p2)</p><p><b>  {</b></p><p>  tail->next=p2;</p><p><b>  tail=p2;</b></

60、p><p>  p2->next=NULL;</p><p><b>  }</b></p><p>  insert3(PCB *q)</p><p><b>  {</b></p><p>  PCB *p1,*s,*r;</p><p><

61、;b>  int b;</b></p><p><b>  s=q; </b></p><p><b>  p1=ready;</b></p><p><b>  r=p1; </b></p><p><b>  b=1;</b><

62、;/p><p>  while((p1!=NULL)&&b) </p><p>  if(p1->needtime<=s->needtime)</p><p><b>  {</b></p><p><b>  r=p1;</b></p><p&g

63、t;  p1=p1->next;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  b=0;</b></p><p>  if(r!=p1) </p><p><b>  {

64、</b></p><p>  r->next=s;</p><p>  s->next=p1;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></

65、p><p>  s->next=p1;</p><p><b>  ready=s;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void create1(char alg)</p&

66、gt;<p><b>  {</b></p><p><b>  PCB *p;</b></p><p>  int i,time,sjt,priost;</p><p>  char na[10];</p><p>  ready=NULL;</p><p>

67、  finish=NULL;</p><p><b>  run=NULL;</b></p><p>  printf("Enter name and time of process\n");</p><p>  printf("----\n");</p><p>  for(i=

68、1;i<=N;i++)</p><p><b>  {</b></p><p>  p=malloc(sizeof(PCB));</p><p>  printf("Enter name%d",i);</p><p>  printf(":");</p><

69、;p>  scanf("%s",na);</p><p>  printf("Random time%d",i);</p><p>  printf(":");</p><p>  sjt=timesj();</p><p>  printf("%d\n",

70、 sjt);</p><p>  printf("Random priority%d",i);</p><p>  printf(":");</p><p>  printf("%d\n", 20-sjt);</p><p>  strcpy(p->name,na);</

71、p><p>  p->cputime=0;</p><p>  p->needtime=sjt;</p><p>  p->state='w';</p><p>  p->prio=20-sjt;</p><p>  if(ready!=NULL)</p><p&

72、gt;  insert1(p);</p><p><b>  else</b></p><p><b>  {</b></p><p>  p->next=ready;</p><p><b>  ready=p;</b></p><p><

73、b>  }</b></p><p><b>  }</b></p><p>  printf(" Display Process Of Priority:\n");</p><p>  printf("-----\n");</p><p><

74、;b>  prt(alg);</b></p><p>  run=ready; </p><p>  ready=ready->next;</p><p>  run->state='R';</p><p><b>  }</b></p><p>  

75、void create2(char alg)</p><p><b>  {</b></p><p><b>  PCB *p;</b></p><p>  int i,time,sjt;</p><p>  char na[10];</p><p>  ready=NULL

76、;</p><p>  finish=NULL;</p><p><b>  run=NULL;</b></p><p>  printf("Enter name and time of round process\n");</p><p>  printf("-----\n");

77、</p><p>  for(i=1;i<=N;i++)</p><p><b>  {</b></p><p>  p=malloc(sizeof(PCB));</p><p>  printf("Enter name%d",i);</p><p>  printf(&

78、quot;:");</p><p>  scanf("%s",na);</p><p>  printf("Random time%d",i);</p><p>  printf(":");</p><p>  sjt=timesj();</p><p&

79、gt;  printf("%d\n", sjt);</p><p>  printf("Random priority%d",i);</p><p>  printf(":");</p><p>  printf("%d\n", 20-sjt);</p><p>

80、  strcpy(p->name,na);</p><p>  p->cputime=0;</p><p>  p->needtime=sjt;</p><p>  p->round=1;</p><p>  p->state='w';</p><p>  p->co

81、unt=0;</p><p>  p->prio=20-sjt;</p><p>  if(ready!=NULL)</p><p>  insert2(p);</p><p><b>  else</b></p><p><b>  {</b></p>

82、<p>  p->next=ready;</p><p><b>  ready=p;</b></p><p><b>  tail=p;</b></p><p><b>  }</b></p><p><b>  }</b></p&

83、gt;<p>  printf(" Display Process Of Roundrobin\n");</p><p>  printf("-----\n");</p><p><b>  prt(alg);</b></p><p>  run=ready;<

84、;/p><p>  ready=ready->next;</p><p>  run->state='R';</p><p><b>  }</b></p><p>  void create3(char alg)</p><p><b>  {</b>

85、;</p><p><b>  PCB *p;</b></p><p>  int i,time,sjt;</p><p>  char na[10];</p><p>  ready=NULL;</p><p>  finish=NULL;</p><p><b&g

86、t;  run=NULL;</b></p><p>  printf("Enter name and time of process\n");</p><p>  printf("----\n");</p><p>  for(i=1;i<=N;i++)</p><p><b&g

87、t;  {</b></p><p>  p=malloc(sizeof(PCB));</p><p>  printf("Enter name%d",i);</p><p>  printf(":");</p><p>  scanf("%s",na);</p>

88、;<p>  printf("Random time%d",i);</p><p>  printf(":");</p><p>  sjt=timesj();</p><p>  printf("%d\n", sjt);</p><p>  printf("

89、Random priority%d",i);</p><p>  printf(":");</p><p>  printf("%d\n", 20-sjt);</p><p>  strcpy(p->name,na);</p><p>  p->cputime=0;</p&g

90、t;<p>  p->needtime=sjt;</p><p>  p->state='w';</p><p>  p->prio=20-sjt;</p><p>  if(ready!=NULL)</p><p>  insert1(p);</p><p><b

91、>  else</b></p><p><b>  {</b></p><p>  p->next=ready;</p><p><b>  ready=p;</b></p><p><b>  }</b></p><p><

92、;b>  }</b></p><p>  printf(" Display Process Of Priority:\n");</p><p>  printf("-----\n");</p><p>  prt(alg); </p><p>  run=ready

93、; </p><p>  ready=ready->next;</p><p>  run->state='R';</p><p><b>  }</b></p><p>  priority(char alg)</p><p><b>  {</b&g

94、t;</p><p>  while(run!=NULL)</p><p><b>  {</b></p><p>  run->cputime=run->cputime+1;</p><p>  run->needtime=run->needtime-1;</p><p>

95、;  run->prio=run->prio-1; </p><p>  if(run->needtime==0) </p><p><b>  {</b></p><p>  run->next=finish;</p><p>  finish=run;</p><p>

96、;  run->state='C'; </p><p>  run=NULL; </p><p>  if(ready!=NULL)</p><p>  firstin(); </p><p><b>  }</b></p><p><b>  else <

97、/b></p><p>  if((ready!=NULL)&&(run->prio<ready->prio))</p><p><b>  {</b></p><p>  run->state='W';</p><p>  insert1(run);<

98、/p><p>  firstin();</p><p><b>  }</b></p><p><b>  prt(alg);</b></p><p><b>  }</b></p><p><b>  }</b></p>

99、<p>  roundrun(char alg)</p><p><b>  {</b></p><p>  while(run!=NULL)</p><p><b>  {</b></p><p>  run->cputime=run->cputime+1;</p&g

100、t;<p>  run->needtime=run->needtime-1;</p><p>  run->count=run->count+1;</p><p>  run->prio=run->prio-1;</p><p>  if(run->needtime==0)</p><p&g

101、t;<b>  {</b></p><p>  run->next=finish;</p><p>  finish=run;</p><p>  run->state='C';</p><p><b>  run=NULL;</b></p><p&g

102、t;  if(ready!=NULL)</p><p>  firstin();</p><p><b>  }</b></p><p><b>  else</b></p><p>  if(run->count==run->round) </p><p>&

103、lt;b>  {</b></p><p>  run->count=0;</p><p>  if(ready!=NULL) </p><p><b>  {</b></p><p>  run->state='W'; </p><p>  inser

104、t2(run);</p><p>  firstin(); </p><p><b>  }</b></p><p><b>  }</b></p><p>  prt(alg); </p><p><b>  }</b></p><

105、p><b>  }</b></p><p>  shorttask(char alg)</p><p><b>  {</b></p><p>  while(run!=NULL)</p><p><b>  {</b></p><p>  run

106、->cputime=run->cputime+1;</p><p>  run->needtime=run->needtime-1;</p><p>  run->prio=run->prio-1;</p><p>  if(run->needtime==0) </p><p><b> 

107、 {</b></p><p>  run->next=finish;</p><p>  finish=run;</p><p>  run->state='C'; </p><p>  run=NULL; </p><p>  if(ready!=NULL) </p&g

108、t;<p>  firstin(); </p><p><b>  }</b></p><p><b>  else </b></p><p>  if((ready!=NULL)&&(run->needtime>ready->needtime))</p>&l

109、t;p><b>  {</b></p><p>  run->state='W';</p><p>  insert1(run);</p><p>  firstin();</p><p><b>  }</b></p><p><b>

110、  prt(alg);</b></p><p><b>  }</b></p><p><b>  return;</b></p><p><b>  }</b></p><p><b>  menu()</b></p><

111、p>  { char algo;</p><p>  printf("\n\n COMPUTER OS WORK\n\n");</p><p>  printf("\n\n By wanghao(Class 2) \n\n\n");</p><p>  pr

112、intf(" choose one of following:\n");</p><p>  printf("\n 1.PRIORITY.\n\n");</p><p>  printf(" 2.ROUNDROBIN.\n\n");</p><p&g

113、t;  printf(" 3.SHORTTASK.\n\n");</p><p>  printf(" 4.EXIT.\n\n\n");</p><p>  printf("\n please enter your choice:");</p><p

114、>  scanf("%c",&algo);</p><p>  if(algo=='1')</p><p><b>  { </b></p><p>  printf("Enter process number\n");</p><p>  sca

115、nf("%d",&N);</p><p>  create1(algo);</p><p>  priority(algo);</p><p><b>  }</b></p><p><b>  else</b></p><p>  if(algo

116、=='2')</p><p><b>  { </b></p><p>  printf("Enter process number\n");</p><p>  scanf("%d",&N);</p><p>  create2(algo);</p

117、><p>  roundrun(algo);</p><p><b>  }</b></p><p><b>  else</b></p><p>  if(algo=='3')</p><p><b>  { </b></p>

118、<p>  printf("Enter process number\n");</p><p>  scanf("%d",&N);</p><p>  create3(algo);</p><p>  shorttask(algo);</p><p><b>  retur

119、n;</b></p><p><b>  }</b></p><p>  else if(algo=='4')</p><p><b>  exit(0);</b></p><p><b>  }</b></p><p>&l

120、t;b>  main()</b></p><p><b>  {</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p><b>  menu();</b></p>

121、<p><b>  }</b></p><p><b>  }</b></p><p>  六.心得體會及總結:</p><p>  處理機調(diào)度問題實際上是處理機分配問題。只有那些參與競爭處理機所必須的資源都已得到滿足的進程才能享受競爭處理機的資格,這時它們處于內(nèi)存就緒狀態(tài)。這些必須的資源包括內(nèi)存、外設及有關

122、數(shù)據(jù)結構等。作業(yè)調(diào)度程序必須先調(diào)用存儲管理、外設管理,分配資源,讓它們能有競爭資格。</p><p>  為了提高資源利用率,一部分在內(nèi)存中處于就緒、等待狀態(tài)而短期內(nèi)不能執(zhí)行進程、作業(yè)換出內(nèi)存,所以外存中除了處于后備狀態(tài)的作業(yè),還有處于就緒狀態(tài)的作業(yè)。這就需要一定的方法和策略來為這部分作業(yè)分配空間。</p><p>  學習完《操作系統(tǒng)原理》課程后,進行的這次全面的綜合訓練,通過課程設計,

溫馨提示

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

評論

0/150

提交評論