そもそもページフォールトとは?発生する理由、発生回数の関係性などをわかりやすく解説して行きます。
ページフォールトとは
ページフォールトとは、ページング方式の仮想記憶においてプロセスがアクセスしたメモリ領域が物理メモリ上に存在しなく、ストレージに退避されていることが分かった時に発生する割込みのことです。
なぜ発生するかを説明するには、まず仮想記憶管理とページング方式を知っておく必要があります。
仮想記憶管理
仮想記憶管理とは、補助記憶装置の一部を主記憶のように見せて、実際の主記憶領域よりも大きい記憶領域を作りだすことを指します。
データを補助記憶装置に移動してメモリを空ける実記憶管理もありますが、年々と大きくなっていくプログラムを実記憶管理で管理するのは限界があるので、上記で説明した仮想記憶管理が使用されます。
ページング方式
仮想記憶管理の方式の一つで、主記憶と補助記憶をそれぞれ決まった大きさ(固定長)に分割し、ページングテーブルで対応付けて管理を行います。
ページング方式で発生するメモリの動的な割り当ての処理を「ページング」と言います。
ページングの際には下記3つの動作が発生します。
- ページフォールト
- ページアウト
- ページイン
なぜページフォールトが発生するのか
仮想記憶管理を行う以上、主記憶に存在するデータと補助記憶に存在するデータがあります。
仮想記憶管理で補助記憶を主記憶のように扱いはしますが、実際に使用するデータは主記憶にある必要
があります。
主記憶に存在しないが、補助記憶に存在するものにアクセスしようとした際に起こるのがページフォールトになります。
ページフォールト発生時
続いてページフォールトが発生した時、なにが起こるのかを説明していきます。
簡単に説明すると下記の3処理が実行されます。
- ページフォールト発生
- 主記憶に空きがなければページアウトが発生
- 必要なページをページイン
主記憶に必要なページがなく、ページフォールトが発生しました。
ここで主記憶に空きがあれば必要なページをページインで主記憶に移動して終わりです。
しかし、主記憶に空きがない場合は主記憶に空きを作らなければなりません。
この際にページアウトが発生します。
ページアウトは主記憶の必要のないページを補助記憶に移動します。
以上がページフォールト発生時の処理の流れになります。
まとめ
ページフォールトの原因は?発生した後何が起こるの?ややこしそうに思えますが、
「ページが無い!どうしよう、ページを持ってこなくちゃ!」(ページフォールト)
「持ってきたいけど場所がない、空きを作らないと!」(ページアウト)
「空きが出来たからページを移動しよう!」(ページイン)
と、やっていること自体は単純で難しいことなどないのです。
コメント