OSによる資源管理
要点と定義
オペレーティングシステム(OS)は、アプリケーションとハードウェアの間に立ち、CPU、主記憶、入出力装置などの資源を管理します。複数の処理が同じ資源を使うとき、OSは実行順や状態を調整し、装置とのデータの受け渡しも支援します。
仮想記憶では、主記憶にないページを必要としたときにページフォールトが起こり、OSは補助記憶からページを読み込みます。主記憶に空きがなければ、ページ置換えで別のページを退避します。LRUは、最後に参照されてから最も長く経過したページを置換対象にする方式です。直近の利用状況を基準にするため、各ページの最終参照時刻などを追跡します。
主記憶が不足しているのに同時実行するプログラムを増やすと、ページの入替えが過剰になり、実行に使える時間が減ることがあります。この状態をスラッシングといいます。ページングはページ単位で記憶内容を扱う方式、スラッシングは入替えが頻発して性能が著しく低下した状態で、意味が異なります。
タスク管理では、実行中のタスクを切り替える際、現在の実行状態を保存し、次に実行するタスクを選び、そのタスクの状態を復元します。保存前に切替先を実行状態にしたり、選択前に状態を復元したりはできません。ディスパッチャは選ばれたタスクにCPUを割り当てます。
プリエンプティブ方式では、より優先度の高いタスクが実行可能になると、OSが実行中のタスクを中断して切り替えられます。重要度や緊急度に応じて処理したい場面で使えます。優先度の低いタスクがいつ実行されるかは、優先度の設定やスケジューリング方針にも左右されます。
入出力管理では、バッファという一時的な記憶領域を使い、処理装置と入出力装置の速度差を和らげます。装置がデータをすぐ受け取れないとき、データをバッファにためておけば、送り手は装置の処理速度に合わせて一つずつ待たずに済みます。
GC(ガーベジコレクション)は、プログラムから使われなくなった領域を再利用可能にする仕組みの一つです。マークアンドスイープ方式では、まずプログラムの参照元から到達できるセルに印を付けます(マーキング)。次に領域全体を走査し、印のないセルを回収して、印のあるセルの印を消します(スイープ)。印のあるセルはプログラムから到達できる、つまり使用中のセルです。
メモリリークは、確保した記憶領域が不要になっても解放されず、利用可能な領域が減っていく状態です。GCがあっても、プログラムから到達できる状態が残っている領域は回収対象にならない場合があります。不要な参照を適切に外すことが重要です。
適用条件と例
ページ置換えが必要なのは、要求されたページが主記憶になく、読み込み先の空きもない場合です。たとえば主記憶にページA・B・Cがあり、最後の参照時刻が順に10時、12時、11時なら、現在が13時のときLRUでは最後の参照が最も古いAを置換候補にします。参照時刻が同じ場合の扱いは、実装や追加の規則に依存します。
タスクの切替えは、現在のタスクAの状態を保存し、実行可能なタスクから次のタスクBを選び、Bの保存状態を復元する流れです。優先度方式でBの優先度が高ければ、Aの処理が完了していなくても切り替えられます。一方、プリエンプティブでない方式では、実行中のタスクを任意の時点で強制中断できるとは限りません。
この節の続き
- 誤りやすい点
ここまでが冒頭部分です。ログインすると、無料でも1日2節まで全文をお読みいただけます。
アプリでこの節を読む