时间片轮转调度算法c语言实现
时间: 2023-11-24 07:07:45 浏览: 75
#include<stdio.h>
int main()
{
int n, i, j, time = 0, flag = 0, t_slice;//定义变量
float avgtat = 0, avgwt = 0;//定义平均周转时间和平均等待时间
printf("Enter the number of processes: ");
scanf("%d", &n);//输入进程数
int bt[n], at[n], tat[n], wt[n], rt[n], ct[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 the time slice: ");
scanf("%d", &t_slice);//输入时间片大小
while(1)
{
flag = 0;//标志位初始化为0
for(i = 0; i < n; i++)
{
if(rt[i] > 0)//如果响应时间大于0
{
flag = 1;//将标志位设置为1
if(rt[i] > t_slice)//如果响应时间大于时间片大小
{
time += t_slice;//时间累加时间片大小
rt[i] -= t_slice;//响应时间减去时间片大小
}
else
{
time += rt[i];//时间累加响应时间
wt[i] = time - at[i] - bt[i];//等待时间=完成时间-到达时间-执行时间
rt[i] = 0;//响应时间清零
ct[i] = time;//完成时间等于当前时间
}
}
}
if(flag == 0)//如果所有进程都已执行完毕
break;//跳出循环
}
printf("\nProcess\tArrival Time\tBurst Time\tCompletion Time\tTurnaround Time\tWaiting Time\n");
for(i = 0; i < n; i++)
{
tat[i] = ct[i] - at[i];//周转时间=完成时间-到达时间
avgtat += tat[i];//累加周转时间
avgwt += wt[i];//累加等待时间
printf("%d\t%d\t\t%d\t\t%d\t\t%d\t\t\t%d\n", i + 1, at[i], bt[i], ct[i], tat[i], wt[i]);//输出每个进程的详细信息
}
avgtat /= n;//计算平均周转时间
avgwt /= n;//计算平均等待时间
printf("\nAverage Turnaround Time: %.2f", avgtat);//输出平均周转时间
printf("\nAverage Waiting Time: %.2f", avgwt);//输出平均等待时间
return 0;
}
阅读全文