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

下載本文檔

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

文檔簡介

1、<p><b>  《操作系統(tǒng)原理》</b></p><p><b>  課程設(shè)計(jì)報告</b></p><p>  二〇一一年十二月十二日</p><p><b>  目錄</b></p><p>  一、《操作系統(tǒng)原理》課程設(shè)計(jì)的目的與要求3</p>

2、<p><b>  1、目的3</b></p><p><b>  2、要求3</b></p><p>  二、簡述課程設(shè)計(jì)內(nèi)容、主要功能和實(shí)現(xiàn)環(huán)境3</p><p>  1.課程設(shè)計(jì)內(nèi)容3</p><p>  三、任務(wù)的分析、設(shè)計(jì)、實(shí)現(xiàn)和討論3</p>

3、<p>  1、任務(wù)的分析3</p><p>  2、任務(wù)的設(shè)計(jì)與實(shí)現(xiàn)5</p><p><b>  五、附錄11</b></p><p>  進(jìn)程調(diào)度—優(yōu)先數(shù)法與簡單輪轉(zhuǎn)法</p><p>  《操作系統(tǒng)原理》課程設(shè)計(jì)的目的與要求</p><p><b>  

4、目的</b></p><p>  進(jìn)程是操作系統(tǒng)最重要的概念之一,進(jìn)程調(diào)度又是操作系統(tǒng)核心的主要內(nèi)容。本實(shí)習(xí)要求學(xué)生獨(dú)立地用高級語言編寫和調(diào)試一個簡單的進(jìn)程調(diào)度程序。調(diào)度算法可任意選擇或自行設(shè)計(jì)。任務(wù)一采用簡單輪轉(zhuǎn)法,任務(wù)二采用優(yōu)先數(shù)法等。本課題可以加深對進(jìn)程調(diào)度和各種調(diào)度算法的理解。</p><p><b>  要求</b></p><

5、;p>  設(shè)計(jì)一個有n個進(jìn)程并發(fā)的進(jìn)程調(diào)度程序。每個進(jìn)程由一個進(jìn)程控制塊(PCB)表示。進(jìn)程控制塊一般應(yīng)該包含下述信息:進(jìn)程名、進(jìn)程優(yōu)先數(shù)、進(jìn)程需要運(yùn)行的時間、占用CPU的時間以及進(jìn)程的狀態(tài)等,且可按調(diào)度算法的不同而增刪。</p><p>  調(diào)度程序應(yīng)包含2種不同的調(diào)度算法,運(yùn)行時可任意選一種,以利于各種算法的分析比較。</p><p>  算法應(yīng)能顯示或打印各個進(jìn)程的PID、狀態(tài)

6、(運(yùn)行狀態(tài)R、等待狀態(tài)W等)和參數(shù)(已運(yùn)行時間等)的變化情況,便于觀察諸進(jìn)程的調(diào)度過程</p><p>  進(jìn)程是操作系統(tǒng)最重要的概念之一,進(jìn)程調(diào)度又是操作系統(tǒng)核心的主要內(nèi)容。本實(shí)習(xí)要求學(xué)生獨(dú)立地用高級語言編寫和調(diào)試一個簡單的進(jìn)程調(diào)度程序。調(diào)度算法可任意選擇或自行設(shè)計(jì)。任務(wù)一采用簡單輪轉(zhuǎn)法,任務(wù)二采用優(yōu)先數(shù)法等。本課題可以加深對進(jìn)程調(diào)度和各種調(diào)度算法的理解。</p><p>  簡述課程設(shè)

7、計(jì)內(nèi)容、主要功能和實(shí)現(xiàn)環(huán)境</p><p><b>  課程設(shè)計(jì)內(nèi)容 </b></p><p>  進(jìn)程調(diào)度是處理機(jī)管理的核心內(nèi)容。本實(shí)驗(yàn)要求用C語言編寫和調(diào)試一個簡單的進(jìn)程調(diào)度程序。選用優(yōu)先數(shù)法或簡單輪轉(zhuǎn)法對五個進(jìn)程進(jìn)行調(diào)度。每個進(jìn)程處于運(yùn)行R(run)、就緒W(wait)和完成F(finish)三種狀態(tài)之一,并假設(shè)起始狀態(tài)都是就緒狀態(tài)W。為了便于處理,程序進(jìn)程的運(yùn)

8、行時間以時間片為單位計(jì)算。各進(jìn)程的優(yōu)先數(shù)或輪轉(zhuǎn)時間片數(shù)、以及進(jìn)程需要運(yùn)行的時間片數(shù),均由偽隨機(jī)數(shù)發(fā)生器產(chǎn)生。通過本實(shí)驗(yàn)可以加深理解有關(guān)進(jìn)程控制塊、進(jìn)程隊(duì)列的概念,并體會和了解優(yōu)先數(shù)和時間片輪轉(zhuǎn)調(diào)度算法的具體實(shí)施辦法。</p><p><b>  主要功能</b></p><p>  本程序可選用優(yōu)先數(shù)法或簡單輪轉(zhuǎn)法對五個進(jìn)程進(jìn)行調(diào)度。每個進(jìn)程處于運(yùn)行R(run)、就緒

9、W(wait)和完成F(finish)三種狀態(tài)之一,并假設(shè)起始狀態(tài)都是就緒狀態(tài)W。為了便于處理,程序進(jìn)程的運(yùn)行時間以時間片為單位計(jì)算。</p><p><b>  實(shí)現(xiàn)環(huán)境</b></p><p>  本次課程設(shè)計(jì)結(jié)合算法的特點(diǎn),采用Windows操作系統(tǒng)平臺。開發(fā)工具為Microsoft Visual C++6.0。</p><p>  任務(wù)

10、的分析、設(shè)計(jì)、實(shí)現(xiàn)和討論</p><p><b>  任務(wù)的分析</b></p><p>  本程序可選用優(yōu)先數(shù)法或簡單輪轉(zhuǎn)法對五個進(jìn)程進(jìn)行調(diào)度。每個進(jìn)程處于運(yùn)行R(run)、就緒W(wait)和完成F(finish)三種狀態(tài)之一,并假設(shè)起始狀態(tài)都是就緒狀態(tài)W。為了便于處理,程序進(jìn)程的運(yùn)行時間以時間片為單位計(jì)算。各進(jìn)程的優(yōu)先數(shù)或輪轉(zhuǎn)時間片數(shù)、以及進(jìn)程需要運(yùn)行的時間片數(shù)

11、,均由偽隨機(jī)數(shù)發(fā)生器產(chǎn)生。</p><p>  下面介紹優(yōu)先數(shù)法和簡單輪轉(zhuǎn)法兩種進(jìn)程調(diào)度算法:</p><p>  優(yōu)先數(shù)法。進(jìn)程就緒鏈按優(yōu)先數(shù)大小從高到低排列,鏈?zhǔn)走M(jìn)程首先投入運(yùn)行。每過一個時間片,運(yùn)行進(jìn)程所需運(yùn)行的時間片數(shù)減1,說明它已運(yùn)行了一個時間片,優(yōu)先數(shù)也減3,理由是該進(jìn)程如果在一個時間片中完成不了,優(yōu)先級應(yīng)該降低一級。接著比較現(xiàn)行進(jìn)程和就緒鏈鏈?zhǔn)走M(jìn)程的優(yōu)先數(shù),如果仍是現(xiàn)行進(jìn)程高

12、或者相同,就讓現(xiàn)行進(jìn)程繼續(xù)進(jìn)行,否則,調(diào)度就緒鏈鏈?zhǔn)走M(jìn)程投入運(yùn)行。原運(yùn)行進(jìn)程再按其優(yōu)先數(shù)大小插入就緒鏈,且改變它們對應(yīng)的進(jìn)程狀態(tài),直至所有進(jìn)程都運(yùn)行完各自的時間片數(shù)。</p><p>  簡單輪轉(zhuǎn)法。進(jìn)程就緒鏈按各進(jìn)程進(jìn)入的先后次序排列,進(jìn)程每次占用處理機(jī)的輪轉(zhuǎn)時間按其重要程度登入進(jìn)程控制塊中的輪轉(zhuǎn)時間片數(shù)記錄項(xiàng)(相當(dāng)于優(yōu)先數(shù)法的優(yōu)先數(shù)記錄項(xiàng)位置)。每過一個時間片,運(yùn)行進(jìn)程占用處理機(jī)的時間片數(shù)加1,然后比較占用處

13、理機(jī)的時間片數(shù)是否與該進(jìn)程的輪轉(zhuǎn)時間片數(shù)相等,若相等說明已到達(dá)輪轉(zhuǎn)時間,應(yīng)將現(xiàn)運(yùn)行進(jìn)程排到就緒鏈末尾,調(diào)度鏈?zhǔn)走M(jìn)程占用處理機(jī),且改變它們的進(jìn)程狀態(tài),直至所有進(jìn)程完成各自的時間片。</p><p>  進(jìn)程控制塊結(jié)構(gòu)如下:</p><p>  進(jìn)程控制塊鏈結(jié)構(gòu)如下:</p><p>  其中:RUN—當(dāng)前運(yùn)行進(jìn)程指針;</p><p>  HE

14、AD—進(jìn)程就緒鏈鏈?zhǔn)字羔槪?lt;/p><p>  TAID—進(jìn)程就緒鏈鏈尾指針。</p><p><b>  任務(wù)的設(shè)計(jì)與實(shí)現(xiàn)</b></p><p><b>  算法流程圖:</b></p><p><b>  操作過程和結(jié)果分析</b></p><p>

15、;  優(yōu)先數(shù)調(diào)度算法測試數(shù)據(jù):</p><p>  優(yōu)先數(shù)調(diào)度算法程序運(yùn)行結(jié)果截圖:</p><p><b>  圖1.1 結(jié)果截圖</b></p><p><b>  圖1.2 結(jié)果截圖</b></p><p>  簡單輪轉(zhuǎn)調(diào)度算法測試數(shù)據(jù):</p><p>  簡單輪轉(zhuǎn)調(diào)

16、度算法程序運(yùn)行結(jié)果截圖:</p><p><b>  圖2.1 結(jié)果截圖</b></p><p><b>  圖2.2 結(jié)果截圖</b></p><p><b>  圖2.3 結(jié)果截圖</b></p><p><b>  思考題的解答和討論</b><

17、/p><p>  通過以上的調(diào)度算法測試數(shù)據(jù),得出以下不同算法的不同調(diào)度性能結(jié)果:</p><p>  《操作系統(tǒng)》課程設(shè)計(jì)小結(jié)</p><p>  當(dāng)我在回首這一個星期的時候,不因虛度光陰而悔恨,也不因碌碌無為而羞恥。我想,這可能是我一學(xué)期中最豐富而有意義的一個星期了。</p><p>  從大一開始我的理論知識就比實(shí)踐知識好的多,每門課都如此

18、,實(shí)訓(xùn)是我最頭疼的一件事。課本上記得很牢的東西到了實(shí)際操作的時候感覺都用不上,做個實(shí)驗(yàn)就手忙腳亂的。所以我感覺,這個星期的課設(shè)不僅學(xué)到了在理論課上學(xué)不到的知識,更是讓我對自己的實(shí)踐操作有了信心。</p><p>  本次課程設(shè)計(jì)的題目之一是進(jìn)程調(diào)度——優(yōu)先數(shù)法與簡單輪轉(zhuǎn)法。在多任務(wù)系統(tǒng)中,進(jìn)程調(diào)度是CPU管理的一項(xiàng)核心工作。根據(jù)調(diào)度模式的不同,多任務(wù)系統(tǒng)有兩種類型,即非搶占式和搶占式。其中,優(yōu)先數(shù)法是非搶占式調(diào)度

19、策略,而簡單輪轉(zhuǎn)法是搶占式調(diào)度策略。進(jìn)程調(diào)度算法是系統(tǒng)效率的關(guān)鍵,它確定了系統(tǒng)對資源,特別是對CPU資源的分配策略,因而直接決定著系統(tǒng)最本質(zhì)的性能指標(biāo),如相應(yīng)速度和吞吐量等。常用的調(diào)度算法有:先進(jìn)先出法,短進(jìn)程優(yōu)先法,時間片輪轉(zhuǎn)法(時間片輪轉(zhuǎn)法還分為可變時間片輪轉(zhuǎn)法和簡單循環(huán)輪轉(zhuǎn)法),優(yōu)先級調(diào)度法。簡單循環(huán)輪轉(zhuǎn)法中的時間片q是一個十分重要的因素,它的計(jì)算公式為q=t/n。q的選擇對進(jìn)程調(diào)度有很大的影響。q取的太大,輪轉(zhuǎn)法就會退化成先進(jìn)先

20、出算法;而取的太小,則會導(dǎo)致系統(tǒng)開銷增加,將時間浪費(fèi)在進(jìn)程切換上。所以q必須取值適中,使就緒隊(duì)列中的所有進(jìn)程都能得到同樣的服務(wù)。但我們這次的實(shí)驗(yàn)中暫時還沒有考慮到時間片q對算法的影響,只是測試了這個調(diào)度策略的算法。</p><p>  這次我們的實(shí)驗(yàn)測試并比較了簡單輪轉(zhuǎn)法和優(yōu)先數(shù)法這兩種調(diào)度策略的性能。不同的算法有它自己不同的長處,簡單輪轉(zhuǎn)法雖然能夠使每個進(jìn)程可以以相等的速度向前進(jìn)展,但對于緊急進(jìn)程的處理就顯然不

21、及優(yōu)先數(shù)法??墒莾?yōu)先數(shù)法的開銷較高,而且可能對于較短而且優(yōu)先級低的進(jìn)程會花較長的時間等待。不過它還是具有良好的均衡性。實(shí)際應(yīng)用中,經(jīng)常是多種策略結(jié)合使用。如時間片輪轉(zhuǎn)法中也可以適當(dāng)考慮優(yōu)先級因素,對于緊急的進(jìn)程可以分配一個長一點(diǎn)的時間片,或連續(xù)運(yùn)行多個時間片等。這樣取長補(bǔ)短,合理利用各種不同算法的優(yōu)勢,讓CPU的運(yùn)行效率大大提高。</p><p>  人們總是在尋找更好的解決方案,讓算法的性能和開銷得到一個相對較

22、好的平衡。我在尋找這樣的一個解決方案時,同學(xué)對我說雖然老師沒有在課上講過這個策略,但其實(shí)書上有關(guān)于更好的調(diào)度策略。也就是多級反饋隊(duì)列調(diào)度。這種算法可以先用較小的時間片處理完那些用時較短的進(jìn)程,而給那些用時較長的進(jìn)程分配較大的時間片,以免較長的進(jìn)程頻繁被中斷而影響處理機(jī)的效率。這也就是上面所提到的“多種策略結(jié)合使用,如時間片輪轉(zhuǎn)法中也可以適當(dāng)考慮優(yōu)先級因素”。 </p><p>  溫故而知新,可以為師矣。這次編

23、程中所用到的C語言正是我們大一就學(xué)過的計(jì)算機(jī)語言。在平時的學(xué)習(xí)中和實(shí)訓(xùn)中我們總能用到它。這樣反復(fù)的運(yùn)用和考核,讓我對C語言的認(rèn)識更進(jìn)了一步。</p><p>  路漫漫其修遠(yuǎn)兮,吾將上下而求索。我們對操作系統(tǒng)的學(xué)習(xí)還有很長的路要走,死鎖只是其中的一小部分。重要的是,我在實(shí)訓(xùn)的這種里學(xué)到了這樣的一種精神,一種知難而上,相信努力和付出能夠帶來好的結(jié)果的精神。這種精神比刻板的知識點(diǎn)更加重要,能夠指引我走向更寬闊的明天。

24、</p><p><b>  附錄</b></p><p>  #include "stdio.h"</p><p>  #include "stdlib.h"</p><p>  #include "string.h"</p><p>

25、  typedef struct node</p><p><b>  {</b></p><p>  char name[10]; /*進(jìn)程標(biāo)識符*/</p><p>  int prio; /*進(jìn)程優(yōu)先數(shù)*/</p><p>  int round; /*進(jìn)程時間輪轉(zhuǎn)時間片*/</p><

26、p>  int cputime; /*進(jìn)程占用CPU時間*/</p><p>  int needtime; /*進(jìn)程到完成還要的時間*/</p><p>  int count; /*計(jì)數(shù)器*/</p><p>  char state; /*進(jìn)程的狀態(tài)*/</p><p>  struct node *next; /*鏈指針*/&

27、lt;/p><p><b>  }PCB;</b></p><p>  PCB *finish,*ready=NULL,*tail,*run,*pfcfs,*pfcfs1; /*隊(duì)列指針*/</p><p>  int N; /*進(jìn)程數(shù)*/</p><p>  /*將就緒隊(duì)列中的第一個進(jìn)程投入運(yùn)行*/</p>

28、<p>  void firstin()</p><p><b>  {</b></p><p>  run=ready; /*就緒隊(duì)列頭指針賦值給運(yùn)行頭指針*/</p><p>  run->state='R'; /*進(jìn)程狀態(tài)變?yōu)檫\(yùn)行態(tài)*/</p><p>  ready=rea

29、dy->next; /*就緒對列頭指針后移到下一進(jìn)程*/</p><p><b>  }</b></p><p>  /*標(biāo)題輸出函數(shù)*/</p><p>  void prt1(char a)</p><p><b>  {</b></p><p>  if(tou

30、pper(a)=='P') /*優(yōu)先數(shù)法*/</p><p>  printf(" name cputime needtime priority state\n");</p><p>  else if(toupper(a)=='R')</p><p>  printf(" name

31、 cputime needtime count round state\n");</p><p><b>  }</b></p><p>  /*進(jìn)程PCB輸出*/</p><p>  void prt2(char a,PCB *q)</p><p><b>  {</b&

32、gt;</p><p>  if(toupper(a)=='P') /*優(yōu)先數(shù)法的輸出*/</p><p>  printf("%-10s%-10d%-10d%-10d%c\n",q->name,q->cputime,q->needtime,q->prio,q->state);</p><p>  

33、else if(toupper(a)=='R')/*輪轉(zhuǎn)法的輸出*/</p><p>  printf("%-10s%-10d%-10d%-10d%-10d%-c\n",q->name,q->cputime,q->needtime,q->count,q->round,q->state);</p><p><b&g

34、t;  }</b></p><p><b>  /*輸出函數(shù)*/</b></p><p>  void prt(char algo)</p><p><b>  {</b></p><p><b>  PCB *p;</b></p><p>

35、  prt1(algo); /*輸出標(biāo)題*/</p><p>  if(run!=NULL) /*如果運(yùn)行指針不空*/</p><p>  prt2(algo,run); /*輸出當(dāng)前正在運(yùn)行的PCB*/</p><p>  p=ready; /*輸出就緒隊(duì)列PCB*/</p><p>  while(p!=NULL)</p>

36、<p><b>  {</b></p><p>  prt2(algo,p);</p><p>  p=p->next;</p><p><b>  }</b></p><p>  p=finish; /*輸出完成隊(duì)列的PCB*/</p><p>  w

37、hile(p!=NULL)</p><p><b>  {</b></p><p>  prt2(algo,p);</p><p>  p=p->next;</p><p><b>  }</b></p><p>  getchar(); /*壓任意鍵繼續(xù)*/<

38、/p><p><b>  }</b></p><p>  /*優(yōu)先數(shù)的插入算法*/</p><p>  void insert1(PCB *q)</p><p><b>  {</b></p><p>  PCB *p1,*s,*r;</p><p>&l

39、t;b>  int b;</b></p><p>  s=q; /*待插入的PCB指針*/</p><p>  p1=ready; /*就緒隊(duì)列頭指針*/</p><p>  r=p1; /*r做p1的前驅(qū)指針*/</p><p><b>  b=1;</b></p><p>

40、  while((p1!=NULL)&&b) /*根據(jù)優(yōu)先數(shù)確定插入位置*/</p><p>  if(p1->prio>=s->prio)</p><p><b>  {</b></p><p><b>  r=p1;</b></p><p>  p1=p1-&

41、gt;next;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  b=0;</b></p><p>  if(r!=p1) /*如果條件成立說明插入在r與p1之間*/</p><p>&

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

43、/b></p><p>  s->next=p1; /*否則插入在就緒隊(duì)列的頭*/</p><p><b>  ready=s;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /

44、*輪轉(zhuǎn)法插入函數(shù)*/</p><p>  void insert2(PCB *p2)</p><p><b>  {</b></p><p>  tail->next=p2; /*將新的PCB插入在當(dāng)前就緒隊(duì)列的尾*/</p><p><b>  tail=p2;</b></p>

45、<p>  p2->next=NULL;</p><p><b>  }</b></p><p>  void insert3()/*先來先服務(wù)*/</p><p><b>  {</b></p><p>  if (ready==NULL)</p><p&g

46、t;  { ready=pfcfs;</p><p>  ready->next=NULL;</p><p>  pfcfs1=pfcfs;</p><p><b>  }</b></p><p><b>  else</b></p><p>  {pfcfs1->

47、;next=pfcfs;</p><p>  pfcfs1=pfcfs1->next;</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*優(yōu)先數(shù)創(chuàng)建初始PCB信息*/</p><p>  void create1(c

48、har alg)</p><p><b>  {</b></p><p><b>  PCB *p;</b></p><p>  int i,time;</p><p>  char na[10];</p><p>  ready=NULL; /*就緒隊(duì)列頭指針*/</

49、p><p>  finish=NULL; /*完成隊(duì)列頭指針*/</p><p>  run=NULL; /*運(yùn)行隊(duì)列指針*/</p><p>  for(i=1;i<=N;i++)</p><p><b>  {</b></p><p>  p=(struct node*)malloc(si

50、zeof(PCB));</p><p>  printf("請輸入進(jìn)程名稱%d\n",i);</p><p>  scanf("%s",na);</p><p>  printf("請輸入進(jìn)程運(yùn)行時間\n");</p><p>  scanf("%d",&

51、time);</p><p>  strcpy(p->name,na);</p><p>  p->cputime=0;</p><p>  p->needtime=time;</p><p>  p->state='w';</p><p>  p->prio=50-tim

52、e;</p><p>  if(ready!=NULL) /*就緒隊(duì)列不空調(diào)用插入函數(shù)插入*/</p><p>  insert1(p);</p><p><b>  else</b></p><p><b>  {</b></p><p>  p->next=read

53、y; /*創(chuàng)建就緒隊(duì)列的第一個PCB*/</p><p><b>  ready=p;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  printf(" 最高優(yōu)先級進(jìn)程調(diào)度模擬:\n&quo

54、t;);</p><p>  printf("************************************************\n");</p><p>  prt(alg); /*輸出進(jìn)程PCB信息*/</p><p>  printf("***************************************

55、*********\n");</p><p>  run=ready; /*將就緒隊(duì)列的第一個進(jìn)程投入運(yùn)行*/</p><p>  ready=ready->next;</p><p>  run->state='R';}</p><p>  /*輪轉(zhuǎn)法創(chuàng)建進(jìn)程PCB*/</p><p

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

57、LL;</p><p>  finish=NULL;</p><p><b>  run=NULL;</b></p><p>  for(i=1;i<=N;i++)</p><p><b>  {</b></p><p>  p=(struct node *)mallo

58、c(sizeof(PCB));</p><p>  printf("請輸入進(jìn)程名稱%d\n",i);</p><p>  scanf("%s",na);</p><p>  printf("請輸入進(jìn)程運(yùn)行時間\n");</p><p>  scanf("%d",&

59、amp;time);</p><p>  strcpy(p->name,na);</p><p>  p->cputime=0;</p><p>  p->needtime=time;</p><p>  p->count=0; /*計(jì)數(shù)器*/</p><p>  p->state=

60、9;w';</p><p>  p->round=2; /*時間片*/</p><p>  if(ready!=NULL)</p><p>  insert2(p);</p><p><b>  else</b></p><p><b>  {</b><

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

62、;</p><p>  printf(" 時間輪轉(zhuǎn)法進(jìn)程調(diào)度模擬\n");</p><p>  printf("************************************************\n");</p><p>  prt(alg); /*輸出進(jìn)程PCB信息*/</p

63、><p>  printf("************************************************\n");</p><p>  run=ready; /*將就緒隊(duì)列的第一個進(jìn)程投入運(yùn)行*/</p><p>  ready=ready->next;</p><p>  run->sta

64、te='R';</p><p><b>  }</b></p><p>  /*優(yōu)先數(shù)調(diào)度算法*/</p><p>  void priority(char alg)</p><p><b>  {</b></p><p>  while(run!=NULL)

65、 /*當(dāng)運(yùn)行隊(duì)列不空時,有進(jìn)程正在運(yùn)行*/</p><p><b>  {</b></p><p>  run->cputime=run->cputime+1;</p><p>  run->needtime=run->needtime-1;</p><p>  run->prio=run

66、->prio-3; /*每運(yùn)行一次優(yōu)先數(shù)降低3個單位*/</p><p>  if(run->needtime==0) /*如所需時間為0將其插入完成隊(duì)列*/</p><p><b>  {</b></p><p>  run->next=finish;</p><p>  finish=run;&l

67、t;/p><p>  run->state='F'; /*置狀態(tài)為完成態(tài)*/</p><p>  run=NULL; /*運(yùn)行隊(duì)列頭指針為空*/</p><p>  if(ready!=NULL) /*如就緒隊(duì)列不空*/</p><p>  firstin(); /*將就緒對列的第一個進(jìn)程投入運(yùn)行*/</p>

68、<p><b>  }</b></p><p>  else /*沒有運(yùn)行完同時優(yōu)先數(shù)不是最大,則將其變?yōu)榫途w態(tài)插入到就緒列*/</p><p>  if((ready!=NULL)&&(run->prio<ready->prio))</p><p><b>  {</b>&

69、lt;/p><p>  run->state='W';</p><p>  insert1(run);</p><p>  firstin(); /*將就緒隊(duì)列的第一個進(jìn)程投入運(yùn)行*/</p><p><b>  }</b></p><p>  prt(alg); /*輸出進(jìn)程P

70、CB信息*/</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*時間片輪轉(zhuǎn)法*/</p><p>  void roundrun(char alg)</p><p><b>  {</b></p

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

72、gt;count=run->count+1;</p><p>  if(run->needtime==0)/*運(yùn)行完將其變?yōu)橥瓿蓱B(tài),插入完成隊(duì)列*/</p><p><b>  {</b></p><p>  run->next=finish;</p><p>  finish=run;</p&g

73、t;<p>  run->state='F';</p><p><b>  run=NULL;</b></p><p>  if(ready!=NULL)</p><p>  firstin(); /*就緒對列不空,將第一個進(jìn)程投入運(yùn)行*/</p><p><b>  }&l

74、t;/b></p><p><b>  else</b></p><p>  if(run->count==run->round) /*如果時間片到*/</p><p><b>  {</b></p><p>  run->count=0; /*計(jì)數(shù)器置0*/</p

75、><p>  if(ready!=NULL) /*如就緒隊(duì)列不空*/</p><p><b>  {</b></p><p>  run->state='W'; /*將進(jìn)程插入到就緒隊(duì)列中等待輪轉(zhuǎn)*/</p><p>  insert2(run);</p><p>  first

76、in(); /*將就緒對列的第一個進(jìn)程投入運(yùn)行*/</p><p><b>  }</b></p><p><b>  }</b></p><p>  prt(alg); /*輸出進(jìn)程信息*/</p><p><b>  }</b></p><p>&l

77、t;b>  }</b></p><p>  int check_char(char algo)/*判斷輸入的字符是否有效*/</p><p>  {if (algo=='F'||algo=='f'||algo=='R'||algo=='r'||algo=='P'||algo=='p&#

78、39;)</p><p><b>  return 1;</b></p><p><b>  else</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p><

79、b>  /*主函數(shù)*/</b></p><p>  void main()</p><p><b>  {</b></p><p>  char algo; /*算法標(biāo)記*/</p><p>  int len,h=0;</p><p>  char ch/*接收換行字符*/;

80、</p><p>  printf("\n***********請選擇要模擬的算法***************\n\n");</p><p>  printf("1.最高優(yōu)先數(shù)進(jìn)程調(diào)度算法模擬(P/p)\n");</p><p>  printf("2.時間輪轉(zhuǎn)法進(jìn)程調(diào)度算法模擬(R/r)\n");<

81、;/p><p>  printf("請輸入相應(yīng)字符選擇\n\n");</p><p>  scanf("%c",&algo); /*輸入字符確定算法*/</p><p>  if(check_char(algo))/*判斷輸入的字符是否合法*/</p><p><b>  {</b&

82、gt;</p><p>  printf("請輸入進(jìn)程調(diào)度個數(shù)\n");</p><p>  scanf("%d",&N); /*輸入進(jìn)程數(shù)*/</p><p>  if(algo=='P'||algo=='p')</p><p><b>  {<

83、/b></p><p>  create1(algo); /*優(yōu)先數(shù)法*/</p><p>  priority(algo);</p><p>  printf("\n\n 進(jìn)程已經(jīng)完成.\n");</p><p><b>  }</b></p><p><b>

84、;  else</b></p><p>  if(algo=='R'||algo=='r')</p><p><b>  {</b></p><p>  create2(algo); /*輪轉(zhuǎn)法*/</p><p>  roundrun(algo);</p>&l

85、t;p>  printf("\n\n 進(jìn)程已經(jīng)完成.\n");</p><p><b>  }</b></p><p><b>  }</b></p><p>  else if(!check_char(algo)) printf("你輸入的字符有誤,請重新運(yùn)行程序!!");&

溫馨提示

  • 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

提交評論