时间片轮转调度算法c++主要的数据结构
时间: 2023-12-06 07:36:20 浏览: 149
根据提供的引用内容,时间片轮转调度算法的C++主要数据结构如下:
```c++
struct PCB {
int id; // 进程编号
char name[20]; // 进程名
int priority; // 优先级
int arrive_time; // 到达时间
int cpu_time; // 需要的CPU时间
int run_time; // 已经运行的CPU时间
int start_time; // 开始时间
int finish_time; // 完成时间
int turnaround_time; // 周转时间
float weighted_turnaround_time; // 带权周转时间
PCB* next; // 指向下一个进程的指针
};
```
其中,PCB结构体包含了进程的各种信息,如进程编号、进程名、优先级、到达时间、需要的CPU时间、已经运行的CPU时间、开始时间、完成时间、周转时间和带权周转时间等。同时,PCB结构体中还包含了一个指向下一个进程的指针,用于实现链表结构。
相关问题
时间片轮转调度算法c++
好的,这是一个基于时间片轮转的简单调度算法的C++实现:
```c++
#include<iostream>
#include<queue>
using namespace std;
struct Process {
int pid;
int burst_time;
int remaining_time;
};
void time_slice_round_robin(Process processes[], int n, int time_slice) {
queue<Process> q;
int current_time = 0;
int total_burst_time = 0;
for (int i = 0; i < n; i++) {
total_burst_time += processes[i].burst_time;
processes[i].remaining_time = processes[i].burst_time;
}
while (current_time < total_burst_time) {
for (int i = 0; i < n; i++) {
if (processes[i].remaining_time > 0) {
if (processes[i].remaining_time > time_slice) {
current_time += time_slice;
processes[i].remaining_time -= time_slice;
q.push(processes[i]);
}
else {
current_time += processes[i].remaining_time;
processes[i].remaining_time = 0;
cout << "Process " << processes[i].pid << " finished at " << current_time << endl;
}
}
}
while (!q.empty()) {
Process p = q.front();
q.pop();
if (p.remaining_time > 0) {
if (p.remaining_time > time_slice) {
current_time += time_slice;
p.remaining_time -= time_slice;
q.push(p);
}
else {
current_time += p.remaining_time;
p.remaining_time = 0;
cout << "Process " << p.pid << " finished at " << current_time << endl;
}
}
}
}
}
int main() {
Process processes[] = { {1, 10}, {2, 5}, {3, 8} };
int n = sizeof(processes) / sizeof(processes[0]);
int time_slice = 2;
time_slice_round_robin(processes, n, time_slice);
return 0;
}
```
在这个实现中,我们定义了一个Process结构体表示进程,包含进程ID(pid)、进程执行时间(burst_time)和进程剩余执行时间(remaining_time)。
我们还实现了一个函数time_slice_round_robin来执行调度算法。它使用一个队列来存放当前被挂起的进程,并且在每个时间片结束时检查队列中有没有需要继续执行的进程。如果有,它会把它们放回队列中,并且继续执行下一个进程。
在main函数中,我们定义了一个包含三个进程的进程数组,并且调用time_slice_round_robin函数来执行调度算法。调度算法使用时间片大小为2。
按时间片轮转调度算法c++
以下是一个简单的按时间片轮转调度算法的C++代码实现:
```cpp
#include <iostream>
#include <queue>
using namespace std;
struct Process {
int pid; // 进程ID
int bt; // 执行时间
int at; // 到达时间
int wt; // 等待时间
int tat; // 周转时间
int rt; // 剩余时间
};
void findWaitingTime(Process processes[], int n, int quantum) {
queue<int> q;
int t = 0; // 当前时间点
for (int i = 0; i < n; i++) {
processes[i].rt = processes[i].bt;
}
while (true) {
bool done = true;
for (int i = 0; i < n; i++) {
if (processes[i].rt > 0) {
done = false;
if (processes[i].rt > quantum) {
t += quantum;
processes[i].rt -= quantum;
} else {
t += processes[i].rt;
processes[i].wt = t - processes[i].bt - processes[i].at;
processes[i].rt = 0;
}
q.push(processes[i].pid);
}
}
if (done == true) {
break;
}
}
}
void findTurnAroundTime(Process processes[], int n) {
for (int i = 0; i < n; i++) {
processes[i].tat = processes[i].bt + processes[i].wt;
}
}
void findAvgTime(Process processes[], int n, int quantum) {
int total_wt = 0, total_tat = 0;
findWaitingTime(processes, n, quantum);
findTurnAroundTime(processes, n);
cout << "Processes Burst time Waiting time Turn around time\n";
for (int i = 0; i < n; i++) {
total_wt += processes[i].wt;
total_tat += processes[i].tat;
cout << " " << processes[i].pid << "\t\t" << processes[i].bt << "\t "
<< processes[i].wt << "\t\t " << processes[i].tat << endl;
}
cout << "\nAverage waiting time = " << (float)total_wt / (float)n;
cout << "\nAverage turn around time = " << (float)total_tat / (float)n;
}
int main() {
Process processes[] = {{1, 10, 0, 0, 0, 0},
{2, 5, 0, 0, 0, 0},
{3, 8, 0, 0, 0, 0},
{4, 6, 0, 0, 0, 0},
{5, 3, 0, 0, 0, 0}};
int n = sizeof(processes) / sizeof(processes[0]);
int quantum = 2;
findAvgTime(processes, n, quantum);
return 0;
}
```
其中,`Process`结构体表示一个进程,包括进程ID(`pid`)、执行时间(`bt`)、到达时间(`at`)、等待时间(`wt`)、周转时间(`tat`)和剩余时间(`rt`)。`findWaitingTime`函数实现了按时间片轮转调度算法,计算每个进程的等待时间,`findTurnAroundTime`函数计算每个进程的周转时间。最后,`findAvgTime`函数计算平均等待时间和平均周转时间,并输出每个进程的ID、执行时间、等待时间和周转时间。在`main`函数中,定义了一个进程数组,设置时间片大小为2,调用`findAvgTime`函数计算平均等待时间和平均周转时间。
阅读全文