第6章 プロセス
6-1 プロセス
コンピュータ内部でプログラムを処理してゆく能動的実体.プログラムが用いている主記憶や仮想的CPU等各種資源をひとまとまりにしたもの.

スレッド:
一つのプロセスが使うプロセス空間を共有して動作する複数のプログラム実行実体

6-2 プロセスの基本設計
プロセス切り替えのタイミング
・プロセス実行の完了
・入出力待ち又は他のプロセスとの同期待ち
・優先プロセスの変化
・時分割処理における持ち時間(quantum time)の経過

これらの状況はシステムコールの実行やタイマ割込みなどにより検出

プロセス切り替え手順:
1.割込み検出によりプロセッサ状態を主記憶に退避
2.次に実行すべきプロセスを選択(CPUスケジューリング)
3.選択されたプロセスのプロセッサ状態を主記憶から復旧(ディスパッチ)
4.ディスパッチされたプロセスの再開

プロセス状態
・実行状態:実際にプログラムを処理している状態.必ず物理CPU以下の数となる.
・実行可能状態:CPUの割り当てを待っており,割当さえされれば実行可能な状態.一般に実行可能待ち行列を形成する.
・待ち状態:入出力待ちや同期待ちのため,実行が継続できない状態

プロセスの構造
プロセス実行に必要な情報はプロセス制御ブロック(PCB, Process Control Block)に保持される.
UNIXの場合:全てのプロセス情報はプロセス構造体と呼ばれるデータ構造をエントリとする表(プロセステーブル)に格納.プロセスごとプロセスを実行するときに必要な情報もユーザ構造体として格納.

6-3 スケジューリング
スケジューリングの目標
・スループット(単位時間当りに処理可能なジョブ数)の向上
・応答時間の短縮
・プロセス間での公平なCPU割当
・応答時間が予測可能
一般にスループットと応答時間は相反する.

スケジューリングアルゴリズム
横取り(preemption):プロセスが実行中に,OSがこれを中断させて他のプロセスの実行を開始させること.
preemptiveスケジュール(横取りあり)
non-preemptiveスケジュール(横取り無し)

スケジューリングアルゴリズムの例
横取りのないもの

(1)到着順(First Come First Service)
実行可能となったプロセスから順に実行する.プロセスが長時間待たされる場合があり,TSS処理には不適.

(2)処理時間順(Shortest Processing Time First)
処理時間の短いプロセスから順次処理する.横取り無し.全プロセスの平均応答時間を最小化する.処理時間を予め正確に予想することは困難なため,ユーザが指定する見積もり時間や統計的予測を用いる.

(3)残余処理時間順(Shortest Remaining Processing Time First)
新しいプロセスが発生するたびにその時点で残っている処理時間を比較して,最も短いものから優先して実行する.

横取りのあるもの

(4)期限付きスケジューリング(Deadline Scheduling)
リアルタイム処理で用いられる.プロセスごとに処理期限を決め,それまでに処理を終わらせるようにする.

(5)優先度順(Priority)
各プロセスに優先度を与えて,優先度の高い順に実行する.待ち時間の長さにより優先度をあげてゆくようにすると,優先度の低いプロセスがいつまで経っても実行されない状況を避けられる.

(6)ラウンドロビン(Round-Robin)
一定時間ごとにプログラムの実行を切り替え,一旦実行が中断されたプロセスは実行待ち行列の最後に回される.

(7)多重レベル待ち行列(Multilevel Queues)
プロセスの種類に応じて異なる待ち行列を生成し,それぞれ異なる待ち行列でスケジューリングを行う.

(8)多重レベルフィードバック待ち行列
優先度付きの複数の待ち行列を用意し,ある待ち行列で一定のCPU時間を使用したプロセスをより優先度の低い待ち行列に移す.処理時間の短いプロセスが優先して実行される効果を有する.