情報処理のWeb教科書―IPA情報処理試験対策のお供に!

仮想記憶管理―ページングファイル/ページング方式の説明

トップ 情報処理の知識体系 テクノロジ系 コンピュータシステム ソフトウェア オペレーティングシステム 記憶管理 仮想記憶管理

スワッピングに使用されるページングファイルについて触れながら、実記憶と仮想記憶の関係や仮想記憶方式の種類と特徴、動的アドレス変換の仕組みを説明していきます。ページングファイルの作成、設定例、ページング方式のLRUやFIFOの代表的なページ置換えアルゴリズムについてページ置換え手順の例など、具体的な内容もまとめています。

▲記事トップへ

目次

この記事の目次です。

1. ページングファイルとは

2. ページングファイルの設定例

3. 仮想記憶方式の概念

4. ページング方式

5. ページ置き換えアルゴリズム

仮想記憶管理に関連したIPA情報処理試験の過去問

もっと知識を広げるための参考

更新履歴

1. ページングファイルとは

ページングファイルとは、仮想記憶方式を採用したOSで実メモリが不足したときに、一時的にメモリの内容を書き込んでおくファイルのことを言います。

スワッピング

プログラムを一時的に停止させ、使用中の主記憶の内容を補助記憶に退避することをスワッピングといいます。 再開時には、退避した内容を主記憶に再ロードし、元の状態に戻します。

仮想記憶

仮想記憶は、HDDやSSDなどの補助記憶上に作成して仮想の主記憶のことを言います。 高速かつ大容量の主記憶が存在するように見せる技術です。

ページングとスワッピング

実記憶と仮想記憶間で記憶内容の入れ替えを行うことをページングを言います。 スワップ領域は実記憶+仮想記憶の領域で、スワッピングは、実記憶と補助記憶間で入れ替えを行うことを言いいます。

ページングファイル

実メモリが不足したときに、一時的にメモリの内容を書き込んでおくファイルをページングファイルといいます。 ページングファイルはページファイル、あるいはスワップ領域を拡張するファイルという意味でスワップファイルともいわれます。

2. ページングファイルの設定例

ここでは、ページングファイルの設定例として、Linuxのスワップ領域のサイズをmkswap、swaponコマンドを使用して拡張する手順を見ていきます。

2Gのページングファイルを作成し、スワップ領域に追加する手順です。CentOS7やAmazon Linuxなどで実際に確認できます。 additional-paging-fileを別名に変更すれば、複数のページングファイルが設定できます。

ページングファイルの作成

ページングファイルを作成します。

# dd if=/dev/zero of=/additional-paging-file bs=1024K count=2048

ページングファイルのアクセス権限設定

作成したページングファイルのアクセス権限を設定します。

# chmod 600 /additional-paging-file

ページングファイルをフォーマット

mkswapコマンドで、作成したページングファイルをフォーマットします。

# mkswap /additional-paging-file

ページングファイルをスワップ領域に追加

swaponコマンドで、ページングファイルをスワップ領域に追加して、スワップ領域のサイズを拡張します。

# swapon /additional-paging-file

拡張したら、swaponコマンドで、スワップ領域のサイズが拡張されたか確認できます。

# swapon -s
Filename                                Type            Size    Used    Priority
/additional-paging-file                               file    2097148 0       -1

/etc/fstabの設定

CentOS7の起動時に自動で作成したページングファイルが追加されるよう/etc/fstabに設定をします。

#vi /etc/fstab
:
/additional-paging-file               swap                    swap    defaults        0 0

3. 仮想記憶方式の概念

仮想記憶は、主記憶の不足を補う記憶装置です。 ここでは仮想記憶方式の概念について見ていきます。

仮想記憶方式

仮想記憶方式は、仮想の主記憶をHDDやSSDなどの補助記憶上に作成して、高速かつ大容量の主記憶が存在するように見せる技術です。

仮想記憶方式では、プログラムをページやセグメントに分割して、ページやセグメントの一部だけを実記憶に格納してプログラムを実行します。 プログラムの実行中、主記憶領域に存在しないページが参照されると、ページフォルトという入出力を伴うプログラムの割り込みをきっかけに、必要なページを主記憶領域にロードするページインが行われます。 仮想記憶と実記憶との対応は、ページテーブルやセグメントテーブルというアドレスの対応表で管理されます。

4. ページング方式

ページング方式の仮想記憶における主記憶の割当ては、プログラム実行時のページフォールトを契機に、ページをロードするのに必要な主記憶が割り当てられます。

仕組みとして、実行中のプログラム全体は仮想記憶に格納されていて、実行に必要な部分のみが主記憶に格納されます。 必要なページが主記憶上にないとページフォールトという割込みが発生し、必要なページと不要なページとの入れ替えが発生します。

仮想記憶から主記憶にページを読み込むことをページイン、主記憶から仮想記憶にページを書き出すことをページアウトといいます。 このページインとページアウトをまとめてページングといいます。

ページングは、主記憶とプログラムを固定長の単位に分割し、効率よく管理します。 これによって、少ない主記憶で大きなプログラムの実行を可能にします。

ページフォルトの発生回数の計算

ページフォルトの発生回数の計算例を見ていきます。

主記憶への1回のアクセスが 200ナノ秒で、ページフォールトが発生すると 1回当たり 100ミリ秒のオーバヘッドを伴うコンピュータで、 ページフォールトが主記憶アクセスの 50万回中に 1回発生する場合、ページフォールトは 1秒当たり最大何回発生するかをページフォールトのオーバヘッド以外の要因は考慮しないものとし計算します。

「T:1秒当たりのページフォルトの回数」とすると以下の式ができます。

(主記憶への1回あたりのアクセス200ナノ秒 × 50万回 + 1回のオーバーヘッド100ミリ秒)× T = 1秒

これを解くとT=5が求められます。

(200ナノ×500.000回+100ミリ秒)T = 1秒
(0.0000002×500,000+0.1)T = 1 ※単位を秒に統一
(0.1+0.1)T = 1
0.2T = 1
T = 5

5. ページ置き換えアルゴリズム

ページ置換アルゴリズムは、ページアウトの対象となるページを選択するアルゴリズムです。 アルゴリズムにはLRUアルゴリズムやFIFOアルゴリズムがあります。

LRUアルゴリズム

LRUアルゴリズムは、使用後の経過時間が最長のページを置換対象とするページ置換アルゴリズムです。

具体的にどのようなページ置換アルゴリズムか、LRUによるページングの例を見ていきます。

LRUによるページングの例1

例えば、4ブロックのキャッシュメモリC0~C3が表に示す状態である時に 新たに別のブロックの内容をキャッシュメモリにロードする必要が生じたとき、C2のブロックを置換の対象とするアルゴリズムがLRUです。

表 キャッシュメモリの状態
キャッシュメモリロード時間(分:秒)最終参照時刻(分:秒)参照回数
C00:000:0810
C10:030:061
C20:040:053
C30:050:105

表のC2の状態を見ると一番最終参照時刻が近いことが見て取れます。 最終参照時刻の古い順に並べるとC2、C1、C0、C3です。 最近もっとも使われていないデータを切り捨てるアルゴリズムがLRUですのでこれがC2を先に選択するアルゴリズムとなります。

LRUによるページングの例2

実メモリ枠が3ページ大きさ6ページのプログラムがページ読み込み順序は、0、1、2、3、4、0、2、4、3、1、4、5で実行されたときのLRUアルゴリズムによるページングの動作例を見ていきます。

  1. 「0」の読み込み ⇒実メモリの状態:0

    0を読み込みます。実メモリに0がないので1回目のページフォルトより、0をページインします。

  2. 「1」の読み込み ⇒実メモリの状態:0,1

    1を読み込みます。実メモリに1がないので2回目のページフォルトより、1をページインします。

  3. 「2」の読み込み ⇒実メモリの状態:0,1,2

    2を読み込みます。実メモリに2がないので3回目のページフォルトより、2をページインします。

  4. 「3」の読み込み ⇒実メモリの状態:3,1,2

    3を読み込みます。実メモリに3がないので4回目のページフォルトより、3をページイン、実メモリに空きがないので最近もっとも使われていない0をページアウトします。

  5. 「4」の読み込み ⇒実メモリの状態:3,4,2

    4を読み込みます。実メモリに4がないので5回目のページフォルトより、4をページイン、実メモリに空きがないので最近もっとも使われていない1をページアウトします。

  6. 「0」の読み込み ⇒実メモリの状態:3,4,0

    0を読み込みます。実メモリに0がないので6回目のページフォルトより、0をページイン、実メモリに空きがないので最近もっとも使われていない2をページアウトします。

  7. 「2」の読み込み ⇒実メモリの状態:2,4,0

    2を読み込みます。実メモリに2がないので7回目のページフォルトより、2をページイン、実メモリに空きがないので最近もっとも使われていない3をページアウトします。

  8. 「4」の読み込み ⇒実メモリの状態:2,4,0

    4を読み込みます。実メモリに4があるのでそのままです。

  9. 「3」の読み込み ⇒実メモリの状態:2,4,3

    3を読み込みます。実メモリに3がないので8回目のページフォルトより、3をページイン、実メモリに空きがないので最近もっとも使われていない0をページアウトします。

  10. 「1」の読み込み ⇒実メモリの状態:1,4,3

    1を読み込みます。実メモリに1がないので9回目のページフォルトより、1をページイン、実メモリに空きがないので最近もっとも使われていない2をページアウトします。

  11. 「4」の読み込み ⇒実メモリの状態:1,4,3

    4を読み込みます。実メモリに4があるのでそのままです。

  12. 「5」の読み込み ⇒実メモリの状態:1,4,5

    5を読み込みます。実メモリに5がないので10回目のページフォルトより、5をページイン、実メモリに空きがないので最近もっとも使われていない3をページアウトします。

LFUアルゴリズム

LFUアルゴリズムとは、Least Frequently Usedの略で使われる頻度が低い順に切り捨てる方式のことを言います。

FIFOアルゴリズム

FIFOは、先入れ先出し方式です。先にページインしたページから先に追い出します。

FIFO方式は、FIFOアルゴリズムを採用した方式です。 先にページインしたページから先に追い出します。 ページインとは、磁気ディスクから主記憶装置にページをロードすることです。

仮想記憶管理における主記憶のページ枠が4のとき、プログラムが参照するページ番号によって以下のようにページ置換えが行われます。

【問23】ページ置換えアルゴリズム―平成20年秋期ソフトウェア開発技術者

FIFO方式を採用した仮想記憶におけるページイン回数の換算例

仮想記憶におけるページ置き換えアルゴリズムとしてFIFO方式を採用し、 主記憶のページ枠が3で、プログラムが参照するページ番号の順序が、4→3→2→1→3→5→2のとき、ページインは何回行われるか見ていきます。

参照枠内イン回数説明
  4[4][][]  14を読み込みます。
  3[4][3][]  23を読み込みます。
  2[4][3][2]  32を読み込みます。
  1[3][2][1]  4一番古い4を消し、1を読み込みます。
  3[3][2][1]  43は読み込まれているのでページインは不要です。
  5[2][1][5]  5一番古い3を消し、5を読み込みます。
  2[2][1][5]  52は読み込まれているのでページインは不要です。

上記のように見ていくとページインは5回であることがわかります。

仮想記憶管理に関連したIPA情報処理試験の過去問

以下では仮想記憶管理に関連したIPA情報処理試験の過去問とその解説をまとめています。

もっと知識を広げるための参考

更新履歴

戻る

スポンサーリンク

情報処理の知識体系

各試験の問題と解説

ランダム出題・採点アプリ

プログラミング

スポンサーリンク