メモリ管理 4.3, 4.4 章

21
メメメメメ 4.3, 4.4 メ メメ

Upload: dory

Post on 01-Feb-2016

72 views

Category:

Documents


0 download

DESCRIPTION

メモリ管理 4.3, 4.4 章. さだ. 4.3 仮想メモリ. プログラムが大きすぎてメモリに入りきらない問題 オーバレイ:初期の解決策 プログラムを分割してメモリに格納する プログラムのスワップイン・アウトは OS がやってくれる プログラムの分割はプログラマの仕事 →大変! 仮想メモリ:現代の解決策 プログラムコード,データ,スタックからなるプログラム全体が物理メモリサイズを越えても OK. 4.3.1 ページング. 仮想アドレス 例: MOVE REG, 1000 この 1000 というのが仮想アドレス 仮想アドレスは仮想アドレス空間を持つ - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: メモリ管理 4.3, 4.4  章

メモリ管理4.3, 4.4 章

さだ

Page 2: メモリ管理 4.3, 4.4  章

4.3 仮想メモリ

• プログラムが大きすぎてメモリに入りきらない問題

• オーバレイ:初期の解決策– プログラムを分割してメモリに格納する– プログラムのスワップイン・アウトは OS がやってくれ

る– プログラムの分割はプログラマの仕事– → 大変!

• 仮想メモリ:現代の解決策– プログラムコード,データ,スタックからなるプログラ

ム全体が物理メモリサイズを越えても OK

Page 3: メモリ管理 4.3, 4.4  章

4.3.1 ページング• 仮想アドレス

– 例: MOVE REG, 1000– この 1000 というのが仮想アドレス– 仮想アドレスは仮想アドレス空間を持つ– 仮想アドレスは MMU (Memory Management Unit)

で物理メモリアドレスへ変換される• 現代の MMU はたいてい CPU に内蔵されています

• ページ– 仮想アドレス空間を区切る単位

• ページフレーム– 物理メモリ内の対応する部分

Page 4: メモリ管理 4.3, 4.4  章

• マッピング– 図 4-10 を参照– 例:仮想アドレス 8192→ ページフレーム 6

• 1 ビットの存在 / 不在ビット– 例:仮想アドレス 32780→ ない!– CPU は OS へトラップ(ページフォールト)

• MMU の動作例– 仮想アドレス 8196 :0010,0000,000,0100

– ページテーブル 2 を参照ページテーブル オフセット

Page 5: メモリ管理 4.3, 4.4  章

4.3.2 ページテーブル

• 実現のための問題点– ページテーブルサイズが巨大になってしまう– マッピングは高速でなければならない

• 例– 仮想アドレス 32bit ,ページサイズ 4KB だと

• 仮想ページ数=ページテーブルエントリ数は 100万

• しかもページテーブルはプロセスごとに必要

Page 6: メモリ管理 4.3, 4.4  章

• マルチレベルページテーブル– 例えば, 10,10,12 と区切る– この場合,最大ページテー

ブル数は 1025 になるが,実際はもっと少なくて済む

• 図 4-12 の例だと 4 つ

Page 7: メモリ管理 4.3, 4.4  章

• ページテーブルエントリの構造– キャッシング不可:主にデバイスレジスタ用– 参照ビット:ページ置き換えアルゴリズムに使われる– 修正ビット:ページに書き込みがあるとセットされる,

古いページフレームを読まない用– 保護ビット:許可するアクセスの種類– 存在・不在ビット– ページフレーム番号

Page 8: メモリ管理 4.3, 4.4  章

4.3.3 TLB

• ページングによる性能低下という問題• 実は,多くのアクセスはある一部分のページ群へのア

クセスである• TLB (Translation Lookaside Buffer)

– ページテーブルの一部分を変換するハードウェア– TLB になかったら MMU にアクセス– MMU は TLB にないことを前提に処理できる

Page 9: メモリ管理 4.3, 4.4  章

4.3.4 逆引きページテーブル

• エントリ数が巨大– 例:アドレス空間 4GB で,ページサイズが 4096 倍

とだとエントリ数は 100 万→ページテーブル当たり 4MB 必要

• 逆引きページテーブル– ページフレーム 1 つにつき 1 つのエントリを持つ

• 例:物理メモリ 256MB でページサイズが 4KB であればエントリ数は 65536 で良い

– 問題• 仮想アドレスから物理アドレスへの変換が大変

– 解決策• TLB を用いる• ハッシュテーブルを用いて検索を高速化する

Page 10: メモリ管理 4.3, 4.4  章

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

• ページフォールトが発生した場合に,どのページを追い出すか– 頻繁にアクセスするページを追い出すと性能

が落ちる– あまり使わないページを追い出せば性能が上

がる

Page 11: メモリ管理 4.3, 4.4  章

4.4.1 最適ページ置き換えアルゴリズム

• 最も理想的なアルゴリズム– 最大のラベルを持ったページを追い出す– 将来生じるページフォールトをなるべく遠い

将来においやる• しかし,実現不可能

– OS は次に参照されるページを予測できないから

Page 12: メモリ管理 4.3, 4.4  章

4.4.2 NRU アルゴリズム• ページテーブルの参照・修正ビットを用いる• 4 つのカテゴリに分類

– クラス0:参照も修正もされていない– クラス1:参照されていないが,修正されている– クラス2:参照されたが,修正されていない– クラス3:参照も修正もされた

• NRU (Not Recently Used) algorithm は空ではない最下位のクラスからランダムにページを消す

• 最適ではないが,容易な実装と十分な性能という特徴を持つ

Page 13: メモリ管理 4.3, 4.4  章

4.4.3 先入れ先出しページ置き換えアルゴリズム

• いわゆる FIFO (First Input First Output)

• 古いページを優先的に消す• しかし,古いページ=使われないページ

ではない!• というわけで,このまま使われることは

ない

Page 14: メモリ管理 4.3, 4.4  章

4.4.4 セカンドチャンス置き換えアルゴリズム

• FIFO の改良版• ページを時系列に並べる• ページフォールトが起きたら古いページから参

照– もし参照ビットがセットされていれば,参照ビット

をクリアして一番新しいページとして扱う– もし参照ビットがなければ消す

Page 15: メモリ管理 4.3, 4.4  章

4.4.5 クロックページ置き換えアルゴリズム

• セカンドチャンス置き換えアルゴリズムの改良– ページをリスト上でせわしなく移動させてい

るため効率的でない– 環状リストにする– 実現方法が違うだけで本質的には同じ

Page 16: メモリ管理 4.3, 4.4  章

4.4.6 LRU ページ置き換えアルゴリズム

• LRU (Least Recently Use page)– 最近使われたページはまたすぐに

使われるだろう,という戦略– 実現可能であるがコストは小さく

ない– 実現手法はいくつかある– 例:図 4-18

• ページテーブル数 n とすると,n×n の行列を用意

• ページフレーム k が参照されると– 行 k を全て 1 に設定– 列 k を全て 0 に設定

• ページフォールトの場合– 行を 2進法事とみなして値が最小のもの=最も過去に参照されたページを探して消す

Page 17: メモリ管理 4.3, 4.4  章

4.4.7 LRU のソフトウェアによるシミュレーション

• LRU をソフトウェアで実現するのは無理• ソフトウェアで実現する方法として NFU (Not Frequently

Used) アルゴリズム– クロック割り込みごとに,ページごとに参照ビットの内容をカウ

ントする– ページフォールト時はそのカウンタが最小のものを消す– 欠点は初期化しないこと

• 実は NFU で LRU をシミュレートできる(エージング)– 修正点は 2 つ

• カウンタに加算する前にカウンタを 1 ビット右へシフト• 参照ビットをカウンタ内の最左端に加算する

– 厳密な違いも 2 つ• 最後にアクセスされたのが分からない(例:図 4-19 (e) の 3,5 )• カウンタのビット数は有限であること

Page 18: メモリ管理 4.3, 4.4  章

4.4.8 ワーキングセットページ置き換えアルゴリズム• ワーキングセット

– プロセスが現在使用中のページのセット

• ワーキングセットモデル– 各プロセスのワーキングセッ

トを記録し,プロセス実行前にメモリに持ってくるモデル

– 多くのプログラムは一部分のページにしかアクセスしない→単調非減少関数になる

– K の値を予め決めておくと,ワーキングセットが一意に決まる

k :メモリ参照

w(k, t)

Page 19: メモリ管理 4.3, 4.4  章

• アルゴリズムの近似– k回のメモリ参照の代わりに実行時間を用い

る– カレント仮想時間

• プロセスが開始後に実際に使用した CPU 時間

–年齢• カレント仮想時間ー最後に使用された時間

Page 20: メモリ管理 4.3, 4.4  章

4.4.9 WSClock ページ置き換えアルゴリズム

• ワーキングセットアルゴリズムを改善したもの– Working Set Clock アルゴリズム– クロックページ置き換えアルゴリズムとワー

キングセットアルゴリズムを足したようなもの

– 図 4-22 を参照

Page 21: メモリ管理 4.3, 4.4  章

4.4.10 ページ置き換えアルゴリズムのまとめ

• 図 4-23 を参照• いい感じなのは

– エージング– WSClock