2012-02-07 11 views
2

私は次のような質問があります。cpu効率式

あるシステムを測定したところ、平均プロセスはIOをブロックする前にT時間実行されていました。プロセススイッチには時間Sが必要であり、これは実質的に無駄になる(オーバーヘッド)。量子Qとのラウンドロビンスケジューリングのために、私はA、B、D及びEを行う方法を知っているが、Cのために、答えはTである/以下

(a) Q = INFINITY 
(b) Q > T 
(c) S < Q < T 
(d) Q = S 
(e) Q -> 0 

のそれぞれのCPU効率の計算式を与えます(T + S * T/Q)= Q /(Q + S)となる。これは、文脈の切り替えが起こる時間の合計がT/Qであることを意味し、T = 3、Q = 2、プロセスが2単位で実行され、別のプロセスに切り替えられた後、再び別のプロセスに切り替えるので、2つのスイッチは=屋根(T/Q)です。答えに基づいて、1回の切り替えしかないので、1ラウンドと2ラウンドで実行する間に違いはありませんか?誰も私にそれを説明することができ、正確にCPUの効率は何ですか?

+0

私は説明を得ることができる場所からのリンク、私は、同じ質問を持っているあなたは私にいくつかの参照をお願いでき... – Rupesh

答えて

2

あなたの問題は、IOによってブロックされたときにスケジューラの切り替えについて何も言わないので、あなたが指定した答えは正しいとは限りません。プロセスがIOによってブロックされている場合、CPUが無駄になるという事実は考慮されていません。のは、2つのプロセスで例を見てみましょう:

repeat floor(T/Q) times: 
    Process 1 runs (Q units of time) 
    Context switch to process 2 (S units of time) 
    Process 2 runs (Q units of time) 
    Context switch to process 1 (S units of time) 

if T mod Q > 0 
    Process 1 runs (T mod Q units of time) then blocks to IO 
    CPU is idle (Q - T mod Q units of time) 
    Context switch to process 2 (S units of time) 
    Process 2 runs (T mod Q units of time) then blocks to IO 
    CPU is idle (Q - T mod Q units of time) 
    Context switch to process 1 (S units of time) 


Total time elapsed = 2(Q+S)*ceiling(T/Q) 
Total time processes were running = 2T 
Efficiency = T/((Q+S)*ceiling(T/Q)) 

スケジューラスイッチ場合、プロセスがブロックされると、その後:

repeat floor(T/Q) times: 
    Process 1 runs (Q units of time) 
    Context switch to process 2 (S units of time) 
    Process 2 runs (Q units of time) 
    Context switch to process 1 (S units of time) 

if T mod Q > 0 
    Process 1 runs (T mod Q units of time) then blocks to IO 
    Context switch to process 2 (S units of time) 
    Process 2 runs (T mod Q units of time) then blocks to IO 
    Context switch to process 1 (S units of time) 


Total time elapsed = 2T + 2*S*ceiling(T/Q) 
Total time processes were running = 2T 
Efficiency = T/(T+S*ceiling(T/Q)) 

だから我々がブロックされたときにスケジューラが切り替わると仮定した場合、あなたが持っている答え天井()部分が欠落しています。 Tが常にQの倍数であると仮定すれば、それは必要でもありません。あなたの問題がそれについて何と言っているのかは分かりません。

1つのプロセスの観点から見ると、コンテキストスイッチをダブルカウントしたと思います。複数のプロセスがスケジュールされていると考えると、実行されたすべての量子に対して1つのコンテキストスイッチが必要であるという事実がより明確になります。

+0

という問題が発生します。ラウンドロビンスケジューリングに基づいてアイドル状態になるのではなく、CPUが直ちにプロセス切り替え2を行うと思います。 – Skyrel

+0

@skyrel:OK、答えはあなたが提供したものに非常に近いと思われます。更新された私の答え – pepsi

+0

ああ私はここに私の問題を参照してください、ありがとう – Skyrel

0

CPU効率は、CPUが何か有益なことをしている(つまり切り替えていない)時間の割合です。あなたの数式では、スイッチの数は何も示唆されていません。

+0

T/Qはプロセスがスイッチングに費やす平均時間ですので、T + S * T/Qはユニットの総数です – Skyrel

+0

申し訳ありませんが、期間を意味する「時間」とカウントを意味する「時間」を使用すると、混乱します。私は「答えに基づいて、1つの切り替えしかありません」と言いました - これはどこから来ているのかわかりません。 @pepsiが書いているように、各量子の終わりにスイッチがあるので、計算効率が上がります。 TがQの倍数でないためにこれがオフになっているのは、あなたの数式が同じ仮定をしていたからです。 –

+0

プロセス1がIOでブロックを終了すると、 – Skyrel

0

[(T^2)/(Q)]/[(T^2)/(Q)+(S *((T/Q)) - (1/P))]となります。 Pをプロセスの数として使用する。 (T/Q)*(T)]、T/Qは、各プロセスを何回実行する必要があるかを表します。次に、Tを再び掛けて、合計時間処理を得る。スイッチング時間:P((T/Q)*(S)) - S/P]、T/Q * S総スイッチング時間が必要なので、最後のプロセスの後にスイッチをカウントしています。我々はS/Pを引くので、(余分なカウント)を終了しました。

合計時間:スイッチング時間+の実行時間またはP [(T^2)/(Q)] + P [((T/Q)*(S)) - (S/P)]

効率:[(T^2)/(Q)] /((T^2)/(Q)+(S *((T/Q)) -

ウルフラムアルファは正常に表示されます。Wolfram Eval