8

このテーブルを考えると: ここに画像の説明を入力してください

それらはタイムラインです(タイムスライス= 4):

|p1|p1|p2|p3|p4|p5|p1|p2|p3|p4|p5|p2|p3|p4|p5|p2|p3|p4|p5|p2|p3|p3|
0  4  8 12 16  20 24 28 32 36 40 44 48 52 56 60 64 68 69 72 75 79 80

平均待機時間を計算する簡単な方法はありますか?

ありがとう

注:各プロセスにはいくつかの終了時間があります!

注2:この質問には、副次的な演習として優先度アルゴリズムも含まれています。ラウンドロビンアルゴリズムの優先度列は無視してください。

4

6 に答える 6

10

描画することで待機時間を計算できるGantt chart ため、i番目のプロセスの待機時間はに等しくなりCompletion time - (Arrival time + Burst time )ます。

于 2014-09-08T08:05:09.197 に答える
2

RRの場合、待機時間=最終開始時間-到着時間-(プリエンプション*クォンタム)

P1の最後の開始時刻は24です(ガントチャートでP1が3回実行されている場合)。P1は、その存続期間中に2回プリエンプトされます。Quantum= 4、Arrival=0。

P1の待機時間=24-0-(2 * 4)= 16 :)

于 2014-10-28T17:56:50.710 に答える
1

最初に、すべてのプロセスが時間0に到着する、この問題の単純なバージョンを解決してみましょう。nそれぞれのプロセスの実行時間がであると仮定しeiます。タイムスライスをs。各プロセスに必要なタイムスライスの数をNSPi。今、私たちは持っていNSPi = ceiling(ei/s)ます。プロセスi=に必要な時間NSPi * s。スケジュールの長さ= sum over i from 1 to n (NSPi)。プロセスiの待機時間= finish time of i - execution time of i。ただし、各プロセスの実行時間は異なるため、各プロセスの終了時間の計算は複雑です。ただし、特定のインスタンスのRRアルゴリズムの平均待機時間が必要なだけなので、次のように計算できます(Length of the schedule - sum of execution time of all processes)/num of processes

この式がどのように進化したかについては、これまでに理解できたと思います。理想的には、スケジュールの長さをすべてのプロセスの実行時間の合計と等しくする必要があります。ただし、すべての実行時間がタイムスライスの要因であるとは限りません。したがって、あるタイムスライスでは、プロセスがスケジュールされていないホールが発生します。したがって、実際には、スケジュールの長さは実行時間の合計よりも長くなります。これで、合計待機時間としての違いがあります。

于 2012-07-25T20:34:10.543 に答える
1

| H | I | J | K | L | H | J | K | L | J | K | L | J | L | L | 長すぎる、要するにあなたの答えはこれです:0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60平均待機時間=((H-到着時間)+(I-到着時間)+(J-到着時間)+(K-到着時間)+(L-到着時間))/ 5 =(24-0)+(8-5)+(52-8)+(44-11)+(60-15)/ 5 = 29.8 m秒長すぎる、簡単に言うと、これがRRスケジューリングアルゴリズムのガントチャートです。プロセス[バースト時間、タイムクォンタム、到着時間] H [8、4、0] I [4、4、 5] J [16、4、8] k [12、4、11] L [20、定数= 4、15]

于 2013-04-09T18:17:40.250 に答える
0

私はそれをJavaで実装しようとしました:

public static float waitingTimieRobin(int[] arrival, int[] run, int q) {
    Queue<Integer> orderQueue = new LinkedList<>();
    orderQueue.add(0);
    Set<Integer> orderSet = new HashSet<>();
    orderSet.add(0);

    float sumTime = 0.0f;

    int curTime = 0;
    while (!isOver(run)) {

        int order = orderQueue.poll();
        orderSet.remove(order);
        int arrTime = arrival[order];
        int runtime = run[order];
        sumTime += (curTime - arrTime);
        if (runtime <= q) {
            curTime += runtime;
            run[order] = 0;
        } else {
            curTime += q;
            arrival[order] = curTime;
            run[order] = runtime - q;
        }

        for (int i = 0; i < run.length; i++) {
            if (arrival[i] > curTime) {
                break;
            } else if (i != order && run[i] != 0 && !orderSet.contains(i)) {
                orderQueue.add(i);
                orderSet.add(i);
            }
        }

        if(arrival[order] == curTime && run[order] != 0 && !orderSet.contains(order)) {
            orderQueue.add(order);
            orderSet.add(order);
        }
    }

    return sumTime / arrival.length;
}

public static boolean isOver(int[] run) {
    for (int runtime : run) {
        if (runtime > 0) {
            return false;
        }
    }
    return true;
}
于 2016-09-29T13:40:41.970 に答える
-1

私の答えは待ち時間であり、所要時間は

待機時間:(16 + 51 + 51 + 45 + 42)/ 5 = 41所要時間:(28 + 70 + 72 + 58 + 57)/ 5 = 57

于 2014-05-12T15:19:29.133 に答える