![操作系統(tǒng)-進(jìn)程調(diào)度模擬算法(附源碼)#(精選.)_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/5/e4a3c392-cce7-487f-a5eb-151e25338c0a/e4a3c392-cce7-487f-a5eb-151e25338c0a1.gif)
![操作系統(tǒng)-進(jìn)程調(diào)度模擬算法(附源碼)#(精選.)_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/5/e4a3c392-cce7-487f-a5eb-151e25338c0a/e4a3c392-cce7-487f-a5eb-151e25338c0a2.gif)
![操作系統(tǒng)-進(jìn)程調(diào)度模擬算法(附源碼)#(精選.)_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/5/e4a3c392-cce7-487f-a5eb-151e25338c0a/e4a3c392-cce7-487f-a5eb-151e25338c0a3.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、進(jìn)程調(diào)度模擬算法課程名稱:計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)者姓名:李琛評分:班級:信 1501-2實(shí)驗(yàn)日期: 2018 年 5 月 1 日教師簽名:一、實(shí)驗(yàn)?zāi)康倪M(jìn)程調(diào)度是處理機(jī)管理的核心內(nèi)容。本實(shí)驗(yàn)要求用高級語言編寫模擬進(jìn)程調(diào)度程 序,以 便加深理解有關(guān)進(jìn)程控制快、進(jìn)程隊(duì)列等概念,并體會和了解優(yōu)先數(shù)算法和時(shí) 間片輪轉(zhuǎn)算法 的具體實(shí)施辦法。二、實(shí)驗(yàn)要求1. 設(shè)計(jì)進(jìn)程控制塊 PCB 的結(jié)構(gòu),通常應(yīng)包括如下信息: 進(jìn)程名、進(jìn)程優(yōu)先數(shù)(或輪轉(zhuǎn)時(shí)間片數(shù)) 、進(jìn)程已占用的 CPU 時(shí)間、進(jìn)程到完成還需 要的時(shí)間、進(jìn)程的狀態(tài)、當(dāng)前隊(duì)列指針等。2. 編寫兩種調(diào)度算法程序: 優(yōu)先數(shù)調(diào)度算法程序 循環(huán)輪轉(zhuǎn)調(diào)度算法程序3. 按要
2、求輸出結(jié)果。三、實(shí)驗(yàn)過程分別用兩種調(diào)度算法對伍個(gè)進(jìn)程進(jìn)行調(diào)度。 每個(gè)進(jìn)程可有三種狀態(tài); 執(zhí)行狀態(tài) ( RUN)、 就緒狀態(tài)(READY包括等待狀態(tài))和完成狀態(tài)(FINISH),并假定初始狀態(tài)為就緒狀 態(tài)。(一)進(jìn)程控制塊結(jié)構(gòu)如下:NAME進(jìn)程標(biāo)示符PRIO/ROUN進(jìn)程優(yōu)先數(shù)/進(jìn)程每次輪轉(zhuǎn)的時(shí)間片數(shù)(設(shè)為常數(shù)2)CPUTIM進(jìn)程累計(jì)占用 CPU的時(shí)間片數(shù)NEEDTIME進(jìn)程到完成還需要的時(shí)間片數(shù)STATE進(jìn)程狀態(tài)NEXT鏈指針注:1. 為了便于處理,程序中進(jìn)程的的運(yùn)行時(shí)間以時(shí)間片為單位進(jìn)行計(jì)算;2. 各進(jìn)程的優(yōu)先數(shù)或輪轉(zhuǎn)時(shí)間片數(shù),以及進(jìn)程運(yùn)行時(shí)間片數(shù)的初值,均由用戶在程 序運(yùn)行時(shí)給定。(二)進(jìn)
3、程的就緒態(tài)和等待態(tài)均為鏈表結(jié)構(gòu),共有四個(gè)指針如下:RUN當(dāng)前運(yùn)行進(jìn)程指針READY就需隊(duì)列頭指針TAIL 就需隊(duì)列尾指針FINISH 完成隊(duì)列頭指針(三)程序說明1. 在優(yōu)先數(shù)算法中,進(jìn)程優(yōu)先數(shù)的初值設(shè)為:50-NEEDTIME每執(zhí)行一次,優(yōu)先數(shù)減 1,CPU 時(shí)間片數(shù)加 1 ,進(jìn)程還需要的時(shí)間片數(shù)減 1 。在輪轉(zhuǎn) 法中,采用固定時(shí)間片單位(兩個(gè)時(shí)間片為一個(gè)單位),進(jìn)程每輪轉(zhuǎn)一次,CPU時(shí)間片數(shù)加2,進(jìn)程還需要的時(shí)間片數(shù)減 2,并退出CPU,排到就緒隊(duì)列尾,等待下一次 調(diào)度。2. 程序的模塊結(jié)構(gòu)如下: 整個(gè)程序可由主程序和如下 7 個(gè)過程組成:2(1) INSERT在優(yōu)先數(shù)算法中,將尚未完成的
4、PCB按優(yōu)先數(shù)順序插入到就緒隊(duì)列中;(2)INSERT2在輪轉(zhuǎn)法中,將執(zhí)行了一個(gè)時(shí)間片單位(為 2 ),但尚未完成的 進(jìn)程的PCB,插到就緒隊(duì)列的隊(duì)尾;(3)FIRSTIN調(diào)度就緒隊(duì)列的第一個(gè)進(jìn)程投入運(yùn)行;(4)PRINT顯示每執(zhí)行一次后所有進(jìn)程的狀態(tài)及有關(guān)信息。(5)CREAT創(chuàng)建新進(jìn)程,并將它的 PCB插入就緒隊(duì)列;(6)PRISCH按優(yōu)先數(shù)算法調(diào)度進(jìn)程;(7)ROUNDS按時(shí)間片輪轉(zhuǎn)法調(diào)度進(jìn)程。主程序定義 PCB 結(jié)構(gòu)和其他有關(guān)變量。實(shí)驗(yàn)代碼:Main.cpp #include<iostream> #include<string>using namespace s
5、td;typedef struct nodechar name20;/進(jìn)程名int prio;/進(jìn)程優(yōu)先級int round;/分配CPU勺時(shí)間int cputime;/CPU執(zhí)行時(shí)間int needtime;/進(jìn)程執(zhí)行所需時(shí)間char state;/進(jìn)程狀態(tài)int count;/ 記錄執(zhí)行次數(shù)struct node *next; / 鏈表指針PCB;int num;/ 定義三個(gè)隊(duì)列,就緒隊(duì)列,執(zhí)行隊(duì)列,完成隊(duì)列PCB *ready = NULL;/ 就緒隊(duì)列PCB *run = NULL;/執(zhí)行隊(duì)列PCB *finish = NULL;/完成隊(duì)列/ 取得第一個(gè)就緒節(jié)點(diǎn)void GetFirs
6、t()run = ready;if (ready != NULL)run->state = 'R'ready = ready->next; run->next = NULL;/ 優(yōu)先級輸出隊(duì)列void Output1()PCB *p; p = ready;while (p != NULL)cout << p->name << "t" << p->prio << "t" << p->cputime << "t" &
7、lt;< p->needtime << "t " << p->state << " t " << p->count << endl;p = p->next;p = finish;while (p != NULL)cout << p->name << "t" << p->prio << "t" << p->cputime << "
8、t" << p->needtime << "t " << p->state << " t " << p->count << endl;p = p->next; p = run; while (p != NULL)cout << p->name << "t" << p->prio << "t"<< p->cputime <<
9、 "t"<< p->needtime << "t<< p->state<< " t " << p->count << endl;p = p->next;/ 輪轉(zhuǎn)法輸出隊(duì)列void Output2()PCB *p;p = ready;while (p != NULL)<< "tcout << p->name<< "t"<< p->round<< &qu
10、ot;t"<< p->cputime<< "t"<<p->needtime<< "t<< p->state<< p->count << endl;p = p->next;p = finish;while (p != NULL)<< "tcout << p->name<< "t"<< p->round<< "t"<&l
11、t; p->cputime<< "t"<<p->needtime<< "t<< p->state<< p->count << endl;p = p->next;p = run;while (p != NULL)<< "tcout << p->name<< "t"<< p->round<< "t"<< p->cputime<
12、;< "t"<<p->needtime<< "t<< p->state<< p->count << endl;p = p->next;/ 創(chuàng)建優(yōu)先級隊(duì)列/ 創(chuàng)建優(yōu)先級隊(duì)列,規(guī)定優(yōu)先數(shù)越小,優(yōu)先級越低void InsertPrio(PCB *in)PCB *fst, *nxt;fst = nxt = ready;if (ready = NULL) /如果隊(duì)列為空,則為第一個(gè)元素in->next = ready; ready = in;else / 查到合適的位置進(jìn)行插入i
13、f (in->prio >= fst->prio) / in->next = ready; ready = in;else比第一個(gè)還要大,則插入到隊(duì)頭while (fst->next != NULL) / nxt = fst;fst = fst->next;移動指針查找第一個(gè)比它小的元素的位置進(jìn)行插入if (fst->next = NULL) /已經(jīng)搜索到隊(duì)尾,則其優(yōu)先級數(shù)最小,將其插入到隊(duì)尾即可in->next = fst->next; fst->next = in;else / 插入到隊(duì)列中nxt = in; in->nex
14、t = fst;/ 將進(jìn)程插入到就緒隊(duì)列尾部void InsertTime(PCB *in) PCB *fst; fst = ready;if (ready = NULL)in->next = ready;ready = in;elsewhile (fst->next != NULL)fst = fst->next;in->next = fst->next; fst->next = in;/ 將進(jìn)程插入到完成隊(duì)列尾部void InsertFinish(PCB *in)PCB *fst;fst = finish;if (finish = NULL)in->
15、;next = finish;finish = in;elsewhile (fst->next != NULL)fst = fst->next;in->next = fst->next; fst->next = in;/ 優(yōu)先級調(diào)度輸入函數(shù)void PrioCreate()PCB *tmp;int i;<< endl;cout << "Enter the name and needtimefor (i = 0; i < num; i+)if (tmp = (PCB *)malloc(sizeof(PCB) = NULL)ce
16、rr << "malloc" << endl; exit(1);cin >> tmp->name; getchar();cin >> tmp->needtime; tmp->cputime = 0;tmp->state = 'W'tmp->prio = 50 - tmp->needtime; / 設(shè)置其優(yōu)先級,需要的時(shí)間越多,優(yōu)先級越低 tmp->round = 0;tmp->count = 0;InsertPrio(tmp); / 按照優(yōu)先級從高到低,插入到就緒
17、隊(duì)列cout << "進(jìn)程名t優(yōu)先級tcpu時(shí)間t需要時(shí)間 進(jìn)程狀態(tài) 計(jì)數(shù)器"<< endl;/ 時(shí)間片輸入函數(shù)void TimeCreate()PCB *tmp;int i;cout << " 輸入進(jìn)程名字和進(jìn)程時(shí)間片所需時(shí)間: " << endl;for (i = 0; i < num; i+)if (tmp = (PCB *)malloc(sizeof(PCB) = NULL)cerr << "malloc" << endl;exit(1);cin &
18、gt;> tmp->name;getchar();cin >> tmp->needtime;tmp->cputime = 0;tmp->state = 'W' tmp->prio = 0;tmp->round = 2;tmp->count = 0;InsertTime(tmp);cout << "進(jìn)程名t輪數(shù)tCPU時(shí)間t需要時(shí)間 進(jìn)程狀態(tài) 計(jì)數(shù)器"<< endl;/ 按照優(yōu)先級調(diào)度,每次執(zhí)行一個(gè)時(shí)間片void Priority()int flag = 1;GetFirst(
19、);while (run != NULL)Output1();while (flag)run->prio -= 3; / 優(yōu)先級減去三run->cputime+; /CPU 時(shí)間片加一 run->needtime-;/進(jìn)程執(zhí)行完成的剩余時(shí)間減一F,將其插入到完成隊(duì)列if (run->needtime = 0)/ 如果進(jìn)程執(zhí)行完畢,將進(jìn)程狀態(tài)置為run->state = 'F'run->count+;InsertFinish(run);flag = 0;else /將進(jìn)程狀態(tài)置為 W入就緒隊(duì)列run->state = 'W'
20、;run->count+; / 進(jìn)程執(zhí)行的次數(shù)加一InsertTime(run);flag = 0;flag = 1;GetFirst(); / 繼續(xù)取就緒隊(duì)列隊(duì)頭進(jìn)程進(jìn)入執(zhí)行隊(duì)列void RoundRun() / 時(shí)間片輪轉(zhuǎn)調(diào)度算法int flag = 1;GetFirst();while (run != NULL)Output2();while (flag)run->count+;run->cputime+;run->needtime-;if (run->needtime = 0) /進(jìn)程執(zhí)行完畢run->state = 'F'Inser
21、tFinish(run);flag = 0;else if (run->count = run->round)/ 時(shí)間片用完run->state = 'W'run->count = 0; /計(jì)數(shù)器清零,為下次做準(zhǔn)備InsertTime(run);flag = 0;flag = 1;GetFirst();int main(void)int n;cout << " 輸入進(jìn)程個(gè)數(shù): " << endl;cin >> num;getchar();<< endl;cout << &qu
22、ot; 進(jìn)程調(diào)度算法模擬 cout << "1、優(yōu)先級調(diào)度算法 " << endl;cout << "2、循環(huán)輪轉(zhuǎn)調(diào)度算法 " << endl;cout << "" << endl;cout << " 輸入選擇序號: " << endl;cin >> n;switch (n)case 1:cout << " 優(yōu)先級調(diào)度 :" << endl;PrioCreate();Priority();Output1(); break;case 2:cout << " 循環(huán)輪轉(zhuǎn)算法 :" << endl; TimeCreate();RoundRun();Output2(); break;case 0:exit(1);break;default:cout << "Enter error!" << endl; break;cout << endl;return 0;四、實(shí)驗(yàn)結(jié)果優(yōu)先級調(diào)度工、循環(huán)輪轉(zhuǎn)凋度現(xiàn)比揄入選擇序號:c; W
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度廠房裝修工程合同管理及咨詢服務(wù)
- 2025年系列自動遙測氣象站項(xiàng)目建議書
- 秋季重點(diǎn)學(xué)科教學(xué)方案計(jì)劃
- 秘書職業(yè)女性的挑戰(zhàn)與機(jī)遇計(jì)劃
- 幼兒表達(dá)能力提升計(jì)劃
- 社區(qū)親和力提升的途徑計(jì)劃
- 資金流動性管理策略計(jì)劃
- 急診科應(yīng)急響應(yīng)機(jī)制強(qiáng)化計(jì)劃
- 藝術(shù)設(shè)計(jì)行業(yè)新年工作策略計(jì)劃
- 營造積極班級氣氛的實(shí)踐計(jì)劃
- 2025年南陽科技職業(yè)學(xué)院高職單招數(shù)學(xué)歷年(2016-2024)頻考點(diǎn)試題含答案解析
- 加油站復(fù)工復(fù)產(chǎn)方案
- 2025-2030年中國增韌劑(MBS高膠粉)行業(yè)發(fā)展現(xiàn)狀及前景趨勢分析報(bào)告
- 2025年高考物理復(fù)習(xí)新題速遞之萬有引力與宇宙航行(2024年9月)
- 2025年首都機(jī)場集團(tuán)公司招聘筆試參考題庫含答案解析
- 2025云南省貴金屬新材料控股集團(tuán)限公司面向高校畢業(yè)生專項(xiàng)招聘144人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 蘇州市區(qū)2024-2025學(xué)年五年級上學(xué)期數(shù)學(xué)期末試題一(有答案)
- 暑期預(yù)習(xí)高一生物必修二知識點(diǎn)
- (高清版)DB43∕T 1147-2015 太陽能果蔬烘干機(jī)
- 醫(yī)院人體器官捐獻(xiàn)及獲取流程
- 結(jié)腸造瘺還納手術(shù)配合
評論
0/150
提交評論