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