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