时间片轮转调度算法c语言程序,输入五个进程
时间: 2023-12-22 07:06:19 浏览: 98
采用时间片轮转算法的进程调度程序
以下是一个简单的时间片轮转调度算法的C语言程序,可以输入五个进程,每个进程包括进程ID、到达时间和需要的CPU时间:
```c
#include <stdio.h>
#define MAX_PROCESSES 5 // 最多进程数
#define TIME_SLICE 2 // 时间片长度
typedef struct {
int pid; // 进程ID
int arrival_time; // 到达时间
int burst_time; // 需要的CPU时间
} process;
int main() {
process processes[MAX_PROCESSES];
int n, i, j, time = 0, remaining_time[MAX_PROCESSES], flag, turnaround_time[MAX_PROCESSES], waiting_time[MAX_PROCESSES], total_turnaround_time = 0, total_waiting_time = 0;
printf("请输入进程数(最多%d个):", MAX_PROCESSES);
scanf("%d", &n);
// 输入每个进程的信息
for (i = 0; i < n; i++) {
printf("请输入进程%d的ID、到达时间和需要的CPU时间:", i + 1);
scanf("%d%d%d", &processes[i].pid, &processes[i].arrival_time, &processes[i].burst_time);
remaining_time[i] = processes[i].burst_time;
}
// 时间片轮转调度算法
while (1) {
flag = 0;
for (i = 0; i < n; i++) {
if (remaining_time[i] > 0) {
flag = 1;
if (remaining_time[i] > TIME_SLICE) {
time += TIME_SLICE;
remaining_time[i] -= TIME_SLICE;
} else {
time += remaining_time[i];
waiting_time[i] = time - processes[i].arrival_time - processes[i].burst_time;
remaining_time[i] = 0;
turnaround_time[i] = time - processes[i].arrival_time;
total_turnaround_time += turnaround_time[i];
total_waiting_time += waiting_time[i];
}
}
}
if (flag == 0) {
break;
}
}
// 输出每个进程的信息
printf("\n进程ID\t到达时间\tCPU时间\t响应时间\t等待时间\n");
for (i = 0; i < n; i++) {
printf("%d\t%d\t\t%d\t\t%d\t\t%d\n", processes[i].pid, processes[i].arrival_time, processes[i].burst_time, turnaround_time[i], waiting_time[i]);
}
// 输出平均响应时间和平均等待时间
printf("\n平均响应时间 = %.2f\n", (float)total_turnaround_time / n);
printf("平均等待时间 = %.2f\n", (float)total_waiting_time / n);
return 0;
}
```
注意,在这个程序中,我们假设所有进程都是按照到达时间的先后顺序依次输入的,不需要进行排序。如果需要考虑进程的优先级等因素,可以对程序进行适当的修改。
阅读全文