欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

优先级调度算法(C++实现)

发布时间:2025/3/20 41 豆豆
生活随笔 收集整理的这篇文章主要介绍了 优先级调度算法(C++实现) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

算法思想:

优先级调度算法:

(1)假设系统中有5个进程,每个进程有一个进程控制块(PCB)来标识。进程控制块内容包括:进程名,链接指针,进程的优先级,估计运行时间,进程状态。 进程的优先数由用户自己指定或程序任意设定,且优先数越低,优先级越高,调度时,总是选择优先级最高的进程运行。

(2)为了调度方便,设计一个指针指向5个进程排成的就绪队列的第一个进程,另外再设一个当前运行进程指针,指向当前正在运行的进程。

(3)处理机调度时总是选择队列中优先级最高的进程运行。为了采用动态优先级调度,进程每运行一次,其优先级就减1。由于本实验是模拟试验,所以对被选中进程并不实际启动运行,而只是执行:优先数加1和估计运行时间减1。用这两个操作来模拟进程的一次运行。

(4)进程运行一次后,若剩余的运行时间不为0,且其优先级低于就绪队列的优先级,则选择一个高优先级进程抢占CPU;若剩余时间为0,则把它的状态改为完成态(C),并撤出就绪队列。

(5)若就绪队列非空,则重复上述的(3)和(4),直到所有进程为完成态。

(6)在所设计的程序中应有显示或打印语句,能显示或打印正运行进程的进程名、运行一次后进程的变化、就绪队列中各进程排队情况等。

代码:

#include<iostream> #include<string> #include<queue> using namespace std; typedef struct pcb {string pName;//进程名int priorityNumber;//优先数float serviceTime;//服务时间float estimatedRunningtime;//估计运行时间char state;//状态bool operator<(const struct pcb &a)const {return priorityNumber > a.priorityNumber || priorityNumber == a.priorityNumber&&estimatedRunningtime > a.estimatedRunningtime;} }PCB;void createProcess(priority_queue<PCB> &p, int n) {//创建n个进程,带头结点cout << endl << endl << "创建进程" << endl;PCB r;//工作结点for (int i = 0; i<n; i++) {cout << "请输入第" << i + 1 << "个进程的名字、优先数、服务时间(例如:A 12 8 ):";cin >> r.pName;cin >> r.priorityNumber;cin >> r.serviceTime;r.estimatedRunningtime = r.serviceTime;r.state = 'R';p.push(r);}cout << endl; }void printProcess(priority_queue<PCB> p) {PCB s;cout << "进程名\t优先数 服务时间 已运行时间 还剩运行时间" << endl;while (p.size() != 0) {s = p.top();cout << s.pName << "\t" << s.priorityNumber << "\t " << s.serviceTime << "\t ";cout << s.serviceTime - s.estimatedRunningtime << "\t " << s.estimatedRunningtime << endl;p.pop();}cout << endl; }void runProcess(priority_queue<PCB> &p) {//运行进程PCB s;while(p.size()!=0){s = p.top();p.pop();cout << "正在运行的进程" << endl;cout << "进程名\t优先数 服务时间 已运行时间 还剩运行时间" << endl;//输出当前进程cout << s.pName << "\t" << s.priorityNumber << "\t " << s.serviceTime << "\t ";cout << s.serviceTime - s.estimatedRunningtime << "\t " << s.estimatedRunningtime << endl;s.priorityNumber++;//优先数加1s.estimatedRunningtime--;//估计运行时间减1if (s.estimatedRunningtime == 0) {s.state = 'C';}elsep.push(s);cout << "进程" << s.pName << "执行一次之后就绪队列中的进程" << endl;printProcess(p);}cout << endl; }int main() {priority_queue<PCB> p;int n;cout << "请输入进程的个数:";cin >> n;createProcess(p, n);runProcess(p);getchar();getchar();return 0; }

实验结果:

总结

以上是生活随笔为你收集整理的优先级调度算法(C++实现)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。