版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、進程管理和調(diào)度的算法實現(xiàn)一、實驗?zāi)康倪M程調(diào)度是處理機管理的核心內(nèi)容。本設(shè)計要求用高級語言編寫和調(diào)試一 個簡單的進程調(diào)度程序。通過本實驗可以加深理解有關(guān)進程控制塊、進程隊列的 概念,并體會和了解優(yōu)先權(quán)調(diào)度算法和時間片輪轉(zhuǎn)調(diào)度算法的具體實施辦法。二、實驗內(nèi)容1. 設(shè)計進程控制塊pcb表結(jié)構(gòu),分別適用于優(yōu)先權(quán)調(diào)度算法和時間片 輪轉(zhuǎn)調(diào)度算法。2. pcb結(jié)構(gòu)包括以下信息:進程名、進程優(yōu)先數(shù)(或輪轉(zhuǎn)時間片), 進程所占用的cpu時間,進程的狀態(tài),當(dāng)前隊列指針等。根據(jù)調(diào)度 算法的不同,pcb結(jié)構(gòu)的內(nèi)容可以作適當(dāng)?shù)脑鰟h。3. 建立進程就緒隊列。對兩種不同算法編制入鏈子程序。4編制兩種進程調(diào)度算法:a)優(yōu)先數(shù)
2、調(diào)度;b)時間片輪轉(zhuǎn)調(diào)度。允許用戶在程序運行時選擇使用某一種調(diào)度算法。三、編程工具:c、java、vc或其它可視化語言平臺任選四、具體設(shè)計要求及有關(guān)說明選用優(yōu)先數(shù)算法和簡單時間片輪轉(zhuǎn)法對五個進程進行調(diào)度,每個進程可有 三種狀態(tài):運行狀態(tài)(run)、就緒狀態(tài)(ready)和完成狀態(tài)。并假定初始狀態(tài) 為就緒狀態(tài)。prio/round/ prio表示進程優(yōu)先數(shù),round詩??;cput1me進程占用cpu時間;count計數(shù)器;needttme/進程到完成還要的cpu吋間;state/進程的狀態(tài);next/鏈指針2.進程控制塊鏈結(jié)構(gòu)如圖所示。1.name設(shè)計進程控制塊pcb結(jié)構(gòu)如下:/進程標(biāo)識符;r
3、un其run 程指針;中-當(dāng)前運行進ready就緒隊列頭指針;tail就緒隊列尾指針;finish完成隊列頭指針。為了便于處理,程序中進程的運行時間以時間片為單位計算。各進程的優(yōu) 先數(shù)或輪轉(zhuǎn)吋間片數(shù)以及進程需運行的吋間片數(shù)的初值均由用戶給定。3. 程序說明:a)在優(yōu)先數(shù)算法中,進程每執(zhí)行一次,優(yōu)先數(shù)減3, cpu時間片數(shù)加1,進 程還需要的時間片數(shù)減1。在輪轉(zhuǎn)法中,采用固定時間片,時間片數(shù)為2,進程 每執(zhí)行一次,cpu時間片數(shù)加2,進程還需要的時間片數(shù)減2,并排到就緒隊列 的尾上。b)程序結(jié)構(gòu)說明如下:整個程序由 create, f1rst1n, 1nsert1, insert2, print
4、, pr1sch 和 roundsch 過程組成。其中:create的功能是創(chuàng)建新的進程,即創(chuàng)立進程的pcb,并將此pcb鏈入到就 緒隊列中去。firstin的功能是將就緒隊列中的第一個進程投入運行。1nsert1的功能是把述未完成且優(yōu)先數(shù)小于別的進程pcb按進程優(yōu)先數(shù)的 順序插入到就緒隊列中。insert2是輪轉(zhuǎn)法使用的過程,將執(zhí)行了一個單位時間片數(shù)(為2)且還未 完成的進程的pcb插入到就緒隊列的隊尾。print打印每執(zhí)行一次后的所有進程的狀態(tài),這里,就緒(等待)用 代表。prisch按優(yōu)先數(shù)算法調(diào)度進程。roundsch按時間片輪轉(zhuǎn)法調(diào)度進程。0)主程序中定義了 pcb的結(jié)構(gòu)和其它變量n
5、umber進程數(shù),algo為10個字 符長的字符串,存放耍求輸入的算法的名,輸入“priority”表示調(diào)用優(yōu)先數(shù)算 法,輸入“roundrobin”表示調(diào)用循環(huán)輪轉(zhuǎn)法,要求用戶在程序運行時輸入其中 的一個。實現(xiàn)代碼: #include,iostream/, #includestring #includecstring #1nclude lomanip using namcspacc std;sdefine n 50/函數(shù)聲明void create();void insert1(struct pcb *, int); void 1nsert2(struct pcb *); void inser
6、t3(struct pcb *); void firstino ;void prtscho ;void roundscik);void print();/定義進程pcb struct pcb char namen;int pr10;int round;int cputime;int count;int needtime; char state;struct pcb *next; ; struct pcb *ready,*tail,*run,*finish; int number;string algo;/主函數(shù)int m3in() string name;int j=0;/初始化各隊列read
7、y二null;tail二null;run二null;finish二null;loop:cout*end1;cout«*進程管理與調(diào)度*/z«endl;cout*-priority (優(yōu)先數(shù)法)*endl;cout* roundrobtn (輪轉(zhuǎn)法)«<endl;cout* exit(退出)*cndl;cout*end1;cout<<z/請輸入其中一個選擇的名稱:; cin»alg0;if(algo二二priority"|algo二二priority"|algo二二roundrobirt |algo二二roundrob
8、in")創(chuàng)建進程pcb吸收回車符按優(yōu)先數(shù)法調(diào)度/按吋間片輪轉(zhuǎn)create (); cin. get ();if (algo二priority" | | algo二priority") prischo ;進程else roundsch();法調(diào)度進程else if (algo二二exit丨 |algo二二exit") 退岀程序cout<<,z退出程序! endl; exit (0);else cout«endl«z,輸入錯誤!請重新輸入,«endl«endl;goto loop;/重新去到選擇界retur
9、n 0;按優(yōu)先數(shù)大小將進程插入到隊列 void insert1(struct pcb *q, int prio)struct pcb *pt;if (ready->prio<prio) q->next二ready;ready二q;else pt=ready;wh訂e(pt->next!=null&&pt->next->prio>=prio) pt=pt->next;if (pt->next二二null) pt->next二q;tate q->next二nuix;else q->next=pt->nex
10、t; pt->next=q;按順序?qū)⑦M程插入到隊列隊尾 void insert2(struct pcb *q) struct pcb *pt;pt=ready;wh訂e(pt->next!=null) pt=pt->next; pt->next=q;q->next二null; /tail二q->next;按順序?qū)⑦M程插入到完成隊列隊尾 void insert3(struct pcb *q) struct pcb *pt;if (finish!=null) pt二finish;while (pt->next!=null) pt=pt->next;p
11、t->next=q; q->next=null; else q->next二finish; ftntsh=q;finish->next二null;創(chuàng)建進程pcb void create() struct pcb *p;int i;char namen;int prio;int round;int needtime;int cputime;cout«請輸入進程的數(shù)量:;cin>>number;按優(yōu)先數(shù)創(chuàng)建進程if (algo二二priority丨 |algo二二priority")int k=0;for (i=0;inumber;i+) p
12、=(struct pcb *)malloc(sizeof(struct pcb); cout«/z請輸入進程,z«i + l«,z名稱(以'#'結(jié)朿); for(k=o;k<n;k+) cin>>namck;i f (name k =,#') break;namek二'0'strcpy(p->name,name);cout«請輸入進程優(yōu)先數(shù):;cin>>prio;p->pri0=prio;cout«/z請輸入進程需要cpu時間:;ci n>>needt
13、ime;p->needtime=necdtime;cout«z,進程運行一次占用cpu時間 cin>>cputime;p->cputime=cputime;p->c0unt=0;p->state二'w'if (ready!=null)insert1(p, p->pr10);else p->next二ready;ready二p;ready->next=null;tall=p;按時間片創(chuàng)建進程 if (algo二二roundrobin|algo二二roundrobtn)int k=0;for (i=0;inumber;
14、i+) p=(struct pcb *)malloc(sizeof(struct pcb); cout«/z請輸入進程,z«i + l«,z名稱(以'#'結(jié)朿):"for(k=0;k<n;k+) cin>namek;i f (name k =,#') break;namek=,0,; strcpy (p->name, name);cout«z,請輸入進程需要cpu時間 cin>>needtime;p->needtime=needtime;cout«z,請輸入進程輪轉(zhuǎn)吋間片數(shù):
15、; cin>>round;p->round=round;p->count=o;p->state二'w'p->cputtme=round;if (ready!=null)insert2(p);else p->next=ready;ready二p;ready->next二null;tail=p;將就緒隊列第一個進程投入運行 void firstino run二ready;run->state二'r'ready二ready>next;/打印進程信息 void print0 struct pcb *pt;if
16、(algo二二priority丨 |algo二二priority")cout<<sctw(12) <<z,namez,<<setw(10) <<,count,<<sctw(10) <<,cputimc/,<<sctw( 10) <<,zneedtime,z;cout<<setw(9) <</zprio,z<<setw(9) <</zstate/z<<endl;if (run!二null)cout«sctw(12)
17、71;run->name«sctw(9) «run->c0unt«sctw(8) «run->cputime «setw(ll)« run->needt 1 me;cout«setw(9) «run->pri0«setw(9) «run->state«endl;pt二ready;while(pt!=null)cout«setw (12)pt->namesetv(9)pt-countsetv(8)pt-cputimes etw(ll)&
18、#171;pt->needtime;cout<<setw(9)<<pt->prio<<setw(9)<<pt->state<<endl; pt=pt->next;pt二finish;while (pt!二null)cout<<sctw(12)<<pt>name<<sctw(9)<<pt->count<<sctw(8)<<pt->cputime<<s etw(ll)«pt->needt!me;co
19、ut<<setw(9) <<pt->prio<<setw(9)<<pt->state<<endl; pt=pt->next;if (algo=/zroundrobin,z | | algo=/zroundrobin") cout<<setw(12) <<,name,<<setw(9) <<,count,<<setw(10) <<,cputime,<<setw(l 0)"nccdtimc"cout<&
20、lt;setw(9) «,round,«setw(9) «,statez,«endl;if (run!=null) cout«setw(12) «run->name«setw(8) «run->c0unt«setw(9) «run->cputtme «sctw(10) «run->needtime;cout«setw(10)«run->r0und«setw(9)«run->state«end
21、l; pt二ready;while(pt!=null)cout«setw (12)pt->namesetv(8)pt-c0untsetv(9)pt-cputimes etw(10)«pt->needtime;cout«setw(10) «pt->r0und«setw(9) «pt->state«endl ; pt=pt->next;pt二finish;while (pt!二null)cout<<sctw(12)<<pt>name<<sctw(8)<
22、<pt->count<<sctw(9)<<pt->cputime<<s etw(10)«pt->needt!me;cout<<setw仃0) <<pt->r0und<<setw(9)<<pt->state<<endl; pt=pt->next;cout<<endl<<,zpress any key to continue. /z<<endl; cin. get ();/按優(yōu)先數(shù)法調(diào)度進程 void prischo cout<<endl<<,/開始狀態(tài) z,<<endl;print ();while(ready!=null)f1rst1n0 ;run->pri0=run->pri0-3;run->needtime=run->needtime-run->cputime;run->cputtme=run->cp
溫馨提示
- 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. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度生活用品代購委托合同4篇
- 2025年度塔吊司機職業(yè)健康體檢服務(wù)合同范本2篇
- 2024種植業(yè)土地租賃合同
- 2025年度消防安全責(zé)任合同范本詳解3篇
- 2024版內(nèi)部施工合同
- 2024門店手機維修攤位租賃及市場推廣合同3篇
- 2025年度智能家居床上用品購貨合同3篇
- 2025年衛(wèi)生間潔具設(shè)備更新合同范本3篇
- 2024預(yù)算單位公務(wù)卡增值服務(wù)與客戶關(guān)懷協(xié)議3篇
- 2025年醫(yī)療設(shè)備專用穩(wěn)壓器項目投資可行性研究分析報告
- 2025年工程合作協(xié)議書
- 2025年山東省東營市東營區(qū)融媒體中心招聘全媒體采編播專業(yè)技術(shù)人員10人歷年高頻重點提升(共500題)附帶答案詳解
- 2025年宜賓人才限公司招聘高頻重點提升(共500題)附帶答案詳解
- KAT1-2023井下探放水技術(shù)規(guī)范
- 垃圾處理廠工程施工組織設(shè)計
- 天皰瘡患者護理
- 駕駛證學(xué)法減分(學(xué)法免分)題庫及答案200題完整版
- 2024年四川省瀘州市中考英語試題含解析
- 2025屆河南省九師聯(lián)盟商開大聯(lián)考高一數(shù)學(xué)第一學(xué)期期末學(xué)業(yè)質(zhì)量監(jiān)測模擬試題含解析
- 撫養(yǎng)權(quán)起訴狀(31篇)
- 2024年“一崗雙責(zé)”制度(五篇)
評論
0/150
提交評論