メモリ管理 4.3, 4.4 章
DESCRIPTION
メモリ管理 4.3, 4.4 章. さだ. 4.3 仮想メモリ. プログラムが大きすぎてメモリに入りきらない問題 オーバレイ:初期の解決策 プログラムを分割してメモリに格納する プログラムのスワップイン・アウトは OS がやってくれる プログラムの分割はプログラマの仕事 →大変! 仮想メモリ:現代の解決策 プログラムコード,データ,スタックからなるプログラム全体が物理メモリサイズを越えても OK. 4.3.1 ページング. 仮想アドレス 例: MOVE REG, 1000 この 1000 というのが仮想アドレス 仮想アドレスは仮想アドレス空間を持つ - PowerPoint PPT PresentationTRANSCRIPT
メモリ管理4.3, 4.4 章
さだ
4.3 仮想メモリ
• プログラムが大きすぎてメモリに入りきらない問題
• オーバレイ:初期の解決策– プログラムを分割してメモリに格納する– プログラムのスワップイン・アウトは OS がやってくれ
る– プログラムの分割はプログラマの仕事– → 大変!
• 仮想メモリ:現代の解決策– プログラムコード,データ,スタックからなるプログラ
ム全体が物理メモリサイズを越えても OK
4.3.1 ページング• 仮想アドレス
– 例: MOVE REG, 1000– この 1000 というのが仮想アドレス– 仮想アドレスは仮想アドレス空間を持つ– 仮想アドレスは MMU (Memory Management Unit)
で物理メモリアドレスへ変換される• 現代の MMU はたいてい CPU に内蔵されています
• ページ– 仮想アドレス空間を区切る単位
• ページフレーム– 物理メモリ内の対応する部分
• マッピング– 図 4-10 を参照– 例:仮想アドレス 8192→ ページフレーム 6
• 1 ビットの存在 / 不在ビット– 例:仮想アドレス 32780→ ない!– CPU は OS へトラップ(ページフォールト)
• MMU の動作例– 仮想アドレス 8196 :0010,0000,000,0100
– ページテーブル 2 を参照ページテーブル オフセット
4.3.2 ページテーブル
• 実現のための問題点– ページテーブルサイズが巨大になってしまう– マッピングは高速でなければならない
• 例– 仮想アドレス 32bit ,ページサイズ 4KB だと
• 仮想ページ数=ページテーブルエントリ数は 100万
• しかもページテーブルはプロセスごとに必要
• マルチレベルページテーブル– 例えば, 10,10,12 と区切る– この場合,最大ページテー
ブル数は 1025 になるが,実際はもっと少なくて済む
• 図 4-12 の例だと 4 つ
• ページテーブルエントリの構造– キャッシング不可:主にデバイスレジスタ用– 参照ビット:ページ置き換えアルゴリズムに使われる– 修正ビット:ページに書き込みがあるとセットされる,
古いページフレームを読まない用– 保護ビット:許可するアクセスの種類– 存在・不在ビット– ページフレーム番号
4.3.3 TLB
• ページングによる性能低下という問題• 実は,多くのアクセスはある一部分のページ群へのア
クセスである• TLB (Translation Lookaside Buffer)
– ページテーブルの一部分を変換するハードウェア– TLB になかったら MMU にアクセス– MMU は TLB にないことを前提に処理できる
4.3.4 逆引きページテーブル
• エントリ数が巨大– 例:アドレス空間 4GB で,ページサイズが 4096 倍
とだとエントリ数は 100 万→ページテーブル当たり 4MB 必要
• 逆引きページテーブル– ページフレーム 1 つにつき 1 つのエントリを持つ
• 例:物理メモリ 256MB でページサイズが 4KB であればエントリ数は 65536 で良い
– 問題• 仮想アドレスから物理アドレスへの変換が大変
– 解決策• TLB を用いる• ハッシュテーブルを用いて検索を高速化する
4.4 ページ置き換えアルゴリズム
• ページフォールトが発生した場合に,どのページを追い出すか– 頻繁にアクセスするページを追い出すと性能
が落ちる– あまり使わないページを追い出せば性能が上
がる
4.4.1 最適ページ置き換えアルゴリズム
• 最も理想的なアルゴリズム– 最大のラベルを持ったページを追い出す– 将来生じるページフォールトをなるべく遠い
将来においやる• しかし,実現不可能
– OS は次に参照されるページを予測できないから
4.4.2 NRU アルゴリズム• ページテーブルの参照・修正ビットを用いる• 4 つのカテゴリに分類
– クラス0:参照も修正もされていない– クラス1:参照されていないが,修正されている– クラス2:参照されたが,修正されていない– クラス3:参照も修正もされた
• NRU (Not Recently Used) algorithm は空ではない最下位のクラスからランダムにページを消す
• 最適ではないが,容易な実装と十分な性能という特徴を持つ
4.4.3 先入れ先出しページ置き換えアルゴリズム
• いわゆる FIFO (First Input First Output)
• 古いページを優先的に消す• しかし,古いページ=使われないページ
ではない!• というわけで,このまま使われることは
ない
4.4.4 セカンドチャンス置き換えアルゴリズム
• FIFO の改良版• ページを時系列に並べる• ページフォールトが起きたら古いページから参
照– もし参照ビットがセットされていれば,参照ビット
をクリアして一番新しいページとして扱う– もし参照ビットがなければ消す
4.4.5 クロックページ置き換えアルゴリズム
• セカンドチャンス置き換えアルゴリズムの改良– ページをリスト上でせわしなく移動させてい
るため効率的でない– 環状リストにする– 実現方法が違うだけで本質的には同じ
4.4.6 LRU ページ置き換えアルゴリズム
• LRU (Least Recently Use page)– 最近使われたページはまたすぐに
使われるだろう,という戦略– 実現可能であるがコストは小さく
ない– 実現手法はいくつかある– 例:図 4-18
• ページテーブル数 n とすると,n×n の行列を用意
• ページフレーム k が参照されると– 行 k を全て 1 に設定– 列 k を全て 0 に設定
• ページフォールトの場合– 行を 2進法事とみなして値が最小のもの=最も過去に参照されたページを探して消す
4.4.7 LRU のソフトウェアによるシミュレーション
• LRU をソフトウェアで実現するのは無理• ソフトウェアで実現する方法として NFU (Not Frequently
Used) アルゴリズム– クロック割り込みごとに,ページごとに参照ビットの内容をカウ
ントする– ページフォールト時はそのカウンタが最小のものを消す– 欠点は初期化しないこと
• 実は NFU で LRU をシミュレートできる(エージング)– 修正点は 2 つ
• カウンタに加算する前にカウンタを 1 ビット右へシフト• 参照ビットをカウンタ内の最左端に加算する
– 厳密な違いも 2 つ• 最後にアクセスされたのが分からない(例:図 4-19 (e) の 3,5 )• カウンタのビット数は有限であること
4.4.8 ワーキングセットページ置き換えアルゴリズム• ワーキングセット
– プロセスが現在使用中のページのセット
• ワーキングセットモデル– 各プロセスのワーキングセッ
トを記録し,プロセス実行前にメモリに持ってくるモデル
– 多くのプログラムは一部分のページにしかアクセスしない→単調非減少関数になる
– K の値を予め決めておくと,ワーキングセットが一意に決まる
k :メモリ参照
w(k, t)
• アルゴリズムの近似– k回のメモリ参照の代わりに実行時間を用い
る– カレント仮想時間
• プロセスが開始後に実際に使用した CPU 時間
–年齢• カレント仮想時間ー最後に使用された時間
4.4.9 WSClock ページ置き換えアルゴリズム
• ワーキングセットアルゴリズムを改善したもの– Working Set Clock アルゴリズム– クロックページ置き換えアルゴリズムとワー
キングセットアルゴリズムを足したようなもの
– 図 4-22 を参照
4.4.10 ページ置き換えアルゴリズムのまとめ
• 図 4-23 を参照• いい感じなのは
– エージング– WSClock