備忘録

調べ物の備忘録など何か書き残し。

スケジューリングを無理やり分類(メモ)

OSのスケジューリングメモ

OSのスケジューリングは、少数のCPUで、多くのプロセスをこなすために実施される。

wikiとかみても、スケジューリングを比較できるような要素に切り分けては書かれていないようなので無理やり分けてみる。



プロセスの処理単位を適切に区切り次のプロセスを実行する。

プロセスの処理単位を区切る方法として、以下2種類の方法がある。

  1. プリエンプション
  2. ノンプリエンプション

プリエンプション
プロセスを割り込みによって中断させる。
割り込みの種類は、例えば時間割り込みなどである。

ノンプリエンプション
プロセスへの割り込みを許さない。
プロセスの終了は各々のプロセス自身が管理する。
よって短い間隔での処理完了が求められたりする。...はず。



次のプロセスを実行する方法として、以下の方法がある。

  1. FIFO(到着順)/ラウンドロビン
  2. 最短ジョブ優先(SPT)/最小残余時間優先(SRPT)
  3. 優先度順


FIFO/ラウンドロビン
実行可能キューにプロセスが到着した順番にプロセスをキューイングし、先頭から順に実行する。

FIFOはノンプリエンプション方式。
ラウンドロビンはプリエンプション方式。時分割でプロセスが切り替わる。


最短ジョブ優先(SPT)/最小残余時間優先(SRPT)
キュー内で残り処理時間の推定値が最も短いプロセスをスケジューラが選択する。

SPTはノンプリエンプション方式。短いプロセスが終わるまで長いプロセスは待ち続ける。
SRPTはプリエンプション方式。短いプロセスが来た時、実行中プロセスの残時間と比較する。より短い方を先に実行する。


優先度順
プロセスに優先度をつけ、優先度が高い順にキューイングする。



だいたいこんな感じだと思う。
こういう話をベースに、OSごとの仕様を読まねば。頭入らん。


参考
スケジューリング - Wikipedia
sched_setscheduler - システムコールの説明 - Linux コマンド集 一覧表
Man page of SCHED