kernel:"process" (5) スケジューリングアルゴリズム

FIFO (First In First Out)

  • タイムスライスに関係なく、processを順番に実行する方式
    • process A, B, C, Dが順番に開始された場合、Aを実行し、Aが終了したらB、Bが終了したらCというかたちで順番に実行する
  • 弱点は、非常に時間を要するprocessがあった場合、それ以降のすべてのprocessの処理がすべて待たされてしまうこと

Round Robbin

  • 実行processをキューとして管理し、タイムスライスで割り当てている時間だけ実行していく方式。タイムスライスを消費しきっても処理が完了しなかった場合にはprocessはキューの最後に再度エントリーされ、次に実行できる時間が回ってくるのを待つ。
    • process A, B, C, Dが順番に開始された場合、Aを実行し、Aの処理が割り当てられている時間で完了しなかった場合にはDの後に再エントリーされ、Bの処理が開始される
  • Round Robbinの場合、タイムスライスの長さをどの程度に設定するのかが問題となる。短すぎるとCPU切り替えのオーバーヘッドが大きくなって処理が非効率となり、長すぎるとprocessが再度実行されるまでの待ち時間が長くなりRound Robbin方式のメリットが薄れる

優先度スケジューリング

  • 設定されている優先度ごとにキューを用意し、優先度別にprocessを管理する方式。優先度の高いprocessから順番に実行し、かつ実行しているprocessよりも高い優先度が設定されているprocessがキューにエントリーされた場合には、現在実行しているprocessの処理を中断し、優先度の高いprocessを実行する。
    • 優先度A, B, Cの3種類のprocessがあった場合、A1, A2, A3と実行され、優先度Aのprocessの処理が完了したらB1, B2, B3と実行、その後C1, C2, C3とprocessを処理していく。B2を処理している時点でA4がキューにエントリーされた場合、B2の処理を中断し、A4の処理を開始する。
    • 現在実行中のprocessよりも優先度の高いprocessを優先実行する仕組みを"プリエンプト"と呼ぶ
  • 優先度スケジューリングでは、優先度の高いprocessが次々とキューにエントリーされた場合、優先度の低いprocessがいつまでも実行されないという問題が発生する
    • そうした問題に対応するために、実際には待ち時間が長くなると優先度を上げていくような仕組みを並行して使用する必要がある