2. 簡易依序循環之排程
int N = 10;
bool first = true;
while (N > 5)
{
if (first) { first = false; } else Console.WriteLine();
Console.Write("請輸入行程processes數量(MAX 5) : ");
if (!int.TryParse(Console.ReadLine(), out var kv))
{
continue;
}
N = kv;
}
int[] T = new int[N];
Console.WriteLine("\n請輸入每個行程的執行時間burst_time...");
for (int i = 0; i < N; i++)
{
Console.Write($"P{i + 1}: ");
T[i] = int.Parse(Console.ReadLine());
}
Console.Write("\n請輸入時間配額time_quantum : ");
int Q = int.Parse(Console.ReadLine());
int[] last = new int[N];
int[] waitTime = new int[N];
int t = 0;
int k = -1;
Console.WriteLine("\n個行程processes執行順序為...");
while (T.Any(x => x != 0))
{
k++;
k %= N;
if (T[k] == 0) continue;
int useTime = Math.Min(Q, T[k]);
waitTime[k] += t - last[k];
T[k] -= useTime;
Console.Write($"{t:00}:P{k + 1} ");
t += useTime;
last[k] = t;
}
Console.WriteLine($"{t:00}\n");
for (int i = 0; i < N; i++)
{
Console.Write($"P{i + 1}等待時間 : {waitTime[i]} ");
}Last updated