仮想記憶(2)

仮想記憶(2)
実際に存在する主記憶(物理メモリ)の容量に制限
されない「仮想的な記憶空間」をユーザに提供する
仮想記憶の基本アイディア
主記憶に入りきらない大きなプログラムでも,ある時点で
実行されているのはプログラムの一部のみ,必要となる
データも一時には一部のデータのみ(参照の局所性)
プログラム全体はディスク装置に入れておき,
実行時に必要な部分を主記憶にもってくればよい。
「主記憶容量」と「仮想記憶空間」
一般に,
実際に存在する主記憶容量 < 仮想記憶空間
実際に存在する主記憶(物理メモリ)
(512MB とか,1GBとか…)
000000000000
仮想記憶空間/論理アドレス空間
(Pentium4などでは64TB)
3FFFFFFFFFFF
1
仮想記憶
ディスクを介在して,実際の主記憶よりも大きな記憶空間を
プログラム(ユーザ)に提供する
仮想記憶空間(論理アドレス)
ディスク
領域 0
領域 1
領域 2
領域 3
領域 4
領域 6
領域 4
領域 9
領域 2
領域 5
領域 6
領域 7
領域 8
領域 9
ディスクの一部領域を
仮想記憶空間のため
に使う (スワップ領域,
ページファイル領域)
プログラム(ユーザ)から
アクセス可能な仮想的な
記憶装置(仮想記憶)
動的アドレス変換
主記憶空間
(物理アドレス)
プロセッサから
アクセス可能な
主記憶
(物理記憶)
プロセッサ
ページテーブル
を参照
ページング方式
ページ番号
仮想アドレス
ページテーブル
0000
P0
1000
P1
‥‥
0 1
1 0
2000
1
1000
2
3
4
5
6
主記憶
0000
P15
1000
0
P0 P1 P2
P2
0
1
P3 P4 P5
P6
2000
0
P0
3000
‥‥
E000
P14
物理アドレス
E 0
F 1
ディスク
3000
P6
0000
4kbyte
F000
P15
物理アドレス
(16kbyte,1ページ4kbyteとした場合)
存在ビット
ページベース
(各ページの主記憶上での開始アドレス)
仮想アドレス
(64kbyte,1ページ4kbyteとした場合)
2
ページング方式における主記憶アクセス
z プロセッサの生成する仮想アドレスは物理アドレスに変換され,
プロセッサは物理アドレスで主記憶にアクセスする
z 主記憶に存在する場合(ヒット:hit) → そのままアクセス
アクセス対象が
z 主記憶に存在しない場合(ページフォルト:page fault)
→ アクセス対象を含むページをディスクから主記憶にもってくる
‹ 主記憶上に空き領域がある場合
→ 空き領域にもってくる
‹ 主記憶上に空き領域がない場合
→ ① 当面使いそうにない物理ページを選択
(ページ置換えアルゴリズム)
② 選択したページ内容を主記憶から追い出す
(ページアウト)
③ アクセス対象を含むページをディスク
から主記憶上にコピー
(ページイン)
④ 主記憶上の物理ページをアクセス
用語
‹ ページフォルト(page fault)
: 参照ページが主記憶に存在しないこと
(=ページテーブルの存在ビットが0)
⇔ ヒット(hit):参照ページが主記憶に存在すること
‹ ページイン(page in)
: 新しいページを主記憶(物理ページ)にもってくること
‹ ページアウト(page out)
: ページ内容を主記憶から追い出すこと
3
ページフォルトの処理手順
ページフォルト発生(割込み)
空きページの検索
空きページは?
ページをディスクから
取り出す
あり
空きページフレームに読み込む
なし
ページ置換えに
よりページを追い出す
ページテーブルの存在ビットを
0 から1に書き換える
割込み処理から復帰
空きページを確保
処理の再開
追い出すページに書込みがあった場合 → ディスクに書き戻す
追い出すページに変更がない場合
→ 書き戻す必要はない
汚れビット
汚れビット(dirty bit)
存在ビット
ページベース
0
1
1
0
2
1
3
0
4
0
5
0
6
1
E
0
F
1
1
2000
0
1000
ページフォルト時に汚れビットが
1 のとき → ディスクに書き戻してから,
ページを読み出す
0 のとき → ページを読み出すだけ
(ディスクには書き戻さない)
1
3000
‥‥
0
0000
ページテーブル(表)
(主記憶内)
4
問題
仮想アドレスを32bit,物理アドレスを30bitとし,ページ内アドレス(オフセット)
の指定に12bitのアドレスを 使う仮想記憶において,1~5 の問いに答えよ。
仮想アドレス(32ビット)
仮想ページ番号(20ビット)
ページ内アドレス(12ビット)
20ビット
アドレス変換機構
12ビット
18ビット
物理ページ番号(18ビット)
ページ内アドレス(12ビット)
物理アドレス(30ビット)
1.
仮想空間の大きさと主記憶の大きさはそれぞれ何byteか?
2.
1ページの大きさは何byteか?
3.
仮想アドレス空間内のページ数は何個か?
4.
物理アドレス空間内に格納することのできるページ数は何個か?
5.
ページテーブルには,存在ビット,汚れビット,ページベースを格納するために1ページ
につき 4byte 使用する場合,ページテーブル全体の大きさは何byteになるか?
解答
1. 仮想空間の容量=232byte=4×230byte=4Gbyte
物理空間の容量=230byte=1Gbyte
2. ページ内は12ビットのアドレスで指定されるから,212=4kbyte
3. 仮想アドレス空間内のページ数=232÷212=220個
4. 物理アドレス空間内のページ数=230÷212=218個
5. ページテーブルの大きさ=220個,一つのページテーブルのデータ=4byte,
したがって ページテーブルの大きさ(容量)=220×4byte=4Mbyte
5
ページフォルトとスラッシング
参照ページがメモリにない → ページフォルトの発生
→ 空き領域を確保し,ディスクからページをロードする
cf. 主記憶(メモリ)のアクセス時間 : 100 ns
ディスクからのデータ転送時間 : 10 ms
アクセス時間比 : 1000~数万倍
頻繁なページフォルトの発生は実行速度の低下を招く
(スラッシング:thrashing)
ページフォルトの発生をできるだけ小さくすることが重要
ページフォルトのメモリアクセスへの影響
メモリのアクセス時間 : Tm
ページフォルトの発生確率 : p
(ヒット率:1-p)
ページフォルトの処理にかかる時間 : Tf
(ディスクからデータ転送を含む)
ページフォルトを考慮した主記憶の平均アクセス時間 : Te
Te = p×Tf + (1-p)×Tm
6
例
-9
Tm =100ns ( =100×10 s )
1
200000
p = 0.000005(20万回に1回の発生) ←0.000005 =
-3
Tf =10ms ( =10×10 s ) とすると,
-3
-9
Te = 0.000005×10×10 +(1-0.000005)×100× 10
-9
-9
≒1
= 50×10 +100×10
-9
= 150×10 = 150ns
メモリ本来のアクセス時間 Tm : 100ns
仮想記憶を導入することによる実効アクセス時間 Te : 150ns
1.5倍の性能低下
性能低下係数 α= Te / Tm = 1.5
αの適正値 : 1.1~1.2 程度
ページフォルト回数の見積り
p=0.000005(20万回に1回の発生)
0.000005 =
1
200000
20万回アクセスするのに要する時間
100ns×200000+10ms=30ms → 30msに1回の割合で
ページフォルトが発生
20万回のアクセス
メモリ本来のアクセス時間
ページフォルトの処理時間
(Tm )
( Tf )
したがって,1秒当り 約33回(←1/30ms)のページフォルトが
発生していることになる。
(通常,1秒当たり20~30回程度発生している)
7
ページ置換えアルゴリズム
(page replacement algorithm)
主記憶中に空き領域(空きページ)がなくなったときに,いずれかのページを
追い出さなければならない(ページアウト)。どのページを追い出すか ?
今後使われないであろうページを推測し,追い出す(ページアウト)する
主記憶
プログラム
アルゴリズム
(1) FIFO(First In First Out)
(2) LRU(Least Recently Used)
(3) LFU(Least Frequently Used)
ページ0
a
ページ1
b
ページ2
c
ページ3
ページ4
(1) FIFO(First In First Out)
z 最も古くから存在するページを置換え対象にする
0, 1, 2, 3, 0, 1, 4, 0, 1, 2, 3, 4
ページの参照順序
参照ページ
0 1 2 3 0 1 4 0 1 2 3 4
a
主記憶の
ページ
b
c
ページフォルト
発生の有無
ページフォルト回数 9回
8
(2) LRU(Least Recently Used)
z 最も長い間使われなかったページを置換え対象にする
0, 1, 2, 3, 0, 1, 4, 0, 1, 2, 3, 4
ページの参照順序
参照ページ
0 1 2 3 0 1 4 0 1 2 3 4
a
主記憶の
ページ
b
c
ページフォルト
発生の有無
ページフォルト回数 10回
(3) LFU(Least Frequently Used)
z 最も使用頻度の少なかったページを置換え対象にする
(使用頻度が同じ場合はLRU又はランダムに選択)
ページの参照順序
参照ページ
0, 1, 2, 3, 0, 1, 4, 0, 1, 2, 3, 4
0 1 2 3 0 1 4 0 1 2 3 4
a 01 01 01 3‡ 31 31 4‡ 41 41 21 31 41
主記憶の
ページ
b - 11 11 11 0‡ 01 01 02 02 02 02 02
c - - 21 21 21 1‡ 11 11 12 12 12 12
ページフォルト
発生の有無
‡ はLRUによる選択
○ ○ ○○ ○○ ○
ページフォルト回数 10回
9
○ ○○
演習問題 7
1. 仮想アドレスを 30bit,物理アドレスを 28bit とし,ページ内アドレスの指定に 13bit のアドレスを使う仮想
記憶において,次の設問に答えよ。
(1) 仮想空間の大きさと主記憶の大きさはそれぞれ何 byte か?
(2) 1 ページの大きさは何 byte か?
(3) 仮想アドレス空間内のページ数は何個か?
(4) 物理アドレス空間内に格納することのできるページ数は何個か?
(5) ページテーブルには,物理ページ番号及び存在ビット,汚れビットを格納するために 1 ペー
ジにつき 4byte 使用する場合,ページテーブル全体の大きさは何 byte になるか?
2. 主記憶のアクセス時間を 120ns,ページフォルトの発生確率を 0.000004,ページフォルトの処理時間を
15ms としたとき,
(1) 主記憶の平均アクセス時間は何 ns か。
(2) 仮想記憶を採用したことによる性能低下係数はいくらか。
(3) 1 秒当り何回のページフォルトが発生していると考えられるか。
3. ペ ー ジ ン グ 方 式 の 仮 想 記 憶 に お い て , 参 照 か つ 更 新 さ れ る ペ ー ジ 番 号 の 順 番 が ,
2→3→5→1→2→3→4→2→3→4→1→2 で,主記憶のページ枠が 3 ページのとき,各ページ置換えアル
ゴリズムについて,主記憶内に存在するページの移り変わりを示せ。なお,LFU アルゴリズムにおいて,過
去の使用回数が同じ場合は LRU アルゴリズムを採用して,ページアウトするページを選択するものとする。
また,ページフォルトが発生する場合は「ページフォルト発生の有無」欄に○を付けよ。
(1)
FIFO アルゴリズム
2 3 5 1 2 3 4 2 3 4 1 2
参照ページ
主記憶のページ
a
b
c
ページフォルト発生
の有無
(2)
LRU アルゴリズム
2 3 5 1 2 3 4 2 3 4 1 2
参照ページ
主記憶のページ
a
b
c
ページフォルト発生
の有無
(1)
LFU アルゴリズム
2 3 5 1 2 3 4 2 3 4 1 2
参照ページ
主記憶のページ
a
b
c
ページフォルト発生
の有無
10