オペレーティングシステム 第11回 仮想記憶管理(2)

Slides:



Advertisements
Similar presentations
第2回 プロセス管理 ジョブ、プロセスとは? プロセスの状態遷移 プロセス制御ブロック スケジューリング.
Advertisements

オペレーティングシステムJ/K 2004年10月18日(5時限目)
オペレーティングシステム (仮想記憶管理)
情報検索概説II 第8回 パソコン組み立てと記憶装置 1999/11/25.
計算機工学III オペレーティングシステム #14 ファイル: より進んだファイルシステム 2006/07/21 津邑 公暁
基本情報技術概論(第10回) 埼玉大学 理工学研究科 堀山 貴史
Chapter11-4(前半) 加藤健.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
計算機システムⅡ キャッシュと仮想記憶 和田俊和.
第6回 仮想記憶とページング ページング ページ取り出し方式 ページ置き換え方式 中間テスト(40分)
メモリ管理(1).
オペレーティングシステム 第10回 仮想記憶管理(1)
システムソフトウェア講義の概要 計算機システムの復習:中央演算処理装置(CPU),プログラムの実行,主記憶装置,補助記憶装置
記 憶 管 理(1) オペレーティングシステム 第9回.
計算機工学III オペレーティングシステム #9 主記憶管理:ページング 2006/06/09 津邑 公暁
オペレーティングシステム (割り込み&仮想記憶管理)
基本情報技術概論(第12回) 埼玉大学 理工学研究科 堀山 貴史
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
計算機システムⅡ 主記憶装置とALU,レジスタの制御
計算機システム概論・4回目 本日のトピック:メモリの管理と仮想記憶 メモリ管理におけるOSの役割 メモリの割当方法について
オペレーティングシステム 第9回 実記憶管理 38号館4階N-411 内線5459
記 憶 管 理(2) オペレーティングシステム 第10回.
ファイルシステムキャッシュを 考慮した仮想マシン監視機構
App. A アセンブラ、リンカ、 SPIMシミュレータ
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満
オペレーティングシステム 第12回 仮想記憶管理(3)
第7章 データベース管理システム 7.1 データベース管理システムの概要 7.2 データベースの格納方式 7.3 問合せ処理.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
オペレーティングシステム (割り込み処理)
第5回 CPUの役割と仕組み3 割り込み、パイプライン、並列処理
オペレーティングシステム i386アーキテクチャ(2)
Ibaraki Univ. Dept of Electrical & Electronic Eng.
基本情報技術概論(第8回) 埼玉大学 理工学研究科 堀山 貴史
演算/メモリ性能バランスを考慮した マルチコア向けオンチップメモリ貸与法
メモリ管理 4.3, 4.4 章 さだ.
第8回入出力制御 デバイスコントローラ ポーリングと割込み 入出力の方式 PIO DMA 入出力のためのソフトウェア技法.
型付きアセンブリ言語を用いた安全なカーネル拡張
オペレーティングシステム (仮想記憶管理)
オペレーティングシステム (仮想記憶管理)
AMD64の仮想化技術を利用した 仮想マシンモニタの実装
コンピュータを知る 1E16M009-1 梅津たくみ 1E16M017-8 小沢あきら 1E16M035-0 柴田かいと
VM専用仮想メモリとの連携による VMマイグレーションの高速化
アルゴリズムとデータ構造 補足資料11-1 「mallocとfree」
仮想メモリを用いた VMマイグレーションの高速化
Ibaraki Univ. Dept of Electrical & Electronic Eng.
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
アルゴリズムとデータ構造 補足資料5-1 「メモリとポインタ」
オペレーティングシステムJ/K (仮想記憶管理)
第7回 授業計画の修正 中間テストの解説・復習 前回の補足(クロックアルゴリズム・PFF) 仮想記憶方式のまとめ 特別課題について
コンピュータの基本構成について 1E16M001-1 秋田梨紗 1E16M010-2 梅山桃香 1E16M013-3 大津智紗子
オペレーティングシステム 第2回 割り込みとOSの構成
未使用メモリに着目した 複数ホストにまたがる 仮想マシンの高速化
オペレーティングシステムJ/K 2004年11月15日2時限目
オペレーティングシステム i386アーキテクチャ(1)
コンピュータの仕組み 〜ハードウェア〜 1E15M009-3 伊藤佳樹 1E15M035-2 柴田将馬 1E15M061-1 花岡沙紀
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
第5回 メモリ管理(2) オーバレイ方式 論理アドレスとプログラムの再配置 静的再配置と動的再配置 仮想記憶とメモリ階層 セグメンテーション
マイグレーションを支援する分散集合オブジェクト
第4回 メモリ管理 主記憶(メインメモリ)の管理 固定区画方式と可変区画方式 空き領域の管理 スワッピング.
Mondriaan Memory Protection の調査
アルゴリズムとデータ構造1 2009年6月15日
第4回 CPUの役割と仕組み2 命令の解析と実行、クロック、レジスタ
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
IPmigrate:複数ホストに分割されたVMの マイグレーション手法
コンパイラ 第12回 実行時環境 ― 変数と関数 ― 38号館4階N-411 内線5459
アルゴリズムとデータ構造 2010年6月17日
L4-Linux のメモリ管理における問題点とその解決策
Ibaraki Univ. Dept of Electrical & Electronic Eng.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
Presentation transcript:

オペレーティングシステム 第11回 仮想記憶管理(2) http://www.info.kindai.ac.jp/OS 38号館4階N-411 内線5459 takasi-i@info.kindai.ac.jp

メモリ OS, ユーザプログラム, データ メモリ上に置かれる メモリ上の位置は 1 次元のアドレスで管理 メモリ 0番地 OS n 番地 OS OS, ユーザプログラム, データ メモリ上に置かれる メモリ上の位置は 1 次元のアドレスで管理 プログラム1 プログラム2 データ1

メモリ メモリの記憶階層 10-8 秒 10-7 秒 10-3 秒 容量 小 大 アクセス時間 短 長 価格 高 低 キャッシュ記憶 チップ上 主記憶 DRAM 2次記憶 ハードディスク

メモリ 記憶装置 本, 資料 特徴 キャッシュ 手で保持 すぐ読める ごくわずかな量しか持てない 主記憶 作業机 座ったまますぐ手に取れる (cache memory) 手で保持 すぐ読める ごくわずかな量しか持てない 主記憶 (main memory) 作業机 座ったまますぐ手に取れる 置ける量は限られる 2次記憶 (secondary memory) 倉庫 部屋を出て取りにいく必要あり 大量に置ける

主記憶と2次記憶 10-7秒 10-3秒 プロセッサは2次記憶を直接読むことはできない 使用するプログラム, データは主記憶上にコピー 10000倍 プロセッサは2次記憶を直接読むことはできない 使用するプログラム, データは主記憶上にコピー

スワップイン, スワップアウト (swap-in, swap-out) プログラム, データを2次記憶から主記憶に 実行中のプロセスに必要なものを読み込む スワップアウト(swap-out) プログラム, データを主記憶から2次記憶に スワップインの領域を確保するために当面必要のないものを退避させる

仮想記憶(virtual memory) 仮想記憶(virtual memory) 動的再配置により主記憶容量よりも大きなアドレス空間を提供 2次記憶 仮想記憶 主記憶 2次記憶上に 仮想記憶を作る

ページング(paging) ページング(paging) ページ枠(page frame) ページ(page) サイズ 2k KB 4~8KB 主記憶, 仮想記憶を固定長のブロックに分割 ページ枠(page frame) 主記憶上の固定長のブロック ページ(page) 仮想記憶上の固定長のブロック サイズ 2k KB 4~8KB 仮想記憶 主記憶 ページ ページ枠

ページング 必要なプログラム, データの載っているページが 主記憶上にある場合 そのまま実行 主記憶 プログラム データ

ページング ページフォルト 必要なプログラム, データの載っているページが 主記憶上に無い場合 (page fault) 2次記憶 主記憶上に無い場合 ページフォルト (page fault) 主記憶 プログラム データ プログラム 2次記憶から主記憶に ページを読み込む データ ページイン(page in)

ページサイズ 小 大 小 大 大 小 低 高 低 高 2次記憶からの転送効率 ページテーブルサイズ ページフォルト率 ページサイズ 内部断片化 小 大 ページテーブルサイズ 大 小 2次記憶からの転送効率 低 高 ページフォルト率 低 高

ページングの問題点 ページテーブルが巨大 ページエントリ数 約50万 例: 仮想記憶を 4GB, 1ページ 8KB で構成 ページテーブルはプロセスごとに独立 例: 仮想記憶を 4GB, 1ページ 8KB で構成 ページエントリ数 約50万 例: 100個のプロセスを実行 ページエントリ数 約5000万 1エントリ10Bなら 約500MB

ページングの問題点の解法 ページテーブルが巨大 ハッシュ(hash)関数によるページテーブル 仮想記憶と同じ ⇒ 実記憶と同じ テーブルサイズ 仮想記憶と同じ ⇒ 実記憶と同じ もっと改善するには? 多重レベルページング

多重レベルページング (multilevel paging) ページングを多段化 Lv 2 ページテーブル ページ枠 Lv 1 ページテーブル

多重レベルページング 1 2 3 4 5 6 7 ページ枠に Lv2ページングの ページテーブル Lv1 ページテーブル 主記憶 ページ02の Lv2ページテーブル ページ枠 ページ 1 2 3 4 5 6 7 ページ ページ枠 フラグ 00 4 1 01 6 02 2 1 4 00 1 6 01 1 2 02 ページ00の Lv2ページテーブル ページ枠に Lv2ページングの ページテーブル ページ01の Lv2ページテーブル

多重レベルページング 01 321 1 仮想アドレス ページ番号 Lv1ページ内相対アドレス Lv 1 Lv2ページ内相対アドレス Lv 2 仮想アドレスの構成 仮想アドレス ページ番号 Lv 1 Lv1ページ内相対アドレス Lv 2 Lv2ページ内相対アドレス アドレスが二重構造 01 321 1 例 Lv1ページ内相対アドレス = Lv2ページングの仮想アドレス

多重レベルページング 01 1 321 2 321 1 2 3 4 5 6 7 仮想アドレス 主記憶 1 2 実アドレス 3 2 1 7 ページ枠 ページ 1 2 3 4 5 6 7 1 2 実アドレス 2 321 3 2 1 7 ページ枠 ページ ページ01の Lv2ページテーブル Lv1ページテーブル ページ ページ枠 フラグ V 00 01 6 1 02 2

多重レベルページング 00 3 555 1 2 3 4 5 6 7 2次記憶から Lv2ページテーブルを ページイン ページフォルト発生 仮想アドレス 主記憶 00 3 555 ページ枠 ページ 1 2 3 4 5 6 7 2次記憶から Lv2ページテーブルを ページイン Lv1ページテーブル ページ ページ枠 フラグ V 00 01 6 1 02 2 ページフォルト発生

多重レベルページング 00 3 555 4 555 1 2 3 4 5 6 7 仮想アドレス 主記憶 3 4 実アドレス 4 3 6 2 7 ページ枠 ページ 1 2 3 4 5 6 7 3 4 実アドレス 4 555 4 3 6 2 7 1 ページ枠 ページ ページ00の Lv2ページテーブル Lv1ページテーブル ページ ページ枠 フラグ V 00 01 6 1 02 2 1 00

多重レベルページングの利点 多重レベルページングの利点 多重レベルページングの欠点 主記憶使用量の削減 メモリアクセスの増大 当面必要でないページテーブルは2次記憶に置く 多重レベルページングの欠点 メモリアクセスの増大 連想レジスタを用いればアクセス数を減らせる

連想レジスタ 連想レジスタ 一般的にプログラムは 一度アクセスしたアドレスを近いうちに 再アクセスすることが多い 最近参照されたページテーブルをCPU内で記憶 連想レジスタ 小容量 高速 統計的にはレジスタサイズは 8~16 エントリで90%のヒット率

連想レジスタ 05 333 333 1 主記憶へ2回のアクセス 仮想アドレス 主記憶 ページテーブル 主記憶 実アドレス h(x) 1 05 ページ枠 ポインタ 1 05 2 3 ページ枠 1 2 3 CPU 1 05 1 連想レジスタ ページ ページ枠 05 1 主記憶へ2回のアクセス ページを記憶

連想レジスタ 05 334 334 1 主記憶へ1回のアクセス 仮想アドレス 主記憶 ページテーブル 主記憶 実アドレス h(x) 1 05 ページ枠 ポインタ 1 05 2 3 ページ枠 1 2 3 CPU 1 連想レジスタ ページ ページ枠 05 1 05 1 主記憶へ1回のアクセス

理想的な仮想記憶 大きさは無制限 プロセス毎に固有 プログラム部, データ部, スタック部等を分離 必要時にはプロセス間で共有可能 ページングで可能 大きさは無制限 プロセスは記憶容量を考慮する必要無し プログラムの簡単化, バグの可能性減少 プロセス毎に固有 他プロセスからのアクセスに対し保護 プログラム部, データ部, スタック部等を分離 プロセス内部からのアクセスに対し保護 必要時にはプロセス間で共有可能 並列動作するプロセス間で通信機構として使用 これも実現したい

セグメンテーション (segmentation) プログラム, データの論理的なかたまり メインルーチン, サブルーチン, データ等 セグメンテーション(segmentation) セグメントを単位として分割 各セグメントは大きさを自由に増減可能

セグメンテーション 2次記憶 セグメント プロセス1 プロセス2 プロセス間で 共有可能 プログラム 領域 プログラム 領域 プログラム データ 領域 データ 領域 データ 領域 データ 領域 プロセス間で 共有可能 スタック 領域 スタック 領域

ページング 2次記憶 ページ プロセス1 プロセス2 プロセス間で 共有不可能 プログラム プログラム 領域 領域 データ 領域 データ スタック 領域

セグメンテーション 必要なプログラム, データの載っているセグメントが 主記憶上にある場合 そのまま実行 主記憶 プログラム データ

セグメンテーション セグメントフォルト 必要なプログラム, データの載っているセグメントが 主記憶上に無い場合 2次記憶 主記憶上に無い場合 セグメントフォルト (segment fault) 主記憶 プログラム データ 2次記憶から主記憶に セグメントを読み込む プログラム データ セグメントイン(segment in)

セグメントテーブル(segment table) 仮想アドレスから実アドレスへの変換表 セグメント 番号 基底アドレス セグメント長 フラグ V P C 00 2250 550 1 100 01 300 110 02 1100 1200 101 03 850 111 04 600 05 150

セグメントテーブル(segment table) 仮想アドレスから実アドレスへの変換表 セグメント 番号 基底アドレス セグメント長 フラグ V P C 00 2250 550 1 100 01 300 110 02 1100 1200 101 03 850 111 04 600 05 150 仮想記憶上のセグメント番号

セグメントテーブル(segment table) 仮想アドレスから実アドレスへの変換表 セグメント 番号 基底アドレス セグメント長 フラグ V P C 00 2250 550 1 100 01 300 110 02 1100 1200 101 03 850 111 04 600 05 150 実記憶上のセグメントの開始位置

セグメントテーブル(segment table) 仮想アドレスから実アドレスへの変換表 セグメント 番号 基底アドレス セグメント長 フラグ V P C 00 2250 550 1 100 01 300 110 02 1100 1200 101 03 850 111 04 600 05 150 セグメントの長さ

セグメントテーブル(segment table) 仮想アドレスから実アドレスへの変換表 セグメント 番号 基底アドレス セグメント長 フラグ V P C 00 2250 550 1 100 01 300 110 02 1100 1200 101 03 850 111 04 600 05 150 実記憶上にスワップインされているか

セグメントテーブル(segment table) 仮想アドレスから実アドレスへの変換表 セグメント 番号 基底アドレス セグメント長 フラグ V P C 00 2250 550 1 100 01 300 110 02 1100 1200 101 03 850 111 04 600 05 150 アクセス権 (read, write, execute)

セグメントテーブル(segment table) 仮想アドレスから実アドレスへの変換表 セグメント 番号 基底アドレス セグメント長 フラグ V P C 00 2250 550 1 100 01 300 110 02 1100 1200 101 03 850 111 04 600 05 150 セグメントイン後に書き換えられたか

セグメンテーション 2次記憶 00000 01000 02000 03000 04000 00 01 02 03 04 05 06 07 05000 06000 07000 08000 00 00900 主記憶 セグメントテーブル 01 02500 01 2748 1248 番号 基底 アドレス セグメント長 フラグ V 00 900 01 1248 1500 1 02 - 03 3135 500 04 2300 05 06 07 700 03 03500 3635 03 3135 04 06300 セグメントの 開始位置 07 07700

セグメンテーション 2次記憶 00000 01000 02000 03000 04000 00 01 02 03 04 05 06 07 05000 06000 07000 主記憶上にある場合 00 00900 仮想アドレス 主記憶 01 02500 01 321 + 321 01 2748 1248 実アドレス 1569 1248 03 03500 3635 03 3135 セグメントテーブル 04 06300 番号 基底アドレス セグメント長 フラグ V 00 900 01 1248 1500 1 02 - 03 3135 500 07 07700 08000

セグメンテーション 00 888 セグメント フォルト発生 2次記憶 00000 01000 02000 03000 04000 00 01 05 06 07 05000 06000 07000 主記憶上に無い場合 00 00900 仮想アドレス 主記憶 01 02500 00 888 01 2748 1248 03 03500 3635 03 3135 セグメントテーブル 04 06300 番号 基底アドレス セグメント長 フラグ V 00 900 01 1248 1500 1 02 - 03 3135 500 セグメント フォルト発生 07 08700 08000

セグメンテーション 2次記憶 00000 01000 02000 03000 04000 00 01 02 03 04 05 06 07 05000 06000 07000 主記憶上に無い場合 セグメントイン 00 00900 仮想アドレス 主記憶 01 02500 00 888 + 888 01 2748 1248 実アドレス 4523 3635 最良一致, 先頭一致等で 挿入位置を決定 03 03500 3635 03 3135 セグメントテーブル 04 06300 00 4535 番号 基底アドレス セグメント長 フラグ V 00 900 01 1248 1500 1 02 - 03 3135 500 1 3635 07 07700 08000

セグメンテーション 03 550 セグメントオーバフローエラー セグメント内相対アドレス > セグメント長 仮想アドレス 03 550 セグメント内相対アドレス > セグメント長 セグメントオーバフローエラー (segment overflow error) セグメントテーブル 番号 基底アドレス セグメント長 フラグ V 00 900 01 1248 1500 1 02 - 03 3135 500

セグメンテーションの動作 セグメント i へのアクセス 開始 セグメントアウトする セグメントj の決定 相対アドレス > セグメント長? yes j の C = 0 ? no エラー no yes j を2次記憶に 書き出し i の V = 1 ? no yes i を2次記憶から 読み込み i へアクセス

セグメンテーションの長所と短所 長所 短所 ページングと組み合わせる 大きさを増減可能 プログラム部, データ部等用途別に割り当て可能 外部断片化が発生 ページングと組み合わせる

ページ化セグメンテーション (paged segmentation) セグメンテーションを複数のページ枠で構成 セグメントごとにページテーブルを用意 ページテーブル ページ枠 00 01 02

ページ化セグメンテーション 1 2 3 4 5 6 7 ページ枠に 各セグメントの ページテーブル 主記憶 セグメントテーブル セグメント02の ページテーブル ページ枠 ページ 1 2 3 4 5 6 7 番号 基底アドレス セグメント長 フラグ 00 4,000 900 1 01 6,000 1500 02 1,000 500 900 1 4,000 00 セグメント00の ページテーブル 1500 1 6,000 01 500 1 1,000 02 セグメント01の ページテーブル ページ枠に 各セグメントの ページテーブル

ページ化セグメンテーション 01 321 1 仮想アドレス セグメント番号 セグメント内相対アドレス ページ番号 ページ内相対アドレス 仮想アドレスの構成 仮想アドレス セグメント番号 セグメント内相対アドレス ページ番号 ページ内相対アドレス アドレスが二重構造 01 321 1 例 セグメント内相対アドレス = ページングの仮想アドレス

ページ化セグメンテーション 01 1 321 2 321 1 2 3 4 5 6 7 仮想アドレス 主記憶 1 2 実アドレス ページ枠 ページ 1 2 3 4 5 6 7 1 2 実アドレス 2 321 セグメント01の ページテーブル 3 5 2 1 7 ページ枠 ページ セグメントテーブル 番号 基底アドレス セグメント長 フラグ V 00 900 01 6,000 1500 1 02 2,000 500

ページ化セグメンテーションの 利点 外部断片化の回避 複数セグメント プロセス間共有 ページテーブルの分散 ページ単位で主記憶割り当て 各セグメントは大きさ増減可能 複数使用により用途別に使い分け可能 プロセス間共有 セグメンテーションとほぼ同様に共有可能 ページテーブルの分散 ページテーブルが複数に分割されるので,一部を 仮想記憶に追い出すことで主記憶使用量削減

フェッチ技法(fetch) フェッチ技法 要求時フェッチ(demand fetch) プリフェッチ(prefetch) プログラムが参照したときにデータを読み込む プリフェッチ(prefetch) 参照前に予めデータを読んでおく フェッチ技法 ページング 食材 要求時フェッチ 必要としたときに ページイン 毎回食事前に購入 プリフェッチ 必要なページを予測して予めページイン 1週間分のメニューを予測して週末に購入

要求時ページング (demand paging) 必要になった時点でページイン 要求時ページングの長所 不必要なページをページインせずにすむ ページ予測の必要無し 要求時ページングの短所 新しいページを参照する度にページイン発生 処理・転送の並行動作が行えない

プリページング (prepaging) プリページング(prepaging) プリページングの長所 プリページングの条件 必要なページを予測して予めページイン プリページングの長所 プロセス実行時間が短縮(予測が正しければ) プリページングの条件 予測の確度が高い 予測処理が低コスト トレードオフ

参照の局所性 (locality of reference) 主記憶へのアクセスは一部のアドレスに集中する可能性が高い 時間局所性 最近参照されたページは近い将来に再度参照される可能性が高い 空間局所性 あるページが参照されると近くのページも近い将来に参照される可能性が高い

時間局所性 時間局所性 最近参照されたページは近い将来に再度参照される可能性が高い sum = 0; for ループ内では for (int i:=0; i<n; ++i) { sum := sum + a[i]; } for ループ内では 変数 i, sum が繰り返し 参照される

空間局所性 空間局所性 あるページが参照されると近くのページも近い将来に参照される可能性が高い sum = 0; for ループ内では for (int i:=0; i<n; ++i) { sum := sum + a[i]; } for ループ内では a[0], a[1], …, a[n] が 順に参照される

局所性の原因 プログラムの特徴 関数, メソッドを用いて構造化 プログラムの大部分はループで構成 ページインしたページの近くのページも 関数内ではアクセスする記憶領域がほぼ同じ (時間&空間局所性) プログラムの大部分はループで構成 ループ制御変数等、同一変数へのアクセス (時間局所性) 配列等連続領域へのアクセス(空間局所性) ページインしたページの近くのページも 必要になる可能性が高い

プリフェッチ技法 プリフェッチ技法 要求時プリフェッチ(demand prefetch) 多くのプログラムで1度参照したページの近傍のページが参照される ⇒プログラムがページを参照したときに近傍のページも読み込む 初期ロードプリフェッチ(initiate load prefetch) プログラム開始直後はページフォルトが多発 ⇒プログラム開始時に近傍のページも読み込む

まとめ 多重レベルページング ページテーブルを多段化 仮想アドレスのページ番号部を複数に分割 ページテーブル分割により主記憶使用量削減(必要の無いテーブルは2次記憶上に置く)

まとめ セグメンテーション ページ化セグメンテーション 仮想記憶と実記憶を対応させる可変長な単位 プロセスあたり複数のセグメントを許す セグメント間のオーバラップ(共有領域)を許す ページ化セグメンテーション ページングとセグメンテーションの利点を融合 外部断片化を回避 主記憶使用量の削減

まとめ フェッチ技法 必要そうなページを予測して予め読み込む 参照されたページの近傍のページも読む プログラム開始時に近傍のページも読む