前回の続きです。
ページング方式
仮想記憶の実装方式には、仮想アドレス空間を固定長の領域に区切って管理するページング方式と可変長の領域に区切って管理するセグメント方式の2つがあります。
ページング方式では、プログラムをページという単位に分割して管理します。
仮想記憶
ページ0
ページ1
ページ2
ページ3
ページ4
ページ5
ページ6
プログラムというのは色んな機能があるので、いつも全てを必要とするわけではありません。
現在のOSでは、デマンドページングという「実行に必要なページだけを実記憶に読込ませる」方法が主流です。
仮記憶装置と実記憶装置との対応づけは、ページテーブルという表によって管理されます。この表によって、仮想ページ番号が実記憶上のどのページと結びついてるかが確認できます。目的のページが実記憶上にないと判明したら、補助記憶から実記憶へとページが読込まれます。
補助記憶から実記憶へのページ読込みをページインと言います。
ページインしようとしたら、既に実記憶がいっぱいだった。。。という場合、いずれかのページを補助記憶に追い出して空きを作る必要があります。
実記憶から補助記憶へとページを追い出すことをページアウトといいます。
実記憶の容量が少ないと、上記のようにページの置換えを必要とする頻度が高くなり、システムの処理効率が極端に低下することがあります。この現象をスラッシングと呼びます。
ページ置き換えアルゴリズム
ページインしようとした時に実記憶に空きがない場合、いずれかのページをページアウトさせて空きを作る必要が出てきます。何をページアウトさせるのかのアルゴリズムが下記のものです。
説明 | |
---|---|
FIFO(First In First Out) | 最初に(First In)ページインしたページを追い出し対象 |
LIFO(Last In First Out) | 最後に(Last In)ページインしたページを、追い出し対象 |
LRU(Least Recently Used) | 最も長い間参照されていないページを、追い出し対象 |
LFU(Least Frequently Used) | 最も参照回数の少ないページを、追い出し対象 |
ページングとスワッピング
広義のスワッピングは補助記憶装置と主記憶装置とでメモリ内容を出し入れすること全般を指しているようなのですが、基本情報の試験では狭義のスワッピングを採用しているようです。
スワッピング
プロセス単位で領域の出し入れを行います。
ページング
ページ単位で領域の出し入れを行います。
まとめ
仮想記憶大事よー。