短作业优先调度算法c++的实验步骤
时间: 2023-11-17 08:04:23 浏览: 86
短进程优先算法
短作业优先调度算法是一种常见的进程调度算法,可以通过比较进程的执行时间来决定下一个应该被执行的进程。下面是使用C++实现短作业优先调度算法的一些步骤:
1. 定义进程结构体,包括进程ID,到达时间,执行时间等信息。
```
struct Process {
int pid; // 进程ID
int arrivalTime; // 到达时间
int burstTime; // 执行时间
};
```
2. 读入进程信息,将进程按照到达时间排序。
```
vector<Process> processes; // 存储进程信息
// 读入进程信息
for (int i = 0; i < n; i++) {
int pid, arrivalTime, burstTime;
cin >> pid >> arrivalTime >> burstTime;
processes.push_back({pid, arrivalTime, burstTime});
}
// 将进程按照到达时间排序
sort(processes.begin(), processes.end(), [](const Process& a, const Process& b) {
return a.arrivalTime < b.arrivalTime;
});
```
3. 定义一个优先队列,按照进程的执行时间排序,将已到达的进程加入队列中。
```
priority_queue<Process, vector<Process>, function<bool(Process, Process)>> pq(
[](const Process& a, const Process& b) {
return a.burstTime > b.burstTime;
}
); // 定义优先队列,按照进程执行时间排序
int curTime = 0; // 当前时间
int i = 0; // 进程索引
while (i < n || !pq.empty()) {
if (!pq.empty()) {
// 取出队列中执行时间最短的进程
auto p = pq.top();
pq.pop();
curTime += p.burstTime; // 更新当前时间
cout << "Process " << p.pid << " runs from " << curTime - p.burstTime << " to " << curTime << endl;
} else {
// 如果队列为空,更新当前时间到下一个进程到达时间
curTime = processes[i].arrivalTime;
}
// 将已到达的进程加入队列中
while (i < n && processes[i].arrivalTime <= curTime) {
pq.push(processes[i]);
i++;
}
}
```
4. 最后输出每个进程执行的起始时间和结束时间。
完整代码如下:
```
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
struct Process {
int pid; // 进程ID
int arrivalTime; // 到达时间
int burstTime; // 执行时间
};
int main() {
int n;
cin >> n;
vector<Process> processes; // 存储进程信息
// 读入进程信息
for (int i = 0; i < n; i++) {
int pid, arrivalTime, burstTime;
cin >> pid >> arrivalTime >> burstTime;
processes.push_back({pid, arrivalTime, burstTime});
}
// 将进程按照到达时间排序
sort(processes.begin(), processes.end(), [](const Process& a, const Process& b) {
return a.arrivalTime < b.arrivalTime;
});
// 定义优先队列,按照进程执行时间排序
priority_queue<Process, vector<Process>, function<bool(Process, Process)>> pq(
[](const Process& a, const Process& b) {
return a.burstTime > b.burstTime;
}
);
int curTime = 0; // 当前时间
int i = 0; // 进程索引
while (i < n || !pq.empty()) {
if (!pq.empty()) {
// 取出队列中执行时间最短的进程
auto p = pq.top();
pq.pop();
curTime += p.burstTime; // 更新当前时间
cout << "Process " << p.pid << " runs from " << curTime - p.burstTime << " to " << curTime << endl;
} else {
// 如果队列为空,更新当前时间到下一个进程到达时间
curTime = processes[i].arrivalTime;
}
// 将已到达的进程加入队列中
while (i < n && processes[i].arrivalTime <= curTime) {
pq.push(processes[i]);
i++;
}
}
return 0;
}
```
阅读全文