我的问题要求根据给定的量子时间间隔打印出每个过程的所有信息.任何正在处理的过程都放在顶部,否则放在底部.如果该过程已完成处理,则不会再打印.
我的意见是:
char name[50][10] = {"A","B","C","D","E"}; // process names
int btime[] = {9,7,8,5,3}; // process burst times
int n = 5;
预期输出:
Round robin scheduling with time quantum = 2
0: (A,9,9) (B,7,7) (C,8,8) (D,5,5) (E,3,3)
2: (B,7,7) (C,8,8) (D,5,5) (E,3,3) (A,9,7)
4: (C,8,8) (D,5,5) (E,3,3) (A,9,7) (B,7,5)
6: (D,5,5) (E,3,3) (A,9,7) (B,7,5) (C,8,6)
8: (E,3,3) (A,9,7) (B,7,5) (C,8,6) (D,5,3)
10: (A,9,7) (B,7,5) (C,8,6) (D,5,3) (E,3,1)
12: (B,7,5) (C.8.6) (D.5.3) (E,3,1) (A,9,5)
14: (C,8,6) (D,5,3) (E,3,1) (A,9,5) (B,7,3)
16: (D,5,3) (E,3,1) (A,9,5) (B.7,3) (C,8,4)
18: (E,3,1) (A,9,5) (B,7,3) (C,8,4) (D,5,1)
19: (A,9,5) (B,7,3) (C,8,4) (D,5,1)
21: (B,7,3) (C,8,4) (D,5,1) (A,9,3)
23: (C,8,4) (D,5,1) (A,9,3) (B,7,1)
25: (D,5,1) (A,9,3) (B,7,1) (C,8,2)
26: (A,9,3) (B,7,1) (C,8,2)
28: (B.7.1) (C,8,2) (A,9,1)
29: (C,8,2) (A,9,1)
31: (A,9,1)
我的代码:
#include <stdio.h>
int main()
{
char name[50][10] = {"A", "B", "C", "D", "E"}; // process names
int btime[] = {9, 7, 8, 5, 3}; // process burst times
int n = sizeof btime / sizeof btime[0];
int quantum = 2;
int wt[n], i;
int rem_bt[n];
for (i = 0; i < n; i++)
rem_bt[i] = btime[i];
printf("Round robin scheduling with time quantum = %d\n", quantum);
int t = 0;
while (1)
{
int done = 1;
for (i = 0; i < n; i++)
{
if (rem_bt[i] > 0)
{
done = 0;
if (rem_bt[i] > quantum)
{
printf("%d: (%s,%d,%d) \n", t, name[i], btime[i], rem_bt[i]);
rem_bt[i] -= quantum;
t += quantum;
}
else
{
printf("%d: (%s,%d,%d) \n", t, name[i], btime[i], rem_bt[i]);
t += rem_bt[i];
wt[i] = t - btime[i] - rem_bt[i];
rem_bt[i] = 0;
}
}
}
if (done == 1)
{
break;
}
printf("\n");
}
return 0;
}
我被困在打印所有时间线的步骤中,我只能打印出关于正在运行的进程的信息,但不能打印出关于其他停止的进程的信息.
我的输出:
0: (A,9,9)
2: (B,7,7)
4: (C,8,8)
6: (D,5,5)
8: (E,3,3)
10: (A,9,7)
12: (B,7,5)
14: (C,8,6)
16: (D,5,3)
18: (E,3,1)
19: (A,9,5)
21: (B,7,3)
23: (C,8,4)
25: (D,5,1)
26: (A,9,3)
28: (B.7.1)
29: (C,8,2)
31: (A,9,1)
我想知道你的建议,非常感谢!