时间片轮转调度算法c语言实现
时间: 2023-10-11 21:10:54 浏览: 66
以下是时间片轮转调度算法的C语言实现:
```
#include<stdio.h>
struct process {
int pid; //进程ID
int burst; //进程的CPU时间
int remaining; //剩余CPU时间
int waiting; //等待时间
int turnaround; //周转时间
};
int main() {
int n, quantum, i, j, time = 0, sum_turnaround = 0, sum_waiting = 0;
struct process p[10], temp; //最多10个进程
float avg_turnaround, avg_waiting;
printf("请输入进程个数:");
scanf("%d", &n);
for(i = 0; i < n; i++) {
printf("请输入进程%d的CPU时间:", i + 1);
scanf("%d", &p[i].burst);
p[i].pid = i + 1;
p[i].remaining = p[i].burst;
p[i].waiting = 0;
p[i].turnaround = 0;
}
printf("请输入时间片大小:");
scanf("%d", &quantum);
//时间片轮转调度算法
for(i = 0; n > 0;) {
if(p[i].remaining <= quantum && p[i].remaining > 0) {
time += p[i].remaining;
p[i].remaining = 0;
for(j = 0; j < n; j++) {
if(j != i && p[j].remaining > 0) {
p[j].waiting += p[i].burst;
}
}
p[i].turnaround = time;
sum_turnaround += p[i].turnaround;
sum_waiting += p[i].waiting;
n--;
} else if(p[i].remaining > 0) {
time += quantum;
p[i].remaining -= quantum;
for(j = 0; j < n; j++) {
if(j != i && p[j].remaining > 0) {
p[j].waiting += quantum;
}
}
}
i = (i + 1) % n;
}
//按照进程ID排序输出
for(i = 0; i < n; i++) {
for(j = i + 1; j < n; j++) {
if(p[i].pid > p[j].pid) {
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
printf("进程%d的等待时间为%d,周转时间为%d\n", p[i].pid, p[i].waiting, p[i].turnaround);
}
avg_turnaround = (float)sum_turnaround / n;
avg_waiting = (float)sum_waiting / n;
printf("平均等待时间为%.2f,平均周转时间为%.2f\n", avg_waiting, avg_turnaround);
return 0;
}
```
该程序首先输入进程个数、每个进程的CPU时间和时间片大小,然后使用时间片轮转调度算法进行调度。调度完成后,按照进程ID排序输出每个进程的等待时间和周转时间,并计算出平均等待时间和平均周转时间。