仮想記憶-1
仮想記憶
仮想記憶-2
仮想記憶
• 実メモリよりも大きいアドレス空間,記憶空間を ユーザに提供する方法.
–
主に,ページング,セグメンテーションの2手法.–
実行中プロセスが参照するアドレスと,実メモリの実際のアドレスを独立させる.
•
前者が仮想アドレス(virtual address)
後者が実アドレス(real address)仮想記憶-3
仮想記憶
• 使用するメモリサイズ(プログラム,データ,ス タックなど ) が物理メモリ量を超えることを許す.
– OS
はその時点でプログラムが使用している一部分 のみメモリ内に保存し,使っていない残りはディスク に置く.– 2GBのプログラムを物理メモリ1GBのマシンで動か
すには,OSが必要に応じてプログラムの断片をディ スクとメモリ間でスワップ.仮想記憶-4
仮想記憶
プログラム と CPU
仮 想 メモ リ 仮想 アドレス
1000
実メモリ 実
アドレス 300
ブロック置換
MOV REG 1000
仮想アドレス1000
→ 実アドレス300
仮想記憶-5
仮想記憶の意義
• 一定サイズで,巨大で,連続している(←全て
“仮想的に”)メモリ領域をプロセスに割り当てる ことができる.
–
フラグメンテーションがおきづらい• プログラムを動的に再配置しやすい
仮想記憶-6
paging,segmentation
• paging (主流)
–
仮想アドレス空間と実アドレス空間を固定長ページ に分割して,それを対応づける• segmentation
–
可変長のセグメント単位で,仮想アドレス空間と実ア ドレス空間を対応づける.• page segment
– paging と segmentation の組み合わせ.セグメント
に複数のページを割り当てる.仮想記憶-7
アドレスの変換
a
アドレス変換テーブル
v
b w
c x
d y
e z
仮想アドレス ブロック番号 相対位置
b m
実アドレス w + m
• 実アドレスと仮想アドレスの変換はこんな感じ
ブロック番号 実アドレス
仮想記憶-8
アドレスの変換
a
アドレス変換テーブル
v
b w
c x
d y
e z
仮想アドレス ブロック番号 オフセット
b m
実アドレス ブロック実アドレス オフセット
m w
• 実際はこんな感じ(MMUにて後述)
ブロック番号 実アドレス
仮想記憶-9
アドレス変換
CPU
MMU CPUパッケージ(?)
近年,多くのCPU製品にMMUが組み込まれている.MMU: memory management unit 仮想アドレス
実アドレス
memory disk
• CPUは仮想ア
ドレスをMMU に送信する
• MMUはメモリ に実アドレス
(物理アドレス) を
送信する
バス
仮想記憶-10
アドレス変換
• 仮想アドレス(空間)
–
プログラムが指定するアドレス• 実アドレス(空間)
–
実際の物理メモリのアドレス• アドレス変換
– MMU内のDATが行う.
– DAT:Dynamic Address Translator – MMU, DATはハードウェア
仮想記憶-11
仮想記憶の実装
• 仮想記憶は,以下の手法を用いて実現.
–
アドレス変換,Paging,Segmentation• ほとんど場合,アドレス変換ハードウェアと OS(当然ソフトウェア)を協調させて実現
–
アドレス変換:MMU (のDAT)仮想記憶-12
ページング
• 主記憶を固定長page frameに分割.
• 仮想アドレス空間も同サイズのpageに分割 –
当然,実記憶のpage frameと仮想pageを対応づける. 対応づけることをmappingと言う.
– segmentaionでも“mapping”という
• 実アドレスと仮想アドレスの変換表をpage tableと呼ぶ.
仮想記憶-13
Paging
仮想アドレス空間 (仮想ページ)
0 1 2 3 4 5 6 7 8 固 9
定 長
page table
0 1 2 3 4 5 6 7 8 9
2 4 5 X 0 1 3 x 6 x
実アドレス空間 (実ページ)
0 1 2 3 4 5 6
仮想記憶-14 2
0KB-4KB 1 4KB-8KB
6 8KB-12KB
0 12KB-16KB
4 16KB-20KB
3 20KB-24KB
x 24KB-28KB
x 28KB-32KB
x 32KB-36KB
5 36KB-40KB
x 40KB-44KB
7 44KB-48KB
x 48KB-52KB
x 52KB-56KB
x 56KB-60KB
x 60KB-64KB
0 1 2 3 4 5 6 7
0KB-4KB 4KB-8KB 8KB-12KB 12KB-16KB 16KB-20KB 20KB-24KB 24KB-28KB 28KB-32KB
Paging
• 仮想メモリ64KB,実記憶 32KB,ページ(フレーム)サ イズ4KBの場合
ページ ページフレーム
2 0KB-4KB
1 4KB-8KB
6 8KB-12KB
0 12KB-16KB
4 16KB-20KB
3 20KB-24KB
x 24KB-28KB
x 28KB-32KB
x 32KB-36KB
5 36KB-40KB
x 40KB-44KB
7 44KB-48KB
x 48KB-52KB
x 52KB-56KB
x 56KB-60KB
x 60KB-64KB
0 1 2 3 4 5 6 7
0KB-4KB 4KB-8KB 8KB-12KB 12KB-16KB 16KB-20KB 20KB-24KB 24KB-28KB 28KB-32KB
• 64KB(?bitのアドレス)のプログ ラムを実行可能
– 64KBのうち32KBが実メモリに入る.
– 64KBの全てがHDD
(などの二次記憶装置)に入る.
プログラム
MOV REG, 0
↓MMU
実メモリアクセス
8192
2 0KB-4KB
1 4KB-8KB
6 8KB-12KB
0 12KB-16KB
4 16KB-20KB
3 20KB-24KB
x 24KB-28KB
x 28KB-32KB
x 32KB-36KB
5 36KB-40KB
x 40KB-44KB
7 44KB-48KB
x 48KB-52KB
x 52KB-56KB
x 56KB-60KB
x 60KB-64KB
0 1 2 3 4 5 6 7
0KB-4KB 4KB-8KB 8KB-12KB 12KB-16KB 16KB-20KB 20KB-24KB 24KB-28KB 28KB-32KB
• MOV REG,4096 → 4096
• MOV REG,8192 → 24576
• MOV REG,20500→ ????
• MOV REG,25000→PageFault
ヒント
20500 = 20K + 20
仮想記憶-17
Page Fault
• 全ての仮想ページが物理メモリにマップされて いる分けではない.
–
実メモリ内に存在→アドレス変換して対応–
実メモリ内に存在しない→Page Fault• 実メモリに入っていないメモリへのアクセスが来 たら,Page Fault.
仮想記憶-18
Page Fault , Page in , Page out
• 実メモリに入っていないメモリへのアクセスが来 たら,Page Fault.具体的には,
– Page Fault割り込みが発生.
– OSは「あまり使われていないページフレーム」を選
択し,それを二次記憶に書き出す(Page out).–
当該ページを,空いたページフレームに読み込む(Page in).
–
ページテーブル(
アドレス変換テーブル)
を更新–
割り込みを起こした命令を再度実行仮想記憶-19 2
0KB-4KB 6 8KB-12KB
0 12KB-16KB
4 16KB-20KB
3 20KB-24KB
x 24KB-28KB
x 28KB-32KB 32KB-36KB
5 36KB-40KB
x 40KB-44KB
7 44KB-48KB
x 48KB-52KB
x 52KB-56KB
x 56KB-60KB
x 60KB-64KB
0 2 3 4 5 6 7
0KB-4KB 8KB-12KB 12KB-16KB 16KB-20KB 20KB-24KB 24KB-28KB 28KB-32KB
• MOV REG,32780→PageFault
• PageOut対象PageFrame決定 – Page5/PageFrame3とする
• Page8 を PageFrame3 に読込む
x
1
4KB-8KB 1 4KB-8KB
仮想記憶-20 2
0KB-4KB 6 8KB-12KB
0 12KB-16KB
4 16KB-20KB
3→×
20KB-24KB x 24KB-28KB
x 28KB-32KB 32KB-36KB
5 36KB-40KB
x 40KB-44KB
7 44KB-48KB
x 48KB-52KB
x 52KB-56KB
x 56KB-60KB
x 60KB-64KB
0 2 4 5 6 7
0KB-4KB 8KB-12KB 12KB-16KB 16KB-20KB 20KB-24KB 24KB-28KB 28KB-32KB
• PageTable の更新 – Page5
は対応なし– Page8はPageFrame3に対応
• 再度,命令実行
– MOV REG,32780→12300
1
4KB-8KB 1 4KB-8KB
x→3
3
仮想記憶-21
ページサイズ
• 後述の理由で,必ず2の冪乗.
• 512B~1MB.4KBが一般的.
仮想記憶-22
MMUでのアドレス変換
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 010 1
0 001 1 1
110 1 2
000 1 3
100 1 4
011 1 5
000 0 6
000 0 7
1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 000 0
15
MMU
への入力MMU
からの出力有効 無効
12bit (0~4095→4KB) 4bit
そのまま使用 変換
Page Table
仮想記憶-23
MMU でのアドレス変換
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
MMUへの入力 MMUからの出力
12bit (0~4095→4KB) 4bit
仮想ページ番号 ページ内オフセット 010 1
0 001 1 1
110 1 2
000 1 3
100 1 4
実ページ フレーム番号
ページ内オフセット
仮想ページ番号が 変換表のindexになる
仮想記憶-24
ページサイズは 2 n であるべき
• 10進数にて,
1000[bytes/page]×1009[pages]の場合 仮想アドレス:123456 仮想ページ:123 ページ内: 456
↓
実ページフレーム:28 ページ内:456
実アドレス:28456
仮想ページ 番号
実ページフレーム 番号
0 23
1 35
2 38
3 01
4 74
123 28
1007 64
仮想記憶-25
ページサイズは 2 n であるべき
• 10進数にて,
1009[bytes/page]×1000[pages]の場合
仮想アドレス:123456仮想ページ:122
ページ内:358
↓
実ページフレーム:27
ページ内:
358
実アドレス:27601仮想ページ 番号
実ページフレーム 番号
0 23
1 35
2 38
3 01
4 74
122 27
1007 64
123456÷1009
=122・・・358 を計算する
27×1009+358
=27601 を計算する
仮想記憶-26
置き換え技法
• Page Fault率の低いものが好ましい.
• OPT, NRU, FIFO ,second-chance, クロック 法, LRU
仮想記憶-27
Optimal ( 最適 ) アルゴリズム
• 「次にアクセスされるまでの時間」が最も長いも のを Page out させる.
• 最適(最低のPageFault率)だが,非現実的 –
未来のメモリアクセスが分かる必要がある• 他のアルゴリズムとの性能比較に用いられる.
仮想記憶-28
NRU (Not Recently Used)
• 全ページに,参照bit,更新bitを設ける.
• 定期的クロック割り込みで参照bitを0にする.
–
更新フラグはクロック割り込みでは0にしない.これは,
page out
時の書込みの要不要を表すclass 0:参照,更新なし class 1:参照無し,更新あり class 2:参照あり,更新なし class 3:
参照,
更新あり• 最も若いクラスのページを置換対象とする.
注意:class3がクロック割込で クリアさせるとclass1になる.
(更新bitはクリアされない)
仮想記憶-29
FIFO (First-In First-Out)
• 最初に実メモリに入った最も古いPageがPage out対象.
• 実装が容易で負荷が低いが,性能が低く,その ままの形で使われることは稀である.
仮想記憶-30
second-chance
• FIFOを改変したアルゴリズム.
–
前クロックインターバルに参照されていない最古ページをPage outする.
• FIFOで置換対象となった最古のページの参照bitを確
認–
参照なし→
そのままpage out –
参照あり → 参照ビットを「なし」にしてリストの最後尾
(page in
直後の状態)
に移動.再度,リストを調査.
•
全てが「参照あり」なら,FIFOと同様となる.クロックベース , FINUFO
• First In Not Used First Out
• second chanceは合理的だが,
ページをリスト上で移動させる負荷が 高い.
• Page Fault時は,
ポインタページを調査
–
参照無し→Page out
–
参照あり→「参照無し」に変更し進める.•
実装が容易. IBM VM/370,
日立OS7
などLRU (Least Recently Used)
• 「最後に参照されてからの時間」が最も長い物 をpage out
–
最も「参照されていない時間」が長いもの–
最もよく採用されるアルゴリズムだが,「完全なLRU」は実装が難しく簡易版が使用される ことが多い.
–
ループしたシーケンシャルアクセスで破綻する仮想記憶-33
ランダム
• ループしたシーケンシャルアクセスなどでも一定 の効果を生む.
–
ループアクセスなどによる著しいLRUの性能劣化を 検出すると,LRU
からランダムに切替えるなど仮想記憶-34
NFU (Not Frequently Used)
• 不完全なLRU的位置づけ
• 全ページフレームにソフトウェアカウンタを用意.
• クロック割り込みのたびに全ページフレームの R ビットの値を調査し,カウンタに加算.
–
参照されていると,カウンタが増える.• カウンタの値が最小のページが置換対象.
• 欠点:昔のデータが消えない.かつて頻繁に使 用したが,最近使用しないページが残る.
仮想記憶-35
aging
• NFUを改善し,LRUに類似手法を実現可能
• カウンタを加算する前にビットシフト
• LRUとの違いは,
A)
カウンタの最上位が同一だったときに区別が付か ない(
区別が付かないと,LRU
とは言えない) B)
有限回数のビットシフト(クロック割り込み)で情報が全て消える.
仮想記憶-36
aging
引用:オペレーティングシステム(a) 設計と実装第3版.アンドリューー・S・タネンバウム P. 429 01111000
10001000
01011000 00101000 10110000
00100000 ページ0-5の
Rビット,
クロック単位4 0 1 1 0 0 0
11110000
00100000
10110000 01010000 01100000
01000000 ページ0-5の
Rビット,
クロック単位3 1 0 0 0 1 0
11100000
00100000
01100000 10100000 11000000
10000000 ページ0-5の
Rビット,
クロック単位2 1 1 0 1 0 1
11000000
01000000
11000000 01000000 10000000
00000000 ページ0-5の
Rビット,
クロック単位1 1 1 0 0 1 0
10000000
10000000
10000000 10000000 00000000
00000000 ページ0-5の
Rビット,
クロック単位0 1 0 1 0 1 1
(b) (c) (d) (e)
Time
仮想記憶-37
動作例
• ページフレーム数が3
参照順が 0,1,2,3,0,1,4,0,1,2,3,4
のときの FIFO , LRU , OPT の動作は?
仮想記憶-38
Page Frame数 と Page Fault数
• ページフレーム数が多い(実メモリ容量が大き い)と,ページフォルト回数は減少する?性能が 向上する?
–
おおむね Yes仮想記憶-39
Page Frame 数 と Page Fault 数
• ページフレーム数が1~6,
参照順が 0,1,2,3,0,1,4,0,1,2,3,4 のときの,
FIFO動作を考える.
仮想記憶-40
Page Frame 数 と Page Fault 数
0 2 4 6 8 10 12 14
0 1 2 3 4 5 6 7
Num. of Page Frames
Num. of Page Faults
仮想記憶-41
Page Frame 数 と Page Fault 数
• ページフレーム数が3,4
参照順が 0,1,2,3,0,1,4,0,1,2,3,4 のときの,
FIFO動作は?
仮想記憶-45
Page Frame 数 と Page Fault 数
• Belady’s anomaly
–
置換えアルゴリズムによっては,ページフレーム数 が増加するとページフォルト数が増加する.– OPT, LRU
などはBelady’s anomaly
が発生しない.仮想記憶-46
良いページング
• 以下を紹介
–
ワーキングセットモデルDenning, 1968
–
割付のローカル,グローバルポリシー–
適切なページサイズ仮想記憶-47
working set model
• working set
–
プロセスが各時点で頻繁に参照するページ群• working set は可能な限り主記憶上に維持 –
各プロセスのワーキングセットを把握し,プロセス実行前にメモリ上にワーキングセットを乗せる.
• もし,working set が主記憶に乗り切らないと,
頻繁にページフォルト&置換が発生し計算機性 能が著しく低下.スラッシング
仮想記憶-48
working set model
• ほとんどプロセスはアドレス空間を一様には参 照しない.
• 時刻 t における直前の k 回のメモリ参照で参照 されたページの集合 w( k , t ) がワーキングセッ ト
k w ( k , t )
ここ ま では
, メモ リに 乗 せ た い?
ここ ま では
, メモ リに 乗 せ た い?
仮想記憶-49
working set model
• プログラムの再スタート時に,
最後に停止した際のワーキングセットを基に,ど のページが必要になるかを予測
→プリページング
working set model
• ワーキングセットモデルを実現するには,OSは ワーキングセット内のページを管理する必要が ある.
–
管理方法例1:aging
アルゴリズムを使用.
上位nビット内に1があればワーキングセット内.n
は経験的に決定する.ただし,性能はn
の変化に敏 感でない.(nを変えてもWSは大差なし)–
本手法はwsclock
と呼ばれる.スラッシング thrashing
• ページフォルトが頻繁に発生し,計算機の性能 が著しく低下している状態.
–
ワーキングセットサイズより主記憶サイズが小さいと,メモリ参照のたびにページフォルトが発生.
–
ページアウトしたページが,すぐにページイン.–
計算機能力のほぼ全てがページ置換処理に消費さ れてしまう.仮想記憶-52
良いページングの歴史
• 歴史的にはLRU と working set model (1968
~) が成功
• 近年は
–
一次記憶容量が増大–
参照の局所性の低下(
オブジェクト指向プログラムなど)
– GC (ゴミ集め)
起動で参照パターンが著しく変化仮想記憶-53
ページテーブル
• 仮想ページ番号を実ページフレーム番号に変 換する表.
• 重要な課題
(1) ページテーブルは極端に大きくなり得る (2) 変換は高速でなくてはならない
仮想記憶-54
ページテーブルサイズ
• 32bit仮想アドレス,ページサイズ4KB
→ ページエントリ数は?
• 64bit仮想アドレス,ページサイズ4KB
→ ページエントリ数は?
• 各ページテーブルは??行あり,
その表を各プロセスが持つ.膨大なメモリ.
–
各プロセスが独立したアドレス空間を持つので.仮想記憶-56
ページ変換速度
• 1024 MIPS=1GIPS の例 –
1命令1ナノ秒.–
命令に1個以上のオペランドが付随していれば,そ の分だけ変換が必要.–
変換は250ピコ秒未満が妥当?–
オペランドとは? ピコとは? ナノとな?仮想記憶-58
ページテーブルの管理 1?
• 高速なレジスタ上にページテーブルを1個持 つ?
–
プロセスディスパッチの際に, (主記憶上にある)そのプロ セス用のページテーブルをレジスタに読込む.–
きわめて高速でわかりやすい.が,高価.–
プロセス切り替えの際にページテーブル全てを読み 込むのは,コストが大きい.仮想記憶-59
ページテーブルの管理 2?
• 全てのページテーブルを主記憶上に持つ?
–
アドレス変換の度に,主記憶にアクセスが必要.• これらをそのまま実装することは希
–
「高速なレジスタ上にページテーブルを1個持つ?」「全てのページテーブルを主記憶上に持つ?」
仮想記憶-60
• 32bitのアドレスを20,12ビットに分割.
–
ページサイズは何バイト?–
全メモリ空間は何バイト?–
ページ数は?非階層化ページテーブル
仮想記憶-62
非階層化ページテーブル
• 工夫のない実装方法 –
約100万行の表– 1行8 [Bytes]なら
表は8[MB]
•
実は,
たいしたことない?0 1 2 3 4 5 6 1048573 1048574 1048575
仮想記憶-63
• 32bitのアドレスを10,10,12ビットに分割.
–
ページサイズは何バイト?–
第1段テーブル(上位10bit)1行は,何バイト?–
全メモリ空間は何バイト?多階層ページテーブル
仮想記憶-65
多階層ページテーブル
• 4GBのメモリ空間のうち,下記の12MBを使用 するプログラムを想定する.
– アドレス0~ の4MB – アドレス 4MB ~ の 4MB – アドレス~4GB の4MB (合計12MB)
0MB~4MB 4MB~8MB 8MB~12MB
未使用
1048575
12MB~16MB
仮想記憶-66
多階層 ページテーブル
0 1 2 3 4 1023
0 1 1023 0 1 1023 0 1 1023
第2段 ページテーブル
第1段 ページテーブル
仮想記憶-67
多階層ページテーブル
• 実際に使用しているページテーブルは,
1024行が4個のみ.すなわち4096行のみ.
•
第1段ページテーブル1行につき何バイト?•
第2段ページテーブル1行につき何バイト?仮想記憶-69
多階層ページテーブル
• 仮想アドレス0x00403004=4,206,596 (10)にア クセスする場合
PT1 = ? (10bits) PT2 = ? (10bits) offset = ? (12bits)
0 0 4 0 3 0 0 4
PT1 PT2 offset
仮想記憶-71
多階層 ページテーブル
0 1 2 3 4 1023
第2段 ページテーブル
第1段 ページテーブル
2 3 1023
0 1 4
実メモリ Page Frame
(4KB)
2 3
0 1 4 5 4095
PT1 = 1,PT2 = 3,offset = 4
• 仮想アドレス0x00803004にアクセスする場合 PT1 = 2 , PT2 = 3 , offset = 4
Page
Fault
↓
アクセス
例外(など)
0 1 2 3 4 1023
第2段 ページテーブル 第1段
ページテーブル
多階層ページテーブル
Page Fault
ページテーブルエントリ
• ページテーブルの各行は
多くの場合以下の情報 を持つ
–
キャッシュ禁止フラグ,参照フラグ,更新フラグ(ダー ティービット)
–
保護フラグ• 1bitの例:アクセスが可/不可
• 3bitの例:読み込み,書き込み,実行,が可/不可
–
在/不在フラグ–
ページフレーム番号– 2次記憶アドレス
仮想記憶-74
TLB
• TLB (Translation Lookaside Buffer)
• (通常)MMUの中にあり,
変換表をキャッシュする.
• 典型的なTLB
– 8行~4096行.64行以上は希.
– hit
時のアクセスタイム:1 CPU clock
.– Missペナルティ:10~30 CPU clock.
–
ミス率:??(
不明だが…)
仮想記憶-75
TLB の例
有効
1 1 1 1 1 1 1 1
仮想ページ
番号 更新 保護属性 実ページ フレーム番号 140
20 130 129 19 21 860 861
1 0 1 1 0 0 1 1
RW- R-X RW- RW- R-X R-X RW- RW-
31 38 29 62 50 45 14 75
•例
–
プログラム19,20,21 –
データ129,130,140 –
スタック860,861
仮想記憶-76
TLB の動作
1. プログラムが仮想アドレス x にアクセス 2. MMUが「x →実アドレス」変換を依頼される 3. 仮想ページ番号がTLB内にあるか調査 4. TLB内に存在し,アクセス許可の場合
→ (ページテーブルを参照せず) TLB 内で解決
存在するが,保護違反の場合
→ 保護例外発生
仮想記憶-77
TLB の動作
4. 存在しない場合
→ 実メモリ上の通常のページテーブルを用い て仮想アドレスを実アドレスに変換.
つまり...
ページテーブルから当該レコードの行を読み込む.
TLBから1行追い出して,その行をTLBに入れる.
追い出された行はメモリに書き出される.
書き出される情報は「更新ビット」のみ.他は変化なし.
TLBミス時の対処は誰がやるか?→後述.
仮想記憶-78
TLBからの検索
• 仮想ページ番号がTLB内にあるか調査
つまり...– CAM
に対して「仮想ページ番号」の検索を行う.•
全メモリに対して同時並列に検索が行われる.仮想記憶-79
CAM 連想メモリ
• TLBは通常,CAM
• RAM
–
ユーザが「アドレス」を指定し,メモリより「そのアドレ スにあるデータ」が得られる.• CAM (Content Addressable Memory)
–
検索機能付きメモリ.ユーザが「データ」を指定し,メ モリより「そのデータが格納されているアドレス」が得 られる.仮想記憶-80
TLB ミス時の処理
実装依存.昔は(A),最近は(B)
A) ハードウェア (MMU) が行う. MMU がページ テーブルを調査して必要な情報を取り出す.
OS(ソフト)にはTLBミスは通知されない.
B) ソフトウェア(OS)が行う.TLBミスで例外が発 生し, OS がページテーブルを引いて解決し,
TLBに追加し,命令を再実行.
MMUが単純になり,CPUキャッシュ
などを増やせる仮想記憶-81
Inverted Page Table 逆ページテーブル
• 64bitCPUではページテーブルサイズが膨大 – 2^64のアドレス空間がある.
– 4KBのページが2^52個.約4500兆行の表.
– 1行8バイトとして,??Bの表!?!
• 逆ページテーブル
–
「実記憶ページフレーム→仮想記憶ページ」の変換 テーブルを持つ.– 16GB実メモリ,4KBページ→??行の表
仮想記憶-83
Inverted Page Table 逆ページテーブル
• 仮想アドレス空間>>実アドレス空間 の場合に 有効.
• 性能は(順方向の)ページテーブルと比較して著 しく劣る.
–
仮想ページ番号与えられても,「仮想ページ番号」を 索引として表を引けない.表を捜査する.– TLBに期待.TLBミス時はhashなど.
– IBM, Sun, HP のワークステーションにて使用.
仮想記憶-84
最適ページサイズ
• s :プロセスの平均サイズ
• e :ぺーテーブルエントリ
• s = 1MB, e = 8Bの例において,最適ページサ
イズは4KB
• 証明省略
–
最適とは,ページテーブルサイズと,内部フラグメン テーションの合計が最小の意味.se 2
仮想記憶-85 Aの情報
(?の表) Bの情報 (?の リスト)
Cの情報
Dの情報
Segmentation
• Pagingにより膨大なメモリを 仮想的に使用可能になったが,
理論上の衝突は起きる.
• Cの情報に割付けられた 空間があふれたら困る
–
プログラマがごみ集め,動的再配置などの
(きわめて面倒な)
作業行う?仮想アドレス空間 空き領域 Cの情報 によって 使用中 Cの情報の
ために 割付けられた アドレス空間
仮想記憶-86 Aの情報
(?の表)
Bの情報 (?の リスト)
Cの情報
Dの情報
Segmentation
• 独立したアドレス空間を複数用意する.アドレ スが2次元になった.
–
アドレスは( セグメント番号 , 内部アドレス)–
各セグメントは0番地~最大許容番地までのアドレスを持てる.
–
各セグメントサイズは有限だが,(通常は)あふれ ることはない.Segment 0 Segment 1 Segment 2 Segment 3
仮想記憶-87
paging,segmentation
• paginの利点
–
固定長のpage単位なので,管理や実装が容易–
外部フラグメンテーションが発生しない–
実記憶より大きなプロセスも(swappingしながら)実 行可能.• segmentation の利点
–
内部フラグメンテーションは発生しない–
論理的意味を持つセグメント単位で管理するため,参照局所性などが(実アドレスでも)失われない.
仮想記憶-88
paging,segmentation
• この技術が利用されていることをプログラマが 認識する必要があるか?
– Paging No
– Segmentation Yes
• いくつのリニアアドレス空間が存在するか?
– Paging 1
– Segmentation
複数paging , segmentation
• 全アドレス空間が物理メモリ容量を超えることが できるか?
– Paging Yes
– Segmentation Yes
• 手続きとデータは区別されて別々に保護される か?
– Paging No
– Segmentation Yes (segmentごとに管理可能)
paging , segmentation
• サイズが変動するテーブルを柔軟に対応し格納 できるか?
– Paging No
– Segmentation Yes
• この技術が発明された理由
– Paging
より大きな物理メモリを購入することなく巨大なリニアアドレスを得るため.
– Segmentation
プログラムとデータの各々に独 立のアドレスを与え,それらを共有と保護仮想記憶-91
Segmentation の実現
• Segmentationは可変長.以下を参照
– (a)~(d) チェッカーボーディング
(外部フラグメンテーション)の進行– (e) コンパクションによるチェッカーボーディングの除去
(3KB) (3KB)
(3KB) (3KB)
(4KB)
(10KB)
(3KB) seg.4 (7KB)
seg.3 (8KB) seg. 2 (5KB) seg. 1 (8KB) seg. 0 (4KB)
seg.4 (7KB)
seg.3 (8KB) seg. 2 (5KB)
seg. 7 (5KB)
seg.3 (8KB) seg. 2 (5KB)
seg. 7 (5KB) seg.5 (4KB)
seg.6 (4KB) seg. 2 (5KB)
seg. 7 (5KB) seg.5 (4KB)
seg.6 (4KB) seg. 2 (5KB) seg. 7 (5KB) seg.5 (4KB)
seg. 0 (4KB) seg. 0 (4KB) seg. 0 (4KB) seg. 0 (4KB)
(a) (b) (c) (d) (e)
仮想記憶-92
余談 MMU の実装
• MMUがCPUとは独立したIC
–
初期のプロセッサ.MC68000, Z80
など• CPUがMMUを内蔵 – MC68030, Z280など
• 近年のMMUのほとんどがPaging – x86はSegmentもサポート
仮想記憶-93
ページ割付のローカルポリシー,
グローバルポリシー
• ローカルページ置換アルゴリズム
–
ページフォルト時の置換対象を,自プロセスのため に割与えられているページフレームから探す• グローバルページ置換アルゴリズム
–
ページフォルト時の置換対象を,全ページフレーム から探す仮想記憶-94
ページ割付のローカルポリシー,
グローバルポリシー
• グローバルページ置換
–
短所:ページフォルト率を自プロセスで制御できない–
長所:ワーキングセットサイズの時間変化に対応できる.
–
どうやって,適切な「各プロセスに割り与えるページ フレーム数」を決定するのか?• →次のスライドへ
仮想記憶-95
PFF (Page Fault Frequency)
• ページフォルト率の測定
–
毎秒のフォルト数を数える,累積平均などを算出.– 1
秒あたりのページフォルト数が多いプロセス →ページフレームを増やす.
少ないプロセス
→
ページフレーム減少の対象.–
全てのプロセスのPageFault/秒が閾値以上ならプロセスをメモリから追い出し,メモリを他のプロセ
スに与える.
仮想記憶-96
記憶保護 memory protection
• 通常,OSとハードウェア(CPU内のMMU)が協 力してメモリ保護を実現.
仮想記憶-97
記憶保護 memory protection
• Pagingでは,MMUが仮想アドレス→実アドレス 変換とともにアクセスの可否を判断.
–
不正なアクセスと判断 → 例外発生仮想記憶-98
記憶保護 memory protection (再掲載)
• OS/360 では,
–
メモリを2KB単位に分割し,それぞれに4bitの保護 コードを付加.– PSW (Program Status Word)
にも4bitのキーを付加.–
保護コードの一致しないメモリアクセスが発行される とエラー(割り込み発生)–
メモリの保護コード,PSWのキーはOSのみが変更 可能.– OSやユーザプログラムを不正アクセスか保護
仮想記憶-99
フェッチ技法
• 要求時ページング demand paging
–
必要になったときにページを主記憶に読み込む• プリページング prepaging
–
プロセスに参照される前に,前もってページを主記 憶に読み込んでおく仮想記憶-100
要求時ページング
• 利点
–
プログラムの実行経路の予測(
アクセスされるペー ジの予測)は困難.•
プリページングでは不要なページを読込危険性有り.要 求時ページングではない.–
読み込むページの決定処理の負荷が最小.• 欠点
–
ページ読込待ち時間の間は,読み込み済みページ は使用不可と同様の状態になる.仮想記憶-101
プリページング
• プロセスが必要とするページを予測し,それらを 主記憶に読み出しておく方法.
–
予測の多くが正しいならプロセス実行時間は短縮さ れる.(全てが正解でなくても良い)–
予測負荷が低ければ,他のアプリケーションへの影 響が小さい.–
主記憶(DRAM)の低価格化と大容量化に伴い,余 分なページの読み出しの弊害が小さく.