c语言实现round robin算法
时间: 2023-08-23 07:06:38 浏览: 145
以下是一个简单的C语言实现round robin算法的示例代码,其中假设每个进程占用的时间片为1个单位时间:
```
#include <stdio.h>
#define MAX_PROCESS 10
int main() {
int n, q, i, j, time = 0, remain, flag = 0, wt = 0, tat = 0;
int at[MAX_PROCESS], bt[MAX_PROCESS], rt[MAX_PROCESS];
printf("Enter the number of processes: ");
scanf("%d", &n);
remain = n;
for (i = 0; i < n; i++) {
printf("Enter arrival time and burst time for process %d: ", i + 1);
scanf("%d %d", &at[i], &bt[i]);
rt[i] = bt[i];
}
printf("Enter time quantum: ");
scanf("%d", &q);
printf("\nProcess\t\tTurnaround Time\t\tWaiting Time\n");
for (time = 0, i = 0; remain != 0;) {
if (rt[i] <= q && rt[i] > 0) {
time += rt[i];
rt[i] = 0;
flag = 1;
}
else if (rt[i] > 0) {
rt[i] -= q;
time += q;
}
if (rt[i] == 0 && flag == 1) {
remain--;
printf("P[%d]\t\t%d\t\t\t%d\n", i + 1, time - at[i], time - at[i] - bt[i]);
wt += time - at[i] - bt[i];
tat += time - at[i];
flag = 0;
}
if (i == n - 1)
i = 0;
else if (at[i + 1] <= time)
i++;
else
i = 0;
}
printf("\nAverage waiting time = %f\n", (float)wt / n);
printf("Average turnaround time = %f\n", (float)tat / n);
return 0;
}
```
该示例代码中,首先输入进程的数量、每个进程的到达时间和占用CPU时间,以及时间片大小。然后,使用一个循环来模拟round robin调度算法。在循环中,首先判断当前进程的剩余CPU时间是否小于等于时间片的大小,并根据情况更新时间和剩余CPU时间;然后,如果当前进程的剩余CPU时间为0且标志位为1,说明该进程已经完成,需要更新等待时间和周转时间,并将剩余进程数减1;最后,根据轮转的规则确定下一个执行的进程。循环结束后,计算平均等待时间和平均周转时间,并输出结果。
阅读全文