操作系統(tǒng)實(shí)驗(yàn)動(dòng)態(tài)最高優(yōu)先級(jí)調(diào)度算法(C++實(shí)現(xiàn))-創(chuàng)新互聯(lián)

文章目錄
  • 一、前言
  • 二、實(shí)驗(yàn)簡介和算法流程圖
  • 三、算法實(shí)現(xiàn)思路
  • 四、實(shí)驗(yàn)源碼
  • 五、實(shí)驗(yàn)結(jié)果截圖

10年積累的網(wǎng)站建設(shè)、成都網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有子長免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。一、前言

參考文章:

  • 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í)。

二、實(shí)驗(yàn)簡介和算法流程圖

動(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í)間的增長而優(yōu)先數(shù)變?yōu)樽罡叨玫紺PU運(yùn)行。

算法流程圖:
在這里插入圖片描述

三、算法實(shí)現(xiàn)思路

priority_queue 容器適配器定義了一個(gè)元素有序排列的隊(duì)列。默認(rèn)隊(duì)列頭部的元素優(yōu)先級(jí)最高。因?yàn)樗且粋€(gè)隊(duì)列,所以只能訪問第一個(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)。

四、實(shí)驗(yà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

五、實(shí)驗(yàn)結(jié)果截圖

在這里插入圖片描述

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)頁名稱:操作系統(tǒng)實(shí)驗(yàn)動(dòng)態(tài)最高優(yōu)先級(jí)調(diào)度算法(C++實(shí)現(xiàn))-創(chuàng)新互聯(lián)
標(biāo)題來源:http://bm7419.com/article20/dgdoco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、外貿(mào)建站、全網(wǎ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í)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司