* [[プロセス]]のスケジューリング [2] '''先入れ先出し ([ABBR@en[FIFO]]), 到着順 ([ABBR@en[FCFS]])''': [[プロセス]]が到着した順に処理します。 [[横取り]]は起こりません。 到着した順に処理が終了します。 [[優先度]]や処理時間に関わらずです。 [1] '''ラウンドロビン ([ABBR@en[en]])''': [[プロセス]]は到着した順に処理しますが、 [[プロセス]]に[[プロセッサ]]が割り当てられるのは一定時間 ([[タイム・スライス]], [[定時間]]) だけです。 時間切れになるとその[[プロセス]]は[[待ち行列]]の最後に送られます。 [[プロセス]]が [[I/O束縛]]状態になると与えられた[[タイム・スライス]]の一部を何もせずに無駄に過ごしてしまうことがあります。 この問題は [[I/O]] 待ちの[[プロセス]]の[[待ち行列]]を別途用意することで回避できます。 [3] '''処理時間順 ([ABBR@en[SPT]])''': 予想処理時間が短い[[プロセス]]から順に処理します。 予想処理時間の計算方法が問題です。 予想処理時間がより短い[[プロセス]]が到着すると[[横取り]]が起こります。 [4] '''残余処理時間順 ([ABBR@en[SRT]])''': 予想残余処理時間が短い[[プロセス]]から順に処理します。 やはり予想処理時間の計算方法が問題です。 予想残余処理時間がより短い[[プロセス]]が到着すると[[横取り]]が起こります。 [5] '''優先度順''': [[優先度]]が高い[[プロセス]]から順に処理します。[[横取り]]を行うなら、 [[優先度]]が高い[[プロセス]]が到着したら現在の[[プロセス]]の実行は中断されます。 [[横取り]]を行わないなら、 現在の[[プロセス]]が終了したら残りの[[プロセス]]から一番[[優先度]]が高い[[プロセス]]が選ばれます。 [[飢餓状態]]になって[[優先度]]が低い[[プロセス]]が実行されなくなる可能性があります。 [6] '''多重フィードバック''': [[優先度]]別に[[待ち行列]]を用意します。 [[プロセス]]が到着すると[[優先度]]は最高にしておきます。 [[優先度]]が高い[[待ち行列]]の先頭から低い[[待ち行列]]の末尾に向かって順に[[プロセス]]を実行していきますが、 与える[[タイム・スライス]]は[[優先度]]に[[反比例]]するようにします。 与えられた[[タイム・スライス]]で実行しきれなかった[[プロセス]]は、 より[[優先度]]が低い[[待ち行列]]に移動します。 より[[優先度]]が高い[[プロセス]]が到着すれば、 [[横取り]]が起こります。 [[優先度]]が低い[[プロセス]]は[[飢餓状態]]に陥ることがあるので、 適当に[[優先度]]を高める方法もあります。 [[#comment]] * メモ