时间片轮转调度算法代码
时间: 2023-08-06 14:23:35 浏览: 151
下面是一个简单的时间片轮转调度算法的 C++ 代码实现:
```c++
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
struct Process {
int pid;
int burst;
int remaining;
};
void rrScheduling(vector<Process>& processes, int quantum) {
int n = processes.size();
queue<Process> q;
int currentTime = 0;
int totalWaitingTime = 0;
int totalTurnaroundTime = 0;
int completed = 0;
// 将所有进程放入队列中
for (int i = 0; i < n; i++) {
processes[i].remaining = processes[i].burst;
q.push(processes[i]);
}
// 开始调度
while (completed < n) {
Process current = q.front();
q.pop();
// 执行当前进程
int executeTime = min(current.remaining, quantum);
current.remaining -= executeTime;
currentTime += executeTime;
// 更新等待时间和周转时间
totalWaitingTime += currentTime - current.burst;
totalTurnaroundTime += currentTime;
// 将执行完的进程放回队列中
if (current.remaining == 0) {
completed++;
} else {
q.push(current);
}
}
// 输出统计结果
cout << "Average waiting time: " << (double)totalWaitingTime / n << endl;
cout << "Average turnaround time: " << (double)totalTurnaroundTime / n << endl;
}
int main() {
vector<Process> processes = {{1, 10}, {2, 5}, {3, 8}, {4, 7}, {5, 6}};
int quantum = 2;
rrScheduling(processes, quantum);
return 0;
}
```
在这个实现中,我们使用一个结构体 `Process` 来表示进程,其中包含进程 ID 和 CPU 执行时间。我们还使用了一个队列 `q` 来保存所有的进程,初始时将所有进程都放入队列中。
在时间片轮转调度算法的执行过程中,我们不断从队列中取出一个进程来执行,直到所有进程都执行完成。在执行每个进程的时候,我们使用一个变量 `executeTime` 来记录该进程执行的时间片长度,并将当前时间 `currentTime` 更新为该进程执行完后的时间。如果该进程的剩余执行时间为 0,表示该进程已经执行完成,我们将 `completed` 计数器加一;否则,我们将该进程重新放回队列中,等待下一次执行。
最后,我们输出平均等待时间和平均周转时间,以评估算法的性能。
阅读全文