操作系統(tǒng)的實驗一模擬進程狀態(tài)轉(zhuǎn)換_第1頁
操作系統(tǒng)的實驗一模擬進程狀態(tài)轉(zhuǎn)換_第2頁
操作系統(tǒng)的實驗一模擬進程狀態(tài)轉(zhuǎn)換_第3頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實驗一 模擬進程狀態(tài)轉(zhuǎn)換及其PCB的變化一、實驗?zāi)康模鹤孕芯幹颇M程序,通過形象化的狀態(tài)顯示,使學(xué)生理解進程的 概念、進程之間的狀態(tài)轉(zhuǎn)換及其所帶來的 PCB內(nèi)容、組織的變化, 理解進程與其PCB間的對應(yīng)關(guān)系。二、實驗內(nèi)容及要求:(1 )、設(shè)計并實現(xiàn)一個模擬進程狀態(tài)轉(zhuǎn)換及其相應(yīng) PCB內(nèi)容、組織 結(jié)構(gòu)變化的程序。(2) 、獨立編寫、調(diào)試程序。進程的數(shù)目、進程的狀態(tài)模型(三狀態(tài)、 五狀態(tài)、七狀態(tài)或其它)以及 PCB的組織形式可自行選擇。(3) 、合理設(shè)計與進程PCB相對應(yīng)的數(shù)據(jù)結(jié)構(gòu)。PCB的內(nèi)容要涵蓋 進程的基本信息、控制信息、資源需求及現(xiàn)場信息。(4、設(shè)計出可視性較好的界面,應(yīng)能反映出進程狀態(tài)的

2、變化引起的 對應(yīng)PCB內(nèi)容、組織結(jié)構(gòu)的變化。(5) 、代碼書寫要規(guī)范,要適當(dāng)?shù)丶尤胱⑨尅?6) 、鼓勵在實驗中加入新的觀點或想法,并加以實現(xiàn)。(7) 、認真進行預(yù)習(xí),完成預(yù)習(xí)報告。(8) 、實驗完成后,要認真總結(jié),完成實驗報告。三、實現(xiàn):數(shù)據(jù)結(jié)構(gòu)struct PCBchar n ame;int priority;int n eedtime;bool operator < (const PCB &b) const return priority>b.priority;五狀態(tài)進程模型最咼優(yōu)先數(shù)優(yōu)先調(diào)度算法流程圖EvilNew *四、運行結(jié)果:L:riew 3:Timecmt b

3、;Event occur1:Dispatch 丄:Eyent waitO:eKlt輸人1-吒實刪相宜的功能;1輸入更創(chuàng)建的逬程數(shù)土2輸人進程名(-< 字符)、所需時間(一個整數(shù))、優(yōu)先議(一個鶴處: 342輸人進程名(-卄宇符人所需時間(一個整數(shù))、優(yōu)先級(一個塑n: b6"7林枕進程送往CF瞅行* 弟弗 * ststokx *陽 * *2k4c*5fcMotcac*3|c*Cput i EjG : 狀態(tài)進程名ERunning:b5ReadyO:a4時間優(yōu)先級61: New8:TimeoutDiEvtiiiL ujjui輸AJ 一 5兵規(guī)胡應(yīng)的功能=2:Dispitcli 4:

4、Event wait:ell t圖1創(chuàng)建2個進程,因為這時 cpu空閑所以內(nèi)核調(diào)度,b優(yōu)先級高先執(zhí)行LiNew2:Dispatch.3:Tnmeout4:flvent wait5:Event occur0:&zl1樹人1坯現(xiàn)范應(yīng)的功證3甘性時間片用完 ”科bi井程送ftCPUttl?辰進程名需宴時咼優(yōu)失級K-jmins;t45RaadyO:a43p : Npw3:Tim=outEifiTont ocflur 甌入5真觀柜應(yīng)的功皚2:D i sratdi 4:Event wait0:axit圖2超時,因為這時cpu空閑所以內(nèi)核調(diào)度,b優(yōu)先級還是比a高所以先執(zhí)行l(wèi):Kew2:Dispatc

5、h計:Tiirpiit4:Event wait5 : Evmt 口匚匸11丁3: PTl -t輸入1烘硯機的功能,A':咔*M支班塞出站程送點唄行杯嘶屮中巾屮申申<電*沖*唧葉申卅屮沖申卡護電啪沖cpu t ii* :j4iM4<>*>M|l|1ti:|l<>ic>l<:tcH<:4c4<1lc>l<K>9<|i4>t>l19li 申*1叫1 申狀態(tài)斕名需變時B優(yōu)先紐Rtmnins:a32BlockedO:b45F半*仔忙米裁*N半兀牛半*=M 相*+=林*#2比龍*卑*M*忙來専*乂*乂耳

6、斗*率祐*牛開*斗*琳檔*l:Now2: DispatchE: TiircDuit4:;Event ait5:Event d-:cut0:exit輸入1- 5實現(xiàn)柜應(yīng)的功第:.<林帕被阻塞杯:!欄1知束事*尤曲競棄卓#彈*半林平餐磚本事事爻軍CiaiT lire:需要時間比先級BlockedO;h45Blockodl:a3?M1:NmZnDispatch3: Tiireout.liEvent wait5:Event occurexlt輸人丄一克翊価的功能*圖32個進程均被阻塞,其中一旦進程被阻塞就會引發(fā)調(diào)度|1:Msv2 IDispatch|3:Tine mil4: Event wait

7、|5:EventC:exitp-相應(yīng)的功能;楓槍就喚醒曲邛送程寇柱cpi?a行棗中*中沖屮+*+*+*»*»屮沖中呻屮嚴屮中屮呻*卄匚匸心上匚皿啟:5*屮#桿*柑幵忖屮屮屮*護十屮屮屮十屮#*#狀態(tài)逬稗名需蓼吋間優(yōu)先皺Eunnlne:b34HlockedO:a32*:t*:t:|:D|:*:*嗥*3k*j|c*D|c*5|c*:3|c»:Ho|*|*|*|c|*|*|*|=|已*)Be*歸a|u|*k址柑就*就北事2 :Dispatch4:Fvprit wai TU:»itl:Nevh iioutp<:Evsnt occur fSTA:5冗圳龍應(yīng)的

8、功瓷,圖4喚醒1個進程,從阻塞隊列取隊首放到就緒隊列隊尾,由于這時cpu空閑所以內(nèi)核調(diào)度五、源代碼:#i nclude<cstdio>#in clude<algorithm>using n amespace std;int Ready_le n=0;int Blocked_le n=0;int CPU_state=O;struct PCBchar n ame;int priority;int n eedtime;bool operator < (const PCB &b) const return priority>b.priority;PCB Re

9、ady100;PCB Blocked100;PCB Cpu;bool dispatch();bool creat(i nt NUM)創(chuàng)建一個新的進程while(NUM-)printf("輸入進程名(一個字符)、所需時間(一個整數(shù))、優(yōu)先級(一個整數(shù)):n");sca nf("%s%d%d",&(ReadyReady_le n. name),&(ReadyReady_len . needtime),&(ReadyReady_le n.priority);getchar();Ready_le n+;if(CPU_state=O) 如果

10、CPU空閑,則調(diào)度 dispatch();bool dispatch()if(CPU_state=0)if(Ready_le n!=0)sort(Ready,Ready+Ready_le n);Cpu.n ame=Ready0. name;Cpu .n eedtime=Ready0. needtime;Cpu.priority=Ready0.priority;if(Ready_le n!=1) 就緒隊列剔除隊首元素for(i nt in dx=1;i ndx<Ready_le n;i ndx+) Readyi ndx-1. name二Readyi ndx. name;Readyi ndx

11、-1. needti me二Readyi ndx. needtime;Readyi ndx-1.priority=Readyi ndx .priority;Ready_le n-;CPU_state=1;printf("*%c 進程送往 CPU 執(zhí)行n",C);Cpu.n eedtime-;Cpu.priority-;elseprintf("*就緒隊列為空,無法調(diào)度n");retur n false;elseprintf("*CPU 忙,無法調(diào)度 n"); bool time_out()if(CPU_state=1)if

12、(Cpu .n eedtime=0)prin tf("*%c時間片用完,并且執(zhí)行完畢,被釋放n",Cpu. name);elseReadyReady_le n. name二Cpu .n ame;ReadyReady_le n. needti me=Cpu. needtime;ReadyReady_le n.priority=Cpu.priority;Ready_le n+;printf("*%c時間片用完 n",C);CPU_state=O;Cpu.n ame=0;Cpu.n eedtime=0;Cpu.priority=0;if(Read

13、y_le n!=0) 時間片用完,如果就緒隊列不為空,則調(diào)度dispatch();elseprintf("*沒有進程在CPU中,無法超時n");bool eve nt_wait()if(CPU_state=1)BlockedBlocked_le n. name二Cpu. name;BlockedBlockeden. needtime二Cpu. needtime;BlockedBlocked_le n .priority二Cpu.priority;Blocked_le n+;prin tf("*%c被阻塞 n ",Cpu. name);CPU_state=

14、0;if(Ready_le n!=0)進程被阻塞,如果就緒隊列不為空,則調(diào)度dispatch();elseprintf("*沒有進程在CPU中,無法阻塞n");bool eve nt_occur()if(Blocked _len !=0)sort(Blocked,Blocked+Blocked _len);ReadyReady_le n. name二Blocked0. name;ReadyReady_le n. n eedtime=Blocked0. needtime;ReadyReady_le n.priority=Bloc ked0.priority;Ready_le

15、n+;if(Blocked_le n!=1)/阻塞隊列剔除隊首元素for(i nt in dx=1;i ndx<Blocked_le n;i ndx+)Blockedi ndx-1. name二Blockedi ndx. name;Blockedi ndx-1. ne edtime=Blockedi ndx. needtime;Blockedi ndx-1.priority=Bloc kedi ndx.priority;Blocked_le n-;/pri ntf("%d %d",Blockede n,Ready_le n);prin tf("*%c 被喚醒

16、 n ”,ReadyReady_le n-1. name);if(CPU_state=O)如果CPU空閑,則調(diào)度dispatch();/pri ntf("%d %d",Blockede n,Ready_le n);elseprintf("*阻塞隊列為空,無法喚醒n");int mai n()int Cputime=1;while(1)prin tf("n1:Newttt2:Dispatchn");prin tf("3:Timeouttt4:Eve nt waitn");prin tf("5:Eve nt

17、occurttO:exit n");printf("輸入1-5實現(xiàn)相應(yīng)的功能:n");int select;sca nf("%d",&select);getchar();switch(select)case 1:int num;printf("輸入要創(chuàng)建的進程數(shù):n");sca nf("%d",&nu m);getchar();creat (nu m);break;case 2:dispatch();break;case 3:time_out();break;case 4:eve nt_w

18、ait();break;case 5:eve nt_occur(); break;case 0:exit(O); break;printf(Cputime:%3d*n",Cputime);printf(”狀態(tài)tt進程名tt需要時間tt優(yōu)先級n");if(CPU_state)顯示CPU中的進程prin tf("Ru nnin g:t%ctt",Cpu. name);prin tf("%dttt",Cpu. needtime);prin tf("%dn",Cpu.priority);if(Ready_len) 顯示Ready隊列中的進程for(i nt a=0;a<Ready_le n;a+)prin tf("Ready%d:tt",a);prin tf("%ctt",Readya. name);prin tf("%dttt",Readya. needtime);pri

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論