情報処理のWeb教科書―IPA情報処理試験対策のお供に!
トップ 情報処理の知識体系 テクノロジ系 コンピュータシステム ソフトウェア オペレーティングシステム 記憶管理 仮想記憶管理
スワッピングに使用されるページングファイルについて触れながら、実記憶と仮想記憶の関係や仮想記憶方式の種類と特徴、動的アドレス変換の仕組みを説明していきます。ページングファイルの作成、設定例、ページング方式のLRUやFIFOの代表的なページ置換えアルゴリズムについてページ置換え手順の例など、具体的な内容もまとめています。
この記事の目次です。
ページングファイルとは、仮想記憶方式を採用したOSで実メモリが不足したときに、一時的にメモリの内容を書き込んでおくファイルのことをいいます。
プログラムを一時的に停止させ、使用中の主記憶の内容を補助記憶に退避することをスワッピングといいます。 再開時には、退避した内容を主記憶に再ロードし、元の状態に戻します。
仮想記憶は、HDDやSSDなどの補助記憶上に作成して仮想の主記憶のことをいいます。 高速かつ大容量の主記憶が存在するように見せる技術です。
実記憶と仮想記憶間で記憶内容の入れ替えを行うことをページングをいいます。 スワップ領域は実記憶+仮想記憶の領域で、スワッピングは、実記憶と補助記憶間で入れ替えを行うことを言いいます。
実メモリが不足したときに、一時的にメモリの内容を書き込んでおくファイルをページングファイルといいます。 ページングファイルはページファイル、あるいはスワップ領域を拡張するファイルという意味でスワップファイルともいわれます。
ここでは、ページングファイルの設定例として、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
CentOS7の起動時に自動で作成したページングファイルが追加されるよう/etc/fstabに設定をします。
#vi /etc/fstab : /additional-paging-file swap swap defaults 0 0
仮想記憶は、主記憶の不足を補う記憶装置です。 ここでは仮想記憶方式の概念について見ていきます。
仮想記憶方式は、仮想の主記憶をHDDやSSDなどの補助記憶上に作成して、高速かつ大容量の主記憶が存在するように見せる技術です。
仮想記憶方式では、プログラムをページやセグメントに分割して、ページやセグメントの一部だけを実記憶に格納してプログラムを実行します。 プログラムの実行中、主記憶領域に存在しないページが参照されると、ページフォルトという入出力を伴うプログラムの割り込みをきっかけに、必要なページを主記憶領域にロードするページインが行われます。 仮想記憶と実記憶との対応は、ページテーブルやセグメントテーブルというアドレスの対応表で管理されます。
ページング方式の仮想記憶における主記憶の割当ては、プログラム実行時のページフォールトを契機に、ページをロードするのに必要な主記憶が割り当てられます。
仕組みとして、実行中のプログラム全体は仮想記憶に格納されていて、実行に必要な部分のみが主記憶に格納されます。 必要なページが主記憶上にないとページフォールトという割込みが発生し、必要なページと不要なページとの入れ替えが発生します。
仮想記憶から主記憶にページを読み込むことをページイン、主記憶から仮想記憶にページを書き出すことをページアウトといいます。 このページインとページアウトをまとめてページングといいます。
ページングは、主記憶とプログラムを固定長の単位に分割し、効率よく管理します。 これによって、少ない主記憶で大きなプログラムの実行を可能にします。
ページフォルトの発生回数の計算例を見ていきます。
主記憶への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
ページ置換アルゴリズムは、ページアウトの対象となるページを選択するアルゴリズムです。 アルゴリズムにはLRUアルゴリズムやFIFOアルゴリズムがあります。
LRUアルゴリズムは、使用後の経過時間が最長のページを置換対象とするページ置換アルゴリズムです。
具体的にどのようなページ置換アルゴリズムか、LRUによるページングの例を見ていきます。
例えば、4ブロックのキャッシュメモリC0~C3が表に示す状態である時に 新たに別のブロックの内容をキャッシュメモリにロードする必要が生じたとき、C2のブロックを置換の対象とするアルゴリズムがLRUです。
キャッシュメモリ | ロード時間(分:秒) | 最終参照時刻(分:秒) | 参照回数 |
---|---|---|---|
C0 | 0:00 | 0:08 | 10 |
C1 | 0:03 | 0:06 | 1 |
C2 | 0:04 | 0:05 | 3 |
C3 | 0:05 | 0:10 | 5 |
表のC2の状態を見ると一番最終参照時刻が近いことが見て取れます。 最終参照時刻の古い順に並べるとC2、C1、C0、C3です。 最近もっとも使われていないデータを切り捨てるアルゴリズムがLRUですのでこれがC2を先に選択するアルゴリズムとなります。
実メモリ枠が3ページ大きさ6ページのプログラムがページ読み込み順序は、0、1、2、3、4、0、2、4、3、1、4、5で実行されたときのLRUアルゴリズムによるページングの動作例を見ていきます。
0を読み込みます。実メモリに0がないので1回目のページフォルトより、0をページインします。
1を読み込みます。実メモリに1がないので2回目のページフォルトより、1をページインします。
2を読み込みます。実メモリに2がないので3回目のページフォルトより、2をページインします。
3を読み込みます。実メモリに3がないので4回目のページフォルトより、3をページイン、実メモリに空きがないので最近もっとも使われていない0をページアウトします。
4を読み込みます。実メモリに4がないので5回目のページフォルトより、4をページイン、実メモリに空きがないので最近もっとも使われていない1をページアウトします。
0を読み込みます。実メモリに0がないので6回目のページフォルトより、0をページイン、実メモリに空きがないので最近もっとも使われていない2をページアウトします。
2を読み込みます。実メモリに2がないので7回目のページフォルトより、2をページイン、実メモリに空きがないので最近もっとも使われていない3をページアウトします。
4を読み込みます。実メモリに4があるのでそのままです。
3を読み込みます。実メモリに3がないので8回目のページフォルトより、3をページイン、実メモリに空きがないので最近もっとも使われていない0をページアウトします。
1を読み込みます。実メモリに1がないので9回目のページフォルトより、1をページイン、実メモリに空きがないので最近もっとも使われていない2をページアウトします。
4を読み込みます。実メモリに4があるのでそのままです。
5を読み込みます。実メモリに5がないので10回目のページフォルトより、5をページイン、実メモリに空きがないので最近もっとも使われていない3をページアウトします。
LFUアルゴリズムとは、Least Frequently Usedの略で使われる頻度が低い順に切り捨てる方式のことをいいます。
FIFOは、先入れ先出し方式です。先にページインしたページから先に追い出します。
FIFO方式は、FIFOアルゴリズムを採用した方式です。 先にページインしたページから先に追い出します。 ページインとは、磁気ディスクから主記憶装置にページをロードすることです。
仮想記憶管理における主記憶のページ枠が4のとき、プログラムが参照するページ番号によって以下のようにページ置換えが行われます。
仮想記憶におけるページ置き換えアルゴリズムとしてFIFO方式を採用し、 主記憶のページ枠が3で、プログラムが参照するページ番号の順序が、4→3→2→1→3→5→2のとき、ページインは何回行われるか見ていきます。
参照 | 枠内 | イン回数 | 説明 |
---|---|---|---|
4 | [4][][] | 1 | 4を読み込みます。 |
3 | [4][3][] | 2 | 3を読み込みます。 |
2 | [4][3][2] | 3 | 2を読み込みます。 |
1 | [3][2][1] | 4 | 一番古い4を消し、1を読み込みます。 |
3 | [3][2][1] | 4 | 3は読み込まれているのでページインは不要です。 |
5 | [2][1][5] | 5 | 一番古い3を消し、5を読み込みます。 |
2 | [2][1][5] | 5 | 2は読み込まれているのでページインは不要です。 |
上記のように見ていくとページインは5回であることがわかります。
以下では仮想記憶管理に関連したIPA情報処理試験の過去問とその解説をまとめています。
オペレーティングシステムとは、OSのことですが、種類と特徴、機能、タスク管理などOSとはどのようなものかついてまとめています。
情報処理試験対策用のサイトオリジナル教科書をテーマにテクノロジ系の知識をまとめています。
Copyright (C) 2010-2023 情報処理のWeb教科書. All Rights Reserved. Loarding…