时间片轮转算法代码c语言
时间: 2023-10-04 15:14:13 浏览: 42
以下是时间片轮转算法的C语言代码:
```
#include<stdio.h>
#define QUANTUM 3 // 时间片大小
struct Process {
int pid; // 进程ID
int bt; // 进程需要的CPU时间
int at; // 进程到达时间
int wt; // 等待时间
int tat; // 周转时间
int rem_bt; // 剩余CPU时间
};
int main() {
int n; // 进程数
int time = 0; // 当前时间
int total_wt = 0; // 总等待时间
int total_tat = 0; // 总周转时间
printf("请输入进程数: ");
scanf("%d", &n);
struct Process p[n];
// 输入进程信息
for(int i=0; i<n; i++) {
printf("请输入进程 %d 的到达时间和需要的CPU时间: ", i+1);
scanf("%d %d", &p[i].at, &p[i].bt);
p[i].pid = i+1;
p[i].rem_bt = p[i].bt;
}
// 时间片轮转
while(1) {
int done = 1;
for(int i=0; i<n; i++) {
if(p[i].rem_bt > 0) {
done = 0;
if(p[i].rem_bt > QUANTUM) {
time += QUANTUM;
p[i].rem_bt -= QUANTUM;
} else {
time += p[i].rem_bt;
p[i].wt = time - p[i].at - p[i].bt;
if(p[i].wt < 0) p[i].wt = 0;
p[i].rem_bt = 0;
p[i].tat = p[i].bt + p[i].wt;
total_wt += p[i].wt;
total_tat += p[i].tat;
}
}
}
if(done == 1) break;
}
// 输出进程的等待时间和周转时间
printf("进程ID \t 到达时间 \t CPU时间 \t 等待时间 \t 周转时间\n");
for(int i=0; i<n; i++) {
printf("%d \t\t %d \t\t %d \t\t %d \t\t %d\n", p[i].pid, p[i].at, p[i].bt, p[i].wt, p[i].tat);
}
// 输出平均等待时间和平均周转时间
printf("平均等待时间 = %.2f\n", (float)total_wt/n);
printf("平均周转时间 = %.2f\n", (float)total_tat/n);
return 0;
}
```