已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
計算機(jī)學(xué)院綜合性、設(shè)計性實驗報告專業(yè):計算機(jī)科學(xué)與技術(shù) 年級/班級:2013級一 班 20152016學(xué)年第一學(xué)期課程名稱計算機(jī)操作系統(tǒng)指導(dǎo)教師本組成員學(xué)號姓名實驗地點計科樓216實驗時間2015/12/6項目名稱進(jìn)程調(diào)度實驗類型綜合性/設(shè)計性一、實驗?zāi)康模和ㄟ^動態(tài)優(yōu)先權(quán)調(diào)度算法和時間片輪轉(zhuǎn)調(diào)度算法的模擬加深進(jìn)程概念和進(jìn)程調(diào)度過程的理解。二、實驗儀器或設(shè)備:計算機(jī)一臺三、總體設(shè)計 整個程序可由主程序和如下7個過程組成:(1)在優(yōu)先數(shù)算法中,將尚未完成的PCB按優(yōu)先數(shù)順序插入到就緒隊列中;(2)在時間片輪轉(zhuǎn)算法中,將執(zhí)行了一個時間片單位(為2),但尚未完成的進(jìn) 程的PCB,插到就緒隊列的隊尾;(3)調(diào)度就緒隊列的第一個進(jìn)程投入運行;(4)顯示每執(zhí)行一次后所有進(jìn)程的狀態(tài)及有關(guān)信息。(5)創(chuàng)建新進(jìn)程,并將它的PCB插入就緒隊列;(6)按優(yōu)先數(shù)算法調(diào)度進(jìn)程;(7)按時間片輪轉(zhuǎn)法調(diào)度進(jìn)程。四、實驗步驟#include #include #include typedef struct node char name20; int prio; /*進(jìn)程的優(yōu)先級*/int round; /*分配CPU的時間片*/ int cputime; /*CPU執(zhí)行時間*/ int needtime; /*進(jìn)程執(zhí)行所需要的時間*/ char state; /*W:就緒態(tài),R:執(zhí)行態(tài),F(xiàn):完成態(tài)*/ int count; struct node *next;PCB; PCB *ready=NULL,*run=NULL,*finish=NULL;/*就緒隊列、執(zhí)行隊列完成隊列*/ int num; void GetFirst();/*緒隊列取第一個節(jié)點*/ void Output();void InsertFinish(PCB *in);/*時間片隊列*/ void PrioCreate();/*優(yōu)先級輸入*/void InsertPrio(PCB *in);/*創(chuàng)建優(yōu)先級隊列*/void Priority();/*按照優(yōu)先級調(diào)度*/void TimeCreate();/*時間片輸入*/ void InsertTime(PCB *in);/*時間片隊列*/void RoundRun();/*時間片輪轉(zhuǎn)調(diào)度*/ int main() char chose; printf(please input total process number:n); scanf(%d,&num); getchar(); printf(please input method:(P/R)n); scanf(%c,&chose); switch(chose) case P: case p: PrioCreate(); Priority(); break; case R: case r: TimeCreate(); RoundRun(); break; default:break; Output(); return 0; void GetFirst() run=ready; if(ready!=NULL) run-state=R; ready=ready-next; run-next=NULL; void Output() PCB *p; p=ready; printf(nametprioritytroundtcputimetneedtimetstatetcountn); while(p!=NULL) printf(%st%dtt%dt%dt%dtt%ct%dn,p-name,p-prio,p-round,p-cputime,p-needtime,p-state,p-count); p=p-next; p=finish; while(p!=NULL) printf(%st%dtt%dt%dt%dtt%ct%dn,p-name,p-prio,p-round,p-cputime,p-needtime,p-state,p-count); p=p-next; p=run; while(p!=NULL) printf(%st%dtt%dt%dt%dtt%ct%dn,p-name,p-prio,p-round,p-cputime,p-needtime,p-state,p-count); p=p-next; void InsertPrio(PCB *in)/*創(chuàng)建優(yōu)先級隊列,優(yōu)先數(shù)越小,優(yōu)先級越低*/ PCB *fst,*nxt; fst=nxt=ready; if(ready=NULL) in-next=ready; ready=in; else/*查到合適的位置進(jìn)行插入*/ if(in-prio=fst-prio)/*比第一個還要大,則插入到隊頭*/ in-next=ready; ready=in; else while(fst-next!=NULL)/*移動指針查找第一個別它小的元素的位置進(jìn)行插入*/ nxt=fst; fst=fst-next; if(fst-next=NULL)/*已搜索到隊尾優(yōu)先級數(shù)最小,插到隊尾*/ in-next=fst-next; fst-next=in; else/*插入到隊列中*/ nxt=in; in-next=fst; void InsertTime(PCB *in)/*將進(jìn)程插到就緒隊列尾部*/ PCB *fst; fst=ready; if(ready=NULL) in-next=ready; ready=in; else while(fst-next!=NULL) fst=fst-next; in-next=fst-next; fst-next=in; void InsertFinish(PCB*in)/*將進(jìn)程插入到完成隊列尾部*/ PCB *fst; fst=finish; if(finish=NULL) in-next=finish; finish=in; else while(fst-next!=NULL) fst=fst-next; in-next=fst-next; fst-next=in; void PrioCreate()/*優(yōu)先級調(diào)度輸入*/ PCB *tmp; int i; printf(input name and needtime:n); for(i=0;iname); getchar(); scanf(%d,&(tmp-needtime); tmp-cputime=0; tmp-state=W; tmp-prio=50-tmp-needtime;/*需時越多,優(yōu)先級越低*/ tmp-round=0; tmp-count=0; InsertPrio(tmp);/*按照優(yōu)先級從高到低,插入到就緒隊列*/ void TimeCreate() PCB *tmp; int i; printf(please input name and needtime:n); for(i=0;iname); getchar(); scanf(%d,&(tmp-needtime); tmp-cputime=0; tmp-state=W; tmp-prio=0; tmp-round=2;/*每個進(jìn)程所分配的時間片是2*/ tmp-count=0; InsertTime(tmp); void Priority()/*按優(yōu)先級調(diào)度,每次執(zhí)行一個時間片*/ int flag=1; GetFirst(); while(run!=NULL) Output(); /*輸出每次調(diào)度過程中狀態(tài)*/ while(flag) run-prio-=3;run-cputime+; run-needtime-; if(run-needtime=0) /*進(jìn)程執(zhí)行完畢,狀態(tài)置為F,插入到完成隊列*/ run-state=F; run-count+;/*進(jìn)程執(zhí)行的次數(shù)加1*/ InsertFinish(run); flag=0; else /*將進(jìn)程狀態(tài)置為W,入就緒隊列*/ run-state=W; run-count+; InsertTime(run); flag=0; flag=1; GetFirst(); /*繼續(xù)取就緒隊列進(jìn)程入執(zhí)行隊列*/ void RoundRun() /*時間片輪轉(zhuǎn)調(diào)度算法*/ int flag=1; GetFirst(); while(run!=NULL) Output(); while(flag) run-count+; run-cputime+; run-needtime-; if(run-needtime=0) run-state=F; InsertFinish(run); flag=0; else if(run-count=run-round) /*時間片用完*/ run-state=W; run-count=0; /*計數(shù)器清零,為下次做準(zhǔn)備*/ InsertTime(run); flag=0; flag=1; GetFirst(); 五、結(jié)果分析與總結(jié)總結(jié):從本實驗要求用高級語言編寫模擬進(jìn)程調(diào)度程序,加深理解了有關(guān)進(jìn)程控制快、進(jìn)程隊列等概念,并體會和了解優(yōu)先數(shù)算法和時間片輪轉(zhuǎ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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 牛羊零售商店購銷合同
- 建筑垃圾處理棄土堆放合同
- 茶樓裝修合同
- 標(biāo)準(zhǔn)合同復(fù)工協(xié)議
- 借款合同中的擔(dān)保方式選擇與分析
- 物流資源共享合作合同
- 銀行環(huán)境清潔責(zé)任合同
- 租賃服務(wù)合同簽訂應(yīng)注意的法律問題
- 購房合同簽訂流程詳解
- 國際供應(yīng)鏈合同
- 2024年02月天津市口腔醫(yī)院派遣制人員招考聘用40人筆試歷年(2016-2023年)真題薈萃帶答案解析
- 聲明書:個人婚姻狀況聲明
- 幼兒園年檢整改專項方案
- 新管徑流速流量對照表
- 20以內(nèi)退位減法口算練習(xí)題100題30套(共3000題)
- 咯血病人做介入手術(shù)后的護(hù)理
- 境外投資環(huán)境分析報告
- 便攜式氣體檢測儀使用方法課件
- 《壓力平衡式旋塞閥》課件
- 信貸支持生豬養(yǎng)殖行業(yè)報告
- 物聯(lián)網(wǎng)與人工智能技術(shù)融合發(fā)展年度報告
評論
0/150
提交評論