c语言实现时间片轮转算法
时间: 2023-07-24 20:05:42 浏览: 44
以下是 C 语言实现时间片轮转算法的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_PROCESS_NUM 10 // 最大进程数
#define TIME_SLICE 5 // 时间片长度
typedef struct process {
int pid; // 进程 ID
int burst_time; // 进程的执行时间
int remaining_time; // 进程剩余执行时间
int arrival_time; // 进程到达时间
int response_time; // 进程响应时间
int turnaround_time; // 进程周转时间
} Process;
int main() {
int i, j, t, n, total_time = 0;
int quantum[MAX_PROCESS_NUM]; // 时间片数组
Process p[MAX_PROCESS_NUM]; // 进程数组
int waiting_time[MAX_PROCESS_NUM] = {0};
int flag[MAX_PROCESS_NUM] = {0};
printf("请输入进程数:");
scanf("%d", &n);
// 输入进程信息
for (i = 0; i < n; i++) {
printf("请输入第 %d 个进程的到达时间和执行时间:", i + 1);
scanf("%d %d", &p[i].arrival_time, &p[i].burst_time);
p[i].pid = i + 1; // 设置进程 ID
p[i].remaining_time = p[i].burst_time; // 设置剩余执行时间
quantum[i] = TIME_SLICE; // 初始化时间片
total_time += p[i].burst_time; // 计算总执行时间
}
// 时间片轮转算法
for (t = 0; t < total_time; t += TIME_SLICE) {
for (i = 0; i < n; i++) {
if (p[i].remaining_time > 0) {
if (p[i].remaining_time <= TIME_SLICE) {
// 进程执行完毕
waiting_time[i] += t + p[i].remaining_time - p[i].arrival_time - p[i].burst_time;
t += p[i].remaining_time;
p[i].remaining_time = 0;
flag[i] = 1;
p[i].turnaround_time = t - p[i].arrival_time;
} else {
// 时间片用完,进程挂起
p[i].remaining_time -= TIME_SLICE;
waiting_time[i] += TIME_SLICE;
t += TIME_SLICE;
}
}
}
}
// 输出结果
printf("\n进程编号\t到达时间\t执行时间\t等待时间\t响应时间\t周转时间\n");
for (i = 0; i < n; i++) {
p[i].response_time = waiting_time[i] + p[i].burst_time;
printf("%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n", p[i].pid, p[i].arrival_time, p[i].burst_time, waiting_time[i], p[i].response_time, p[i].turnaround_time);
}
return 0;
}
```
该示例代码实现了一个简单的时间片轮转算法,根据输入的进程到达时间和执行时间,计算出每个进程的等待时间、响应时间和周转时间,并输出结果。需要注意的是,示例代码中的时间片长度为固定值 5,实际应用中需要根据具体情况进行调整。