按时间片轮转调度算法的c语言代码实现
时间: 2023-06-17 16:02:15 浏览: 113
以下是一个基于时间片轮转调度算法的简单 C 语言代码实现:
```c
#include <stdio.h>
struct Process
{
int pid; // 进程 ID
int burst_time; // 执行时间
int remaining_time; // 剩余执行时间
int waiting_time; // 等待时间
};
int main()
{
int n, quantum_time, total_waiting_time = 0;
struct Process p[10];
printf("Enter the number of processes: ");
scanf("%d", &n);
printf("Enter the time quantum: ");
scanf("%d", &quantum_time);
// 输入每个进程的执行时间
for (int i = 0; i < n; i++)
{
printf("Enter the burst time for process %d: ", i+1);
scanf("%d", &p[i].burst_time);
p[i].remaining_time = p[i].burst_time;
p[i].pid = i+1;
}
int time = 0;
int completed_processes = 0;
// 时间片轮转调度算法
while (completed_processes < n)
{
for (int i = 0; i < n; i++)
{
if (p[i].remaining_time > 0)
{
if (p[i].remaining_time <= quantum_time)
{
// 进程执行完毕
time += p[i].remaining_time;
p[i].remaining_time = 0;
p[i].waiting_time = time - p[i].burst_time;
total_waiting_time += p[i].waiting_time;
completed_processes++;
}
else
{
// 进程执行时间超过一个时间片
time += quantum_time;
p[i].remaining_time -= quantum_time;
}
}
}
}
float avg_waiting_time = (float)total_waiting_time / n;
printf("\nAverage waiting time: %.2f\n", avg_waiting_time);
return 0;
}
```
该代码首先通过 `scanf` 函数获取进程数量和时间片长度,然后使用一个结构体数组存储每个进程的执行时间、剩余执行时间、进程 ID 和等待时间。接下来,使用一个 `while` 循环来模拟进程的执行过程,通过 `for` 循环遍历每个进程,如果该进程的剩余执行时间大于 0,则根据时间片长度判断该进程是否可以执行完毕或需要继续执行。如果该进程执行完毕,则更新等待时间和已完成进程数量。最后,计算平均等待时间并输出结果。
阅读全文