參考文章:
- 1、https://blog.csdn.net/weixin_44949135/article/details/116539292
- 2、https://blog.csdn.net/qq_40159978/article/details/90934681
- 3、http://c.biancheng.net/view/480.html
輕微強(qiáng)迫癥最后為了對(duì)齊每個(gè)數(shù)據(jù)的格式,調(diào)了好多次才非常整齊!本文主要參考文章2完成了操作系統(tǒng)實(shí)驗(yàn)最高優(yōu)先級(jí)調(diào)度算法
,參考文章3學(xué)習(xí)了priority_queue
容器的用法,擴(kuò)展內(nèi)容為參考文章1其他幾種調(diào)度算法的學(xué)習(xí)。
動(dòng)態(tài)最高優(yōu)先級(jí)調(diào)度算法是指在進(jìn)程創(chuàng)建時(shí)先確定一個(gè)初始優(yōu)先數(shù), 以后在進(jìn)程運(yùn)行中隨著進(jìn)程特性的改變不斷修改優(yōu)先數(shù),這樣,由于開始優(yōu)先數(shù)很低而得不到CPU的進(jìn)程,就能因?yàn)榈却龝r(shí)間的增長(zhǎng)而優(yōu)先數(shù)變?yōu)樽罡叨玫紺PU運(yùn)行。
算法流程圖:
priority_queue 容器適配器定義了一個(gè)元素有序排列的隊(duì)列。默認(rèn)隊(duì)列頭部的元素優(yōu)先級(jí)最高。因?yàn)樗且粋€(gè)隊(duì)列,所以只能訪問(wèn)第一個(gè)元素,這也意味著優(yōu)先級(jí)最高的元素總是第一個(gè)被處理。
這里我們就利用這個(gè)容器就能非常容易完成實(shí)驗(yàn),
首先,先初始化pcb,獲取輸入的進(jìn)程名、優(yōu)先級(jí)、運(yùn)行時(shí)間后加入隊(duì)列中,根據(jù)重載運(yùn)算符的規(guī)則自動(dòng)排序,權(quán)值大的優(yōu)先,如果權(quán)值一樣,時(shí)間短的優(yōu)先,每次push都會(huì)有一次排序的操作;
然后,就是不斷的出隊(duì)頂端進(jìn)程運(yùn)算,如果運(yùn)行時(shí)間為0即運(yùn)行完畢不再入隊(duì)否則繼續(xù)入隊(duì)運(yùn)行;
最后,所有進(jìn)程運(yùn)行完畢退出!其實(shí)也就是算法流程圖的具體實(shí)現(xiàn)。
#include#include#includeusing namespace std;
typedef struct pcb {string pName;//進(jìn)程名
int priorityNumber;//優(yōu)先數(shù)
float needTime;//估計(jì)服務(wù)時(shí)間
float runTime;//已運(yùn)行時(shí)間
char state;//進(jìn)程狀態(tài) W等待 R運(yùn)行 D結(jié)束
friend bool operator<(pcb a, pcb b){if (a.priorityNumber == b.priorityNumber)
return a.needTime >b.needTime; //時(shí)間小的優(yōu)先
return a.priorityNumber< b.priorityNumber;//權(quán)值大的優(yōu)先
}
}PCB;
priority_queuewaitList;//就緒隊(duì)列
int n;//進(jìn)程個(gè)數(shù)
void init_pcb()//初始化pcb,輸入進(jìn)程信息
{printf("\n\n\n\t\t\t--------------------\n");
printf("\t\t\t|最高優(yōu)先級(jí)調(diào)度算法|\n");
printf("\t\t\t| 作者:q_bing |\n");
printf("\t\t\t| 2022年11月29日 |\n");
printf("\t\t\t--------------------\n");
cout<< "請(qǐng)輸入進(jìn)程的個(gè)數(shù):";
cin >>n;
PCB r;//臨時(shí)工作結(jié)點(diǎn)
for (int i = 0; icout<< "請(qǐng)輸入第"<< i + 1<< "個(gè)進(jìn)程的名字、優(yōu)先數(shù)、服務(wù)時(shí)間(例如:A 12 8 ):";
cin >>r.pName;
cin >>r.priorityNumber;
cin >>r.needTime;
r.runTime = 0;
r.state = 'W';
waitList.push(r);
}
cout<< endl;
}
void showProcess(priority_queuewaitList) //顯示進(jìn)程信息
{PCB s;//臨時(shí)工作結(jié)點(diǎn)
cout<< "進(jìn)程名\t|優(yōu)先數(shù) |服務(wù)時(shí)間|已運(yùn)行時(shí)間|"<< endl;
while (waitList.size() != 0) {s = waitList.top();
cout<< s.pName<< "\t|"<< s.priorityNumber<< "\t|"<< s.needTime<< "\t |"<< s.runTime<< "\t |"<< endl;
waitList.pop();
}
cout<< endl;
}
void runProcess(priority_queue&waitList) {//運(yùn)行進(jìn)程
PCB s;
while(waitList.size()!=0){s = waitList.top();
waitList.pop();
cout<< "正在運(yùn)行的進(jìn)程"<< endl;
cout<< "進(jìn)程名\t|優(yōu)先數(shù) |服務(wù)時(shí)間|已運(yùn)行時(shí)間|"<< endl;//輸出當(dāng)前進(jìn)程
cout<< s.pName<< "\t|"<< s.priorityNumber<< "\t|"<< s.needTime<< "\t |"<< s.runTime<< "\t |"<< endl;
s.priorityNumber--;//優(yōu)先數(shù)-1
s.runTime++;//已運(yùn)行時(shí)間+1
s.needTime--;//還需要時(shí)間-1
if (s.needTime == 0) { s.state = 'D';
cout<<"已完成進(jìn)程"<<"---------------------------------------->"< cout<<"\n所有進(jìn)程運(yùn)行完畢!"<init_pcb();
showProcess(waitList);
runProcess(waitList);
system("pause");
return 0;
}
在參考程序輸入測(cè)試數(shù)據(jù)
001 6 3
003 6 2
002 5 4
005 4 4
004 3 4
應(yīng)該得到的結(jié)果順序
003
001
002
005
004
本程序驗(yàn)證的運(yùn)行數(shù)據(jù)
003
001
002
005
004
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)頁(yè)名稱:操作系統(tǒng)實(shí)驗(yàn)動(dòng)態(tài)最高優(yōu)先級(jí)調(diào)度算法(C++實(shí)現(xiàn))-創(chuàng)新互聯(lián)
標(biāo)題來(lái)源:http://aaarwkj.com/article20/dgdoco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、外貿(mào)建站、全網(wǎng)營(yíng)銷推廣、網(wǎng)站改版、定制開發(fā)、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容