この資料は、情報工学レクチャーシリーズ オペレー ティングシステム 松尾啓志 著(森北出版株式会 社)を用いて授業を行うために、名古屋工業大学松 尾啓志、津邑公暁が作成しました。 パワーポイント2007で最終版として保存しているため、変更はできませ んが、授業でお使いなる場合は松尾(matsuo@nitech.ac.jp)まで連絡い ただければ、編集可能なバージョンをお渡しする事も可能です。
オペレーティングシステム #10 主記憶管理: セグメンテーション, ページ化セグメンテーション
復習 ページング ページテーブル 主記憶の再配置システム 仮想アドレスの上位(ページ番号)を 物理アドレスの上位(ページフレーム番号)に 変換することでアドレス変換 フラグメンテーションも改善 ページテーブル 上記変換を行うためのテーブル ページに対応するエントリごとにフラグなどを配置 ページへのアクセス権などを設定可能
復習:ページングの動作 スワップイン 物理空間 仮想アドレス 00 02 123 01 = 1 物理アドレス 2 02 02 123 3 0x00000 0x0000 00 02 123 0x00FFF 0x0FFF 0x1000 0x01000 01 = 1 0x1FFF 0x01FFF 物理アドレス 0x02000 0x2000 2 02 02 0x2FFF 0x02FFF 123 0x03000 0x3000 3 03 0x03FFF 0x3FFF 0x04000 04 V P C ページフレーム 0x04FFF 0x05000 00 1 05 01 0x05FFF 1 0x06000 06 02 1 011 0x06FFF 03 1 0x07000 07 04 1 0x07FFF 0x08000 08 05 1 0x08FFF 06 1 0x09000 09 07 1 0x09FFF 08 1
復習 ページングの改善法 ハッシュ関数 連想レジスタ ページテーブルの巨大さを緩和 仮想アドレス空間に比例する大きさが必要だったのが, 物理アドレス空間に比例する大きさまで縮小 連想レジスタ 主記憶へのアクセス回数の緩和 最近使用した「ページ番号→ページフレーム番号」の 変換結果をCPU内で記憶 ページテーブル検索のための主記憶アクセスを削減
今日の内容 ページングの構成法 セグメンテーション 教科書とは違う順番でやります 多重レベルページング (10.3) 0レベルページング (10.4) セグメンテーション セグメンテーション (10.1) ページ化セグメンテーション (10.2) 教科書とは違う順番でやります
10.3 多重レベルページング
復習:ページングの問題点 ページテーブルが巨大 前回はハッシュ関数を利用することで改善 (仮想記憶の大きさと同じエントリ数) ×(同時実行プロセス数) だけのエントリ数が必要 主記憶を圧迫 前回はハッシュ関数を利用することで改善 仮想アドレス空間に比例する大きさが必要だったのが, 物理アドレス空間に比例する大きさまで縮小 さらに改善したい
多重レベルページング 主記憶 仮想アドレス 仮想 アドレス 空間 2 2 123 3 ページテーブル 2 3 1 1 = 物理アドレス 2 0x00000 0x0000 仮想 アドレス 空間 2 2 123 0x00FFF 0x1000 3 ページテーブル ページ番号 2 3 フレーム番号 1 0x01000 1 = 0x01FFF 物理アドレス 0x02000 0x2000 2 6 0x02FFF 123 0x03000 0x3000 3 0x03FFF 0x04000 0x4000 4 基底アドレス 0x04FFF 0x05000 0x5000 5 6000 ページ テーブル 1 0x05FFF 5000 0x6000 0x06000 6 ページ テーブル ページ テーブル 2 8000 0x06FFF 3 0x7000 0x07000 4 ページテーブルを 多段に 0x07FFF 0x08000 0x8000 ページ テーブル ページテーブル 0x08FFF 0x9000 0x09000 0x09FFF
多重レベルページング 主記憶 仮想アドレス 仮想 アドレス 空間 2 2 123 1 = 3 物理アドレス 当面必要でない 0x00000 0x0000 仮想 アドレス 空間 2 2 123 0x00FFF 0x1000 0x01000 1 = 3 0x01FFF 物理アドレス 当面必要でない ページテーブルは, 仮想記憶上に置いておける 0x02000 0x2000 2 6 0x02FFF 123 0x03000 0x3000 3 0x03FFF 0x04000 0x4000 4 基底アドレス 0x04FFF 0x05000 0x5000 5 6000 ページ テーブル 1 0x05FFF 5000 0x6000 0x06000 6 ページ テーブル ページ テーブル 2 8000 0x06FFF 3 0x7000 0x07000 4 0x07FFF 0x08000 0x8000 ページ テーブル ページテーブル 0x08FFF 0x9000 0x09000 0x09FFF
多重レベルページング ページングを多段化 ページテーブルを細かく分割可能 多段化により,主記憶アクセスは増加 2段だけでなく,さらに多段化も可能 ページテーブルを細かく分割可能 必要なテーブルのみを主記憶上に置くことで 主記憶使用量を削減 多段化により,主記憶アクセスは増加 TLBにより解決
10.4 0レベルページング (連想写像方式)
連想写像方式 一般的なページング 0レベルページング(連想写像方式) 主記憶上にページテーブル CPU内のMMUが,ページテーブルを用いて アドレス変換 0レベルページング(連想写像方式) ハードウェアとしてのMMUを持たない 一般的なページテーブルを持たず, 連想メモリで構成したTLBでアドレス変換
0レベルページングの動作 物理空間 仮想アドレス 02 00 02 789 連想メモリ インデクスを持たない 全エントリを並列検索 1 07 0x00000 0x0000 02 00 02 789 連想メモリ インデクスを持たない 全エントリを並列検索 0x00FFF 0x0FFF 0x1000 0x01000 1 07 01 = 0x1FFF 0x01FFF 物理アドレス 0x02000 0x2000 2 05 02 789 0x2FFF 0x02FFF 0x03000 0x3000 03 00 3 03 0x03FFF 0x3FFF 0x04000 04 V P C ページフレーム 011 3 1 2 01 00 02 03 04 05 06 07 08 フレーム ページフレーム 00 3 02 05 2 07 1 0x04FFF 0x05000 05 0x05FFF 02 0x06000 06 0x06FFF 0x07000 07 0x07FFF 0x08000 08 0x08FFF 0x09000 09 0x09FFF
0レベルページングの特徴 メリット デメリット よって... 高クロック実装が可能 TLBヒットしなかった場合のオーバヘッドが膨大 MMU不要のため,CPU機構が単純化 デメリット TLBヒットしなかった場合のオーバヘッドが膨大 ソフトウェア処理のため よって... 主記憶使用量の少ないプログラムには高速 主記憶使用量の多いプログラムには非常に低速
10.1 セグメンテーション
復習:理想的な論理アドレス空間 大きさが無制限 プロセスごとに固有 プログラム部,データ部,スタック部など分離 ページングで実現可能 大きさが無制限 プロセスは主記憶の空き容量を考慮する必要なし プログラムの簡単化,バグの可能性減少 プロセスごとに固有 他のプロセスからのアクセスに対し保護 プログラム部,データ部,スタック部など分離 用途ごとに空間を分けることで, 自プロセス内での不正アクセスの可能性を低減 必要時にはプロセス間で共有も可能 並列動作するプロセス間で共有し, 高速な通信機構として使用 こちらも実現したい
セグメンテーション ページ(ページング) セグメント(セグメンテーション) 一定の大きさを割り当て単位とする プロセスに対し複数のセグメントを割り当て 各セグメントは論理的に独立 プログラム部,データ部など固有領域として使用可能 各セグメントはその論理空間の大きさを 自由に増減可能
セグメンテーション セグメント プロセス 1 プロセス 2 プロセス間共有も 実現可 プログラム 領域 プログラム 領域 データ 領域 スタック 領域 プロセス間共有も 実現可 スタック 領域
セグメンテーション 物理空間 仮想アドレス 02 123 = 物理アドレス 1345 V 1 1 1 1 1 1 1 1 1 00 01 0x00000 0x0000 02 123 0x1222 0x00FFF 0x01000 = 0x01FFF 物理アドレス 0x02000 1300 0x02FFF 1345 0x03000 0x03FFF 0x3FFF 0x04000 V 基底アドレス セグメント長 0x04FFF 0x05000 00 1 01 0x05FFF 1 0x06000 02 1222 1300 1 0x06FFF 03 1 0x07000 04 1 0x07FFF 0x08000 05 1 0x08FFF 06 1 0x09000 07 1 0x09FFF 08 1
セグメンテーション 利点 欠点 プログラム部,データ部など,用途別に複数を プロセスに割り当て 各セグメンテーションは大きさを増減可 プログラム部,データ部など,用途別に複数を プロセスに割り当て 各セグメンテーションは大きさを増減可 欠点 フラグメンテーション 他の手法と組み合わせて 利用
10.2 ページ化セグメンテーション
ページング v.s. セグメンテーション ページング セグメンテーション 固定長ブロック ページテーブル 複数のアドレス空間 フラグメンテーションの解 決 ページテーブル 仮想→物理アドレスの 1対1対応 動的再配置による 仮想記憶の実現 セグメンテーション 複数のアドレス空間 用途別論理空間の実現 アドレス空間の オーバラップ 複数プロセスによる 空間の共有を実現
ページ化セグメンテーション ページング + セグメンテーション セグメンテーションを, 複数のページフレームにより構成する セグメンテーションを, 複数のページフレームにより構成する セグメントごとにページテーブルを用意 ページ 番号 フレーム番号 セグメント セグメント ページフレーム ページテーブル ページフレーム ページ 番号 フレーム番号 セグメント セグメント ページフレーム ページフレーム ページテーブル ページフレーム ページ 番号 フレーム番号 セグメント セグメント ページフレーム ページテーブル
ページ化セグメンテーション 主記憶 仮想アドレス 2 物理 アドレス 空間 仮想 アドレス 空間 2 123 3 セグメント0用 0x0000 2 セグメント 物理 アドレス 空間 仮想 アドレス 空間 セグメント2 2 123 0x1000 3 セグメント0用 ページテーブル ページ番号 2 3 フレーム番号 1 = 1 物理アドレス 0x2000 6 セグメント 2 セグメント0 123 0x3000 3 0x4000 4 基底アドレス セグメント長 0x5000 6000 1000 ページ テーブル 5 1 5000 2000 0x6000 ページ テーブル ページ テーブル 6 6 セグメント1 2 8000 1000 3 0x7000 7 4 0x8000 セグメントテーブル ページ テーブル 8 0x9000 9
ページ化セグメンテーションにおける 仮想アドレス 仮想アドレスの構造 セグメントがページ単位で構成されている セグメンテーションとページングの階層化 セグメント内相対アドレスが, ページングにおける仮想アドレスに相当 仮想アドレスの構造も二階層になっていると 考えるとわかりやすい 仮想アドレス セグメント番号 セグメント内相対アドレス ページ 番号 オフセット (ページ内相対アドレス) セグメント番号 仮想アドレス ページ 番号 セグメント内の 相対アドレス オフセット (ページ内相対アドレス)
ページ化セグメンテーションの利点 フラグメンテーションの回避 複数セグメント プロセス間共有 ページテーブルの分散 主記憶割り当ては基本的にページ単位 複数セグメント 各セグメントは大きさ増減可能 複数使用により,用途別に使い分け可能 プロセス間共有 セグメンテーションとほぼ同様に共有可能 ページテーブルの分散 ページテーブルが複数に分割されるので, 多重レベルページング同様,その一部を 仮想記憶に追い出すことで主記憶使用量削減
今日のまとめ 多重レベルページング 0レベルページング(連想写像方式) 従来のページングにおける,仮想アドレスの 「ページ番号部」を複数に分割 それぞれをページ番号とし階層化したテーブルを検索 ページテーブルの分割により,テーブルによる 主記憶使用量を削減(残りは仮想記憶へ) 0レベルページング(連想写像方式) MMUを持たず,CPUの構成を単純化(=高速化) 連想記憶(検索のためのインデクスを持たない)で TLBを構成
今日のまとめ セグメンテーション ページ化セグメンテーション セグメント: 仮想記憶と物理記憶を対応させる可変長な単位 セグメント: 仮想記憶と物理記憶を対応させる可変長な単位 プロセスあたり複数のセグメントを許す セグメント間のオーバラップ(共有領域)を許す ページ化セグメンテーション ページングとセグメンテーションの利点を融合 セグメンテーションの利点を生かしつつ フラグメンテーションを回避 ページテーブルの分割により,多重ページング同様 主記憶使用量の削減