スケジューリング

スケジューリング

[7] スケジューリングの方法は、いろいろあります。

[2] 先入れ先出し (FIFO), 到着順 (FCFS): プロセスが到着した順に処理します。 横取りは起こりません。 到着した順に処理が終了します。 優先度や処理時間に関わらずです。

[1] ラウンドロビン (en): プロセスは到着した順に処理しますが、 プロセスプロセッサが割り当てられるのは一定時間 (タイム・スライス, 定時間) だけです。 時間切れになるとそのプロセス待ち行列の最後に送られます。

プロセスI/O束縛状態になると与えられたタイム・スライスの一部を何もせずに無駄に過ごしてしまうことがあります。 この問題は I/O 待ちのプロセス待ち行列を別途用意することで回避できます。

[3] 処理時間順 (SPT): 予想処理時間が短いプロセスから順に処理します。 予想処理時間の計算方法が問題です。

[4] 残余処理時間順 (SRT): 予想残余処理時間が短いプロセスから順に処理します。 やはり予想処理時間の計算方法が問題です。 予想残余処理時間がより短いプロセスが到着すると横取りが起こります。

[5] 優先度順: 優先度が高いプロセスから順に処理します。横取りを行うなら、 優先度が高いプロセスが到着したら現在のプロセスの実行は中断されます。 横取りを行わないなら、 現在のプロセスが終了したら残りのプロセスから一番優先度が高いプロセスが選ばれます。 飢餓状態になって優先度が低いプロセスが実行されなくなる可能性があります。

[6] 多重フィードバック: 優先度別に待ち行列を用意します。 プロセスが到着すると優先度は最高にしておきます。 優先度が高い待ち行列の先頭から低い待ち行列の末尾に向かって順にプロセスを実行していきますが、 与えるタイム・スライス優先度反比例するようにします。 与えられたタイム・スライスで実行しきれなかったプロセスは、 より優先度が低い待ち行列に移動します。 より優先度が高いプロセスが到着すれば、 横取りが起こります。

優先度が低いプロセス飢餓状態に陥ることがあるので、 適当に優先度を高める方法もあります。