操作系統(tǒng)進程調(diào)度模擬程序試驗報告_第1頁
操作系統(tǒng)進程調(diào)度模擬程序試驗報告_第2頁
操作系統(tǒng)進程調(diào)度模擬程序試驗報告_第3頁
操作系統(tǒng)進程調(diào)度模擬程序試驗報告_第4頁
操作系統(tǒng)進程調(diào)度模擬程序試驗報告_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、雅舄Hr川.目錄1、課程設(shè)計目的32、課程設(shè)計要求33、相關(guān)知識34、需求分析45、概要設(shè)計56、詳細設(shè)計67、測試,修改及運行結(jié)果138、參考文獻159、結(jié)束語151510、附件器舄1、 課程設(shè)計的目的理解操作系統(tǒng)進程管理中進行進程調(diào)度的過程和編程方法,掌握先來先服務(wù)調(diào)度算法和最高優(yōu)先數(shù)優(yōu)先的調(diào)度算法,創(chuàng)建進程控制塊PCR理解進程的狀態(tài)及變化,動態(tài)顯示每個進程的當前狀態(tài)及進程的調(diào)度情況2、 課程設(shè)計要求編寫一個進程調(diào)度程序,允許多個進程共行的進程調(diào)度程序1) ).進程調(diào)度算法:采用最高優(yōu)先數(shù)優(yōu)先的調(diào)度算法(即把處理機分配給優(yōu)先數(shù)最高的進程)和先來先服務(wù)算法。2) .每個進程有一個進程控制塊(

2、PCB)表示。進程控制塊可以包含如下信息:進程名、優(yōu)先數(shù)、到達時間、需要運行時間、已用CPU時間、進程狀態(tài)等等.3) .進程的優(yōu)先數(shù)及需要的運行時間可以事先人為地指定(也可以由隨機數(shù)產(chǎn)生)。進程的到達時間為輸入進程的時間。4) .進程的運行時間以時間片為單位進行計算。5) .每個進程的狀態(tài)可以是就緒W(Wait)、運行R(Run)、或完成F(Finish)三種狀態(tài)之一。.6) ).就緒進程獲得CPU后都只能運行一個時間片。用已占用CPU時間加17) .如果運行一個時間片后,進程的已占用CPU時間已達到所需要的運行時問,則撤消該進程,如果運行一個時間片后進程的已占用CPU時間還未達所需要的運行時

3、間,也就是進程還需要繼續(xù)運行,此時應(yīng)將進程的優(yōu)先數(shù)減1(即降低一級),然后把它插入就緒隊列等待CPU。8) .每進行一次調(diào)度程序都打印一次運行進程、就緒隊列、以及各個進程的PCB,以便進行檢查。重復(fù)以上過程,直到所要進程都完成為止3、 相關(guān)知識進程:進程是一個具有一定獨立功能的程序關(guān)于某個數(shù)據(jù)集合的一次運行活動進程的狀態(tài):運行狀態(tài):進程正在處理器上運行就緒狀態(tài):一個進程獲得了除處理器外的一切所需資源,一旦得到處理器即可運行等待狀態(tài):一個進程正在等待某一事件發(fā)生而暫時停止運行雅舄Hr川.先進先出調(diào)度算法:其基本原則是按照作業(yè)到達系統(tǒng)或進程進入就緒對列的先后次序來選擇。對于進程調(diào)度來說,一旦一個進

4、程占有了處理器,它就一直運行下去,直到該進程完成其工作或者因等待事件而不能繼續(xù)運行時才釋放出處理器。優(yōu)先級調(diào)度算法:按照進程的優(yōu)先級大小來調(diào)度。使高優(yōu)先級進程或線程得到優(yōu)先的處理的調(diào)度策略稱為優(yōu)先級調(diào)度算法。進程的優(yōu)先級可以由系統(tǒng)自動地按一定原則賦給它,也可由系統(tǒng)外部來進行安排但在許多采用優(yōu)先級調(diào)度的系統(tǒng)中,通常采用動態(tài)優(yōu)先數(shù)策略。即一個進程的優(yōu)先級不是固定的,往往是隨許多因素的變化而變化。尤其隨作業(yè)(進程)的等待時間,已使用的處理器時間或其他系統(tǒng)資源的使用情況而定,以防止低優(yōu)先級進程或線程長期饑餓現(xiàn)象發(fā)生時間片輪轉(zhuǎn)算法:時間片輪轉(zhuǎn)算法主要用于處理器調(diào)度。采用此算法的系統(tǒng),具進程就緒隊列往往按

5、進程到達的時間來排序。進程調(diào)度程序總是選擇就緒隊列中的第一個進程,也就是說按照先進先出原則調(diào)度,但一旦進程占有處理器僅使用一個時間片,在使用完一個時間片后,進程還沒有完成其運行,它也必須釋放出(被搶占)處理器給下一個就緒的進程。而被搶占的進程返回到就緒隊列的末尾重新排隊等候再次運行。4、 需求分析進程調(diào)度程序選擇一個就緒狀態(tài)的進程,使之在處理器上運行,每個進程的狀態(tài)信息用數(shù)據(jù)結(jié)構(gòu)(進程控制塊PCB表示,進程的調(diào)度采用最高優(yōu)先數(shù)優(yōu)先的調(diào)度算法和先來先服務(wù)調(diào)度算法相結(jié)合的算法,并且采用動態(tài)優(yōu)先數(shù)策略,選擇進程占用處理器后該進程僅能使用一個時間片,運行完后優(yōu)先數(shù)減1雅舄Wb15、 概要設(shè)計進程控制塊

6、:描述進程的狀態(tài)信息,用結(jié)構(gòu)體定義typedefstructprocesscharname10;/進程名intpriority;/優(yōu)先數(shù)TimeReachTime;/到達時間TimeNeedTime;/需要運行時間TimeUsedTime;/已用時間charstate;/進程狀態(tài)PCB;/進程控制塊圖1.進程調(diào)度模擬程序模塊圖算法思想:定義結(jié)構(gòu)體PCB®述進程的進程控制塊,定義數(shù)組PCBpcbMax存放進程進程調(diào)度程序調(diào)用face()函數(shù)選擇所要進行的操作。輸入1則增加進程并調(diào)度進程,輸入2則打印進程,輸入0則任務(wù)結(jié)束增加進程,調(diào)用AddProcess()函數(shù),將輸入的進程存放在數(shù)組

7、pcbMax中打印進程,調(diào)用print()函數(shù),在該函數(shù)中首先調(diào)用sort()函數(shù)對進程按優(yōu)先級和先來先服務(wù)排序,然后顯示輸出排序后的進程進程調(diào)度,調(diào)用attemper()函數(shù),調(diào)度優(yōu)先級最高的進程分配給CPU使之運行一個時間片進程優(yōu)先級排序,調(diào)用sort()函數(shù),按照先來先服務(wù)和優(yōu)先級排序,使排序完最優(yōu)先運行的進程存放在pcb0中。6、詳細設(shè)計設(shè)置時間片增加進程繼續(xù)增加打印進程優(yōu)先級排序進程調(diào)度打印進程結(jié)束進程圖2.程序設(shè)計流程圖圖3.sort()函數(shù)流程圖sort()函數(shù):函數(shù)用冒泡法排序,首先按到達時間排序,使到達時間最早(即pcbn.ReachTime最小)的進程被交換到pcb0中,再

8、按優(yōu)先級排序,使具有最高優(yōu)先級(即pcbn.priority最大)的進程被交換到pcb0中。相同優(yōu)先級的進程只按到達時間排序先按到達時間排序主要代碼如下:for(i=0;i<n-1;i+)/for(j=n-2;j>=i;j-)if(pcbj+1.ReachTime<pcbj.ReachTime)雅舄Hr川.temp=pcbj;pcbj=pcbj+1;pcbj+1=temp;)再按優(yōu)先級進行排序)for(i=0;i<n-1;i+)/for(j=n-2;j>=i;j-)if(pcbj+1.priority>pcbj.priority)temp=pcbj;pcbj

9、=pcbj+1;pcbj+1=temp;)圖4.print()函數(shù)圖5.AddProcess()函數(shù)雅舄Wb1print()函數(shù):打印函數(shù),先調(diào)用sort()排序函數(shù)對進程進行排序,排序完再打印輸出進程主要代碼如下:sort();printf("n進程名優(yōu)先級到達時間需要時間已用時間進程狀態(tài)n");for(i=0;i<n;i+)printf("%8s%8d%8d%10d%10d%10cn",,pcbi.priority,pcbi.ReachTime,pcbi.NeedTime,pcbi.UsedTime,pcbi.state);A

10、ddProcess()函數(shù):增加進程函數(shù),輸入要添加的進程的進程控制塊的信息,并依次存放在數(shù)組PCBpcbMax中,每加入一個進程后判斷是否還要繼續(xù)增加進程,若是則繼續(xù)循環(huán)的執(zhí)行操作主要代碼如下:doprintf("n請輸入進程名");scanf("%s",);printf("請輸入進程的優(yōu)先級");scanf("%d",&pcbn.priority);printf("請輸入進程需要的時間");scanf("%d",&pcbn.NeedTim

11、e);pcbn.ReachTime=n;pcbn.UsedTime=0;pcbn.state='W;n+;printf("還要繼續(xù)增加進程嗎,是(Y),否(N)");doch=getchar();while(ch!='Y'&&ch!='N'&&ch!='y'&&ch!='n');while(ch='Y'|ch='y');雅舄Hr川.attemper()函數(shù):進程調(diào)度函數(shù),調(diào)度排完序后存放在pcb0中的進程,分配給該進程CPU

12、,使之運行一個時間片,然后比較進程的剩余時間(pcb0.NeedTime-pcb0.UsedTime)是否小于時間片的大小pTime,若是,則該進程調(diào)度完成,進程處于完成狀態(tài),若非,則已用時間加上一個時間片,進程處于就緒狀態(tài)繼續(xù)等待運行,然后調(diào)用print()函數(shù)打印輸出當前進程的狀態(tài)并排序,直至所有進程處于完成狀態(tài)后結(jié)束運行主要代碼如下:doif(pcb0.NeedTime-pcb0.UsedTime)>pTime)pcb0.UsedTime+=pTime;/已用時間加時間片pcb0.priority-;/優(yōu)先級減一pcb0.state='W;elsepcb0.UsedTime

13、=pcb0.NeedTime;已用時間等于需要時間pcb0.priority=-1000;/優(yōu)先級置為零pcb0.state='F'/完成進程,將狀態(tài)置為完成print();雅舄Wb1face()函數(shù):函數(shù)打印所能進行的操作以供選擇。輸入1則是增加進程后調(diào)度進程,輸入2則是打印進程,輸入0則是任務(wù)結(jié)束。主要代碼如下:charchoose;printf("n增加進程并調(diào)度進程,請按1");printf("n打印進程,請按2");printf("n任務(wù)結(jié)束,請按0");printf("n請選擇:");d

14、ochoose=getchar();while(choose!='1'&&choose!='2'&&choose!='0');returnchoose;雅舄Hr川.圖8.main()函數(shù)main()函數(shù):首先設(shè)置時間片的大小pTime,然后調(diào)用face()函數(shù)選擇要進行的操作,choose='1'則增加進程并調(diào)度,choose='2'則打印進程,choose='0則任務(wù)結(jié)束。主要代碼如下:charchoose;n=0;/初始化進程數(shù)為0printf("設(shè)置時間片的大

15、?。?quot;);scanf("%d”,&pTime);choose=face();doif(choose='1')AddProcess();print();attemper();rj舄卬。川if(choose='2')print();)if(choose='0')return;)choose=face();while(1);函數(shù)間的關(guān)系:1)sort()函數(shù)嵌套在print()函數(shù)中調(diào)用2)調(diào)用AddProcess()函數(shù)前必須先調(diào)用print()函數(shù)對進程進行排序并打印7、 測試,修改及運行結(jié)果;再加邊強并詞層進程.盾按I

16、印過捏,請拉餐青選擇n基鱉緘魘藕整"嗜3.否,3世程名優(yōu)九級到達時間需要時可己用時同進程憂戀i;ru心七尊呂2515&PjvoeoasO4223&M»1'OCOOD13Q*13&U進程名優(yōu)先級到達時間需要時間己用時間進程狀態(tài)e3sZ4135<2Tt>rocie-ss3-42230V)z*ooesZLU心以V社程名優(yōu)先級到達時間需要時間已用時間進程狀志妙。心七導骷94223&Psroeeasl3&43&V»1*OCODO2313bNTV進程冬優(yōu)先解到達時同需要時間已用時間進程狀態(tài)VOiCe-SSid

17、-430H4DU日aa在共時間35己用時間241212二件柞石p»*ou。,e2<*aap»*ooonn1進程名pa«ocjwkpacectjaa1ps*oczmnW1注程名p*oc9Gc工pB*OC<2SiS12pa«ocjwk世程名pa«oooooJLpB«ooc»nnNp*oc9Gc3進程名pacectjaa1PB«OOO»82p*«ou«rKK進程名prcucAaXpB«ooc»nnNp*ocoqo3優(yōu)先級2-1OS。優(yōu)先釵2THHM100W優(yōu)尢

18、級X1ARA1.99M優(yōu)先級a100M-I。"優(yōu)先圾TR0A1SSS-X0oef-7早裝,ITS2開耳主FT-加印rWT主有-I.,進2ss8至u迂時日工7A到達時2Q工到達時恒I±2到法時阿e工N利達時問M±2爭J2時I、日IA12市按工43而耍時問2J3b而要時間43952J而要時間*133S23麗鈍時向可分3S唐華時間仆3K已用叼問X2,23b已用時可X22J已用時間24.3S23己用時間事用時印35JRWW世程狀態(tài)BWJF迸程狀態(tài)KPI?近程狀態(tài)PJF趙程伏態(tài)RFJP衽程秋態(tài)F喈加道建并調(diào)廢進程,請按1打印進抵請程2任務(wù)結(jié)束,請接。請送擇:工進進進實、工、

19、工、入*1、八、八、八處青青青正工乞程的優(yōu)先級3呈需裒的兩問37增加進程叫,是.否(Nn進程名優(yōu)先級到達時間需要時間pi*ocecc43337pvoceecl-1800043pi*oceec2-I860135pi*oceec3-1000223進程名優(yōu)先級到達時間需要時間p»*ocass42337p*ocessl一100。a43p»*oces«j2一1叼00135p>*oeess3223己用時間12433523己用時間0433523進程狀態(tài)R進程狀態(tài)R進程名p»*oces«:4pmcesslpt*ccess2P>*ccess3進程名p

20、vncess4pvncess!pvocess2pi*ocess3進程名processlprocess2process3process4由力n;井涯優(yōu)先級1tnnnT刖。t刖口優(yōu)先銀T00。T0。-1000優(yōu)先級-1000-1000-1000-1000到達時間3n12到達時間3n120123需要時間37433s23需典時間37433S23已用時間24433s23己用時間36433S23進程狀態(tài)RFFF進程狀態(tài)雅舄打印迸程,請次2任務(wù)結(jié)束.請接。Pressanykeytdcontinue測試過程如上所述,分析得知,進程的調(diào)度正確8、 參考文獻操作系統(tǒng)基礎(chǔ)(第三版)屠祁屠立德等編著一清華大學出版社2

21、000.91993北HelenCuster著.WindowsNT技術(shù)內(nèi)幕程渝榮譯北京:清華大學出版社,AndrewS.Tanenbaum,AlbertS.Woodhull.操作系統(tǒng)設(shè)計及實現(xiàn)(第二版)京:清華大學出版社,19989、 結(jié)束語通過這次課設(shè)加深了我對操作系統(tǒng)的認識,進一步了解了進程調(diào)度的過程,在老師的指導下,對進程模擬程序做了進一步的改進,并且學會了怎么分析問題和解決問題10、附件程序清單#include<stdio.h>#defineTimeint#defineMax100typedefstructprocess進程名優(yōu)先數(shù)到達時間需要運行時間已用時間進程狀態(tài)進程控制

22、塊標示進程的總數(shù)時間片大小charname10;/intpriority;/TimeReachTime;/TimeNeedTime;/TimeUsedTime;/charstate;/PCB;/intn;/PCBpcbMax;intpTime;/voidAddProcess()charch;雅舄Wb1doprintf("n請輸入進程名");scanf("%s",);printf("請輸入進程的優(yōu)先級");scanf("%d”,&pcbn.priority);printf("請輸入進程需要的

23、時間");scanf("%d",&pcbn.NeedTime);pcbn.ReachTime=n;pcbn.UsedTime=0;pcbn.state='W;n+;printf("還要繼續(xù)增加進程嗎,是(Y),否(N)");doch=getchar();while(ch!='Y'&&ch!='N'&&ch!='y'&&ch!='n');while(ch='Y'|ch='y');/排序函數(shù)

24、,將最先運行的進程放在最先即pcb0voidsort()/用冒泡排序inti,j;PCBtemp;/先按到達時間排序for(i=0;i<n-1;i+)for(j=n-2;j>=i;j-)if(pcbj+1.ReachTime<pcbj.ReachTime)temp=pcbj;pcbj=pcbj+1;pcbj+1=temp;/再按優(yōu)先級進行排序for(i=0;i<n-1;i+)for(j=n-2;j>=i;j-)if(pcbj+1.priority>pcbj.priority)雅舄Wb1temp=pcbj;pcbj=pcbj+1;pcbj+1=temp;)if(pcb0.state!='F')(pcb0.state='R'/將優(yōu)先級最高的狀態(tài)置為運行)voidprint()/打印(inti;sort();printf("n進程名優(yōu)先級到達時間需要時間已用時間進程狀態(tài)n");for(i=0;i<n;i+)printf("%8s%8d%8d%10d%10d%10cn",,pcbi.priohty,pcbi.ReachTime,pcbi.NeedTi

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論