メモリ アーキテクチャ 3 仮想記憶 計算機アーキテクチャ ( 第 15 回目 ) 今井慈郎 (imai@eng.kagawa-u.ac.jp)
仮想記憶とは コンピュータ上に実装されている主記憶よりも大きな記憶領域を仮想的に提供する仕組み メモリ空間の一部をハードディスク装置等の大容量外部記憶にマッピングし実装したメモリ量以上のメモリ空間を利用できる環境をユーザに提供 実装したメモリ : 実記憶 見掛け上のメモリ : 仮想記憶 ( 仮想メモリ などの語源 )
実記憶と仮想記憶 仮想的に与えられたアドレス : 仮想アドレス (virtual address) または論理アドレス (logical address). 実記憶上で有効なアドレス : 物理アドレス (physical address) または実アドレス (real address). 仮想アドレスの範囲 : 仮想アドレス空間 物理アドレスの範囲 : 物理アドレス空間
仮想記憶の効果 仮想アドレス空間は, 動的アドレス変換機構 (DAT : Dynamic Address Translation) というハードウェアによって物理アドレスに変換 実際にこれを行うハードウェア (LSI):MMU (Memory Management Unit) プログラマは, 仮想アドレス空間上でプログラムを組むことになる. プログラムやデータが主記憶上に存在するのかどうかを意識する必要はない. 主記憶のメモリサイズなどの ( 物理的 ) 制約から解放
仮想記憶の状況 最近,OS が仮想記憶機能を提供 ( 一部のアプリは自前でも機能を提供する場合もある ). ハードウェア補助がなくとも仮想記憶実装は可能. しかし, 極めて煩雑な管理が必要で非実用的 DAT( 動的アドレス変換 ) 機能を有する MMU を持たない計算機上での実装は, 現在存在せず 仮想記憶の概念 :1957 年発表. マンチェスター大学が Atlas 用に 1961 年に開発したのが世界初 1965 年に MIT が開発した Multics 以降, 本格的に採用され始めた.
仮想記憶の実装 No1 仮想記憶は, 大きく分けて セグメント方式 ページング方式の二種類が存在. 例として,MC68000システム(16ビット, 内部 32ビットの著名マイクロプロセサ. 個人的にも大ファン :-) では,68451( セグメント方式 ) と,68851( ページング方式 ) という2 種類のMMUが準備されていた.
仮想記憶の実装 No2( セグメント方式 ) セグメント方式 : 仮想記憶を実現する方式の 1 つ. プログラムやデータをセグメントという 可変な 大きさのまとまりで管理 OS は, 必要なプログラムやデータを主記憶上に読み込み ( ロールイン ), セグメントを単位として管理 読み込む際に, 空き領域が足りないときは, 不要なセグメントを補助記憶装置に退避 ( ロールアウト ) して必要な空き領域を準備
仮想記憶の実装 No2( セグメント方式 ) 各セグメントは, セグメントテーブルで管理され, セグメント番号とセグメントの開始アドレスを保管 各セグメントに属するプログラムやデータの実アドレスは, セグメントテーブル内の開始アドレスとそこからの相対アドレスから算出 セグメントは, 実記憶上に連続した領域として割り当てられる. セグメントの大きさが可変長なため, 場合によっては, 実記憶上には空き領域の合計が十分あるのに連続領域が空いていないことがあるフラグメンテーション
仮想記憶の実装 No2( セグメント方式 ) セグメント方式のバリエーションとして, ページング方式と組み合わせたページ化セグメンテーションがある.
仮想記憶の実装 No3( ページング方式 ) ページング方式 : 仮想記憶を実現する方式の 1 つ. 物理メモリ空間と論理メモリ空間を一定サイズのページと呼ばれる単位に分割して管理 論理メモリ空間から物理メモリへの対応づけはページテーブルと呼ばれる構造体で実現 ( この構造体は OS が管理 ) 物理メモリに未対応の論理メモリ空間を参照した場合, ページフォルト という例外が発生 この時,OS 側の例外処理ルーチンに制御が移行
仮想記憶の実装 No3( ページング方式 ) OS 側の管理によって適宜対応したページを論理メモリ空間に対応する二次記憶等から実メモリ ( 物理メモリ ) に読み込み, ページテーブルを更新し, そのページを参照した命令の実行に戻る. これを実現するハードウエア : メモリ管理ユニット (MMU) MMU 内には, トランスレーション ルックアサイド バッファ (Translation Lookaside Buffer:TLB) と呼ばれる一種のキャッシュがあり, ユニット内部ではこの対応表に基づいてアドレスの対応づけを行う.
仮想記憶の実装 No3( ページング方式 ) このテーブルから参照出来なかった場合,TLB ミスと呼ぶ. このときの処理は MMU の設計によって異なり, ( 例 )MMU 内には TLB のみを持ち TLB ミスにより即時に例外を起こし,OS がページテーブルを引いて TLB に追加することによって TLB ミスを解決するアーキテクチャ ( 例 )MMU の機能強化がなされ,TLB ミス時に MMU 自身が与えられた物理アドレスにあるページテーブルを参照するアーキテクチャ (OS の助けを借りながら MMU が TLB ミスを解決 ) などが提供.
MMU の実装 No1 メモリ管理ユニット (Memory Management Unit,MMU) は, コンピュータのハードウェア部品のひとつであり, CPU の要求するメモリアクセスを処理 主な機能としては 1) 仮想アドレスを物理アドレスに変換する機能 ( すなわち仮想記憶管理 ), 2) メモリ保護機能, 3) キャッシュ制御機能, 4) バス調停機能, 5) バンク切り替え機能 -8 ビットシステムなど簡易版に採用, などがある.
MMU の実装 No2 多くのMMUでは, 一般的にメモリ空間 ( アドレス空間 ) はページに分割. ページサイズ :2^N. 多くの場合, 数 Kバイト. CPUが出力するアドレス下位 Nビット ( ページ内オフセット ) は仮想 物理の変換 (mapping) においては変化せず. 一方, CPUが出力するアドレス上位ビットは仮想ページ番号となる. MMUの有するページテーブルは, 配列構造になっており, 仮想ページ番号がそのインデックスになっている. 各ページテーブルエントリ (PTE) は仮想ページ番号 ( その PTEのインデックス ) に対応した物理ページ番号を格納 この物理ページ番号とページ内オフセットを組み合わせて完全な物理アドレスを生成.
MMU の実装 No3 PTE には, 含まれる情報 : そのページに以前書込みがあったかどうか 1 最後にアクセスされたのはいつか 2 特権レベルごとのアクセス権 ( 特権モードでの読み / 書き / 実行, ユーザモードでの読み / 書き / 実行の可 / 不可を設定 ) そのページにアクセスした時キャッシュメモリに内容をコピーするか否か 1 は書換え時にバックアップするかどうかを, 2 は書換えアルゴリズムを LRU にする際に使用
ページフォールト (page fault)no1 1. ある仮想ページにアクセス 物理メモリ (RAM) に未対応 2. その場合,MMUは ページフォールト を発生.CPUに通知 3. OSはその通知を受けて, 空き物理ページを検索し, その物理ページを示すようPTEの内容を書き換える. 4. ページフォールト処理から元のプログラムに復帰するとフォールトを発生させた命令を再度実行. 今度はPTEが物理ページを指示. 正常に処理が続行. 5. もし, 空きメモリがない場合, 使用中のページから ( 書換えアルゴリズムにより ) 物理ページを選択. その内容をディスクに退避. そのページを使用 ( 必要ならばディスクから内容を復帰 ) これをページング方式と呼ぶ.
ページフォールト (page fault)no2 ページテーブル自体もメモリ上に存在.PTE がメモリ上に存在しない場合あり. その場合も, ページフォールトを利用し,OS と MMU が協力して新たにページテーブルを割り当てる. 時としてソフトウェアのバグにより, ページフォールト が発生する場合もある.
ページフォールトによるシステム管理 プログラムによる不正アクセスの防護 : あるプログラムが許可されていない領域にアクセス MMUのメモリ保護機能がページフォールトを発生. OSがアクセス権を与えない設定とすることで, 一般プログラムから非許可メモリ領域への不正なアクセスを防御可能. 一般に,OSは, プログラム ( プロセス ) ごとに別の仮想アドレス空間を用意.
ページフォールトによるシステム管理 MMUはメモリのフラグメンテーションに対しても有効 : メモリブロックの アロケート と 解放 が繰り返される. フリーなメモリは十分あっても, 連続する大きなブロックをアロケートできなくなる フラグメンテーション 仮想記憶では, こまぎれな物理ページを集めて連続な仮想空間をつくることができる.
代表的な CPU での MMU 機能 マイクロプロセッサの初期の設計では,MMUは独立した集積回路 M68000やZ80など その後のCPUであるMC68030やZ280ではマイクロプロセッサ内にMMUを内蔵 最近はほとんどページング方式. しかし,x86アーキテクチャではセグメント方式も提供 ( 堅持 )
代表的な CPU での MMU 機能 PA-RISC では, ハッシュ ページ テーブルと呼ばれるより複雑な構造でアドレス変換を実行 IA-64 は一般的なページング方式と PA ライクなハッシュ方式と IA-32 モードでのセグメント方式の 3 つの方式をサポート MIPS アーキテクチャでは MMU はあるもののページテーブルは規定されず. OS が直接 TLB を変更
メモリ保護機能 No1 メモリ保護機能とはコンピュータにおいてプログラムが暴走しても, 他のプロセスのプログラムが読み書きしているメモリ領域を破壊 ( 不正書込みしてデータを改竄 ) することがないように保護する機能. 通常, ハードウェア (MMU) と OS が協調して, 多重仮想記憶などを用いてメモリを保護
メモリ保護機能 No2( セグメント方式 ) セグメント方式では, 各プロセスには, セグメントと呼ばれるメモリのかたまりをいくつか割り当てられて動作 割り当てられたセグメント以外のメモリには, アクセスできない. セグメントはハードウェアのレジスタによって定義され, アクセス可能なメモリアドレスの範囲を限定 データを許されている範囲外に読もうとしたときや書き込もうとしたときに例外が発生する.
メモリ保護機能 No3( ページング方式 ) ページング方式では, メモリはページと呼ばれる小さな断片に分割. 仮想記憶機構を使い, ページは任意の物理メモリに対応付けられるか, 保護状態であることがフラグで示される. ページング方式では連続した仮想記憶空間をばらばらな物理メモリ空間に対応付ける. 各プロセスはページテーブルを持っていて, アクセス可能なアドレスに物理メモリをマップする. 但し, ページテーブルはプロセスからは見えない. ページテーブルを使うことによって, 新たなメモリをプロセスに割り当てる必要が生じたときには, 適当な物理メモリを持ってきて新しいページとして割り当て可能.
メモリ保護機能 No3( ページング方式 ) ページテーブルは仮想アドレスをインデックスとした配列データの形式が一般的 各エントリの形式はそれを管理する MMU によって決められており, 対応する物理メモリのアドレスの他にアクセス権などを設定 アクセス権としては, アクセス可能な特権レベルとアクセスの種別 ( 読み込み, 書き込み, 実行など ) の組み合わせで表現 これにより MMU は当該ページへのアクセスが妥当であるかどうかを判断 不正なアクセスと判断された場合, 例外 (illegal access) が発生 OS が対応
メモリ保護機能 No4( 保護キー ) 保護キー機構では, メモリはある一定のサイズのかたまりに分割 ( 例えば,2K バイト ). 各分割領域に保護キー (protection key) と呼ばれる数値が対応 各プロセスにも 1 つの保護キーを割り当てる メモリにアクセスする際, ハードウェアは現在のプロセスの保護キーとアクセスしようとしているメモリの保護キーとが合致しているか, をチェック もし合致していない場合, 例外を発生 この機構はシステム /360 アーキテクチャで採用
メモリ保護機能 No4( 保護キー ) IA-32 アーキテクチャのように, ページング方式とセグメント方式を同時に使用している場合, セグメントは物理メモリに直接マップせず, リニアアドレス空間にマップされ, リニアアドレス空間から物理アドレス空間へのマッピングをページング方式で行う. 2 段階マッピング もちろん, ページングを使わずにセグメント方式だけを使うことも可能. 両方を使用した場合, どちらにもアクセス権の設定機能があるため, 注意が必要.
まとめ 記憶の階層構造 参照の局所性 CPUから高速& 大容量の記憶装置が存在するように見せ掛ける 仮想的 高速性 キャッシュメモリ 大容量性 仮想記憶 仮想記憶 セグメント方式, ページ方式