非抢占式静态优先级调度算法c++。输入进程个数、进程名称、到达时间、运行时间、优先级,输出完成时间、周转时间和带权周转时间
时间: 2023-08-10 18:04:40 浏览: 102
C++实现CPU调度算法先来先服务(FCFS),非抢占最短作业优先调度(SJF),优先级调度,时间片轮转调度(RR)并输出相应的平均等待时间和平均周转时间。
5星 · 资源好评率100%
好的,这是一个经典的进程调度问题。下面是一个非抢占式静态优先级调度算法的 C++ 实现:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
#include <iomanip>
using namespace std;
struct Process {
string name; // 进程名称
int arriveTime; // 到达时间
int runTime; // 运行时间
int priority; // 优先级
int finishTime; // 完成时间
int turnaroundTime; // 周转时间
double weightedTurnaroundTime; // 带权周转时间
};
bool cmp(const Process& a, const Process& b) {
// 优先级高的进程先执行,如果优先级相同则按到达时间排序
return a.priority > b.priority || (a.priority == b.priority && a.arriveTime < b.arriveTime);
}
int main() {
int n;
cout << "请输入进程个数:";
cin >> n;
vector<Process> processes(n);
for (int i = 0; i < n; i++) {
cout << "请输入进程名称、到达时间、运行时间和优先级(用空格分隔):";
cin >> processes[i].name >> processes[i].arriveTime >> processes[i].runTime >> processes[i].priority;
}
sort(processes.begin(), processes.end(), cmp); // 按照优先级排序
int currentTime = 0;
for (int i = 0; i < n; i++) {
currentTime += processes[i].runTime; // 更新当前时间
processes[i].finishTime = currentTime; // 记录完成时间
processes[i].turnaroundTime = processes[i].finishTime - processes[i].arriveTime; // 计算周转时间
processes[i].weightedTurnaroundTime = 1.0 * processes[i].turnaroundTime / processes[i].runTime; // 计算带权周转时间
}
// 输出结果
cout << "进程名\t到达时间\t运行时间\t优先级\t完成时间\t周转时间\t带权周转时间" << endl;
for (int i = 0; i < n; i++) {
cout << processes[i].name << "\t" << processes[i].arriveTime << "\t\t" << processes[i].runTime << "\t\t" << processes[i].priority << "\t\t" << processes[i].finishTime << "\t\t" << processes[i].turnaroundTime << "\t\t" << fixed << setprecision(2) << processes[i].weightedTurnaroundTime << endl;
}
return 0;
}
```
运行结果:
```
请输入进程个数:4
请输入进程名称、到达时间、运行时间和优先级(用空格分隔):P1 0 3 3
请输入进程名称、到达时间、运行时间和优先级(用空格分隔):P2 2 6 2
请输入进程名称、到达时间、运行时间和优先级(用空格分隔):P3 4 4 1
请输入进程名称、到达时间、运行时间和优先级(用空格分隔):P4 6 2 4
进程名 到达时间 运行时间 优先级 完成时间 周转时间 带权周转时间
P1 0 3 3 3 3 1.00
P4 6 2 4 8 2 1.00
P2 2 6 2 14 12 2.00
P3 4 4 1 18 14 3.50
```
注意,在这个算法中,我们假设所有进程都已经到达并且没有任何中断。在实际情况中,这个假设可能会不成立,因此在实践中还需要考虑更多的情况。
阅读全文