メモリ管理(1).

Slides:



Advertisements
Similar presentations
メモリマップドファイル オペレーティングシステム. 今日の流れ (12/10) ディスクの話の残り  ディスクを高速に使う工夫 メモリとディスクの簡単なまとめ メモリマップト・ファイル (mmap)
Advertisements

メモリマップドファイル オペレーティングシステム. 今日の流れ (12/10) ディスクの話の残り  ディスクを高速に使う工夫 メモリとディスクの簡単なまとめ メモリマップト・ファイル (mmap)
アルゴリズムとデータ構造 第2回 線形リスト(復習).
2006/10/26 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
計算機工学III オペレーティングシステム #14 ファイル: より進んだファイルシステム 2006/07/21 津邑 公暁
Ibaraki Univ. Dept of Electrical & Electronic Eng.
計算機システムⅡ キャッシュと仮想記憶 和田俊和.
第6回 仮想記憶とページング ページング ページ取り出し方式 ページ置き換え方式 中間テスト(40分)
オペレーティングシステム 第10回 仮想記憶管理(1)
システムソフトウェア講義の概要 計算機システムの復習:中央演算処理装置(CPU),プログラムの実行,主記憶装置,補助記憶装置
記 憶 管 理(1) オペレーティングシステム 第9回.
計算機工学III オペレーティングシステム #9 主記憶管理:ページング 2006/06/09 津邑 公暁
基本情報技術概論(第12回) 埼玉大学 理工学研究科 堀山 貴史
計算機システムⅡ 主記憶装置とALU,レジスタの制御
計算機システム概論・4回目 本日のトピック:メモリの管理と仮想記憶 メモリ管理におけるOSの役割 メモリの割当方法について
オペレーティングシステム 第11回 仮想記憶管理(2)
オペレーティングシステム 第9回 実記憶管理 38号館4階N-411 内線5459
データ構造とアルゴリズム 第10回 mallocとfree
基礎プログラミングおよび演習 第9回
オペレーティングシステムJ/K 2004年10月7日
地理情報システム論 第3回 コンピュータシステムおける データ表現(1)
ファイルシステムAPIと メモリマップドファイル
記 憶 管 理(2) オペレーティングシステム 第10回.
オペレーティングシステムJ/K 2004年11月4日
App. A アセンブラ、リンカ、 SPIMシミュレータ
侵入検知システム(IDS) 停止 IDS サーバへの不正アクセスが増加している
2007/1/18 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
第7章 データベース管理システム 7.1 データベース管理システムの概要 7.2 データベースの格納方式 7.3 問合せ処理.
第3回 CPUの管理と例外処理 OSによるハードウェアの管理 CPUの構成、動作 CPUの管理 例外処理、割り込み処理 コンテキストスイッチ
Linuxカーネルについて 2014/01.
オペレーティングシステム i386アーキテクチャ(2)
メモリ管理 4.3, 4.4 章 さだ.
ファイルシステムAPIと メモリマップドファイル
型付きアセンブリ言語を用いた安全なカーネル拡張
イベント通知機構・メモリ保護API.
AMD64の仮想化技術を利用した 仮想マシンモニタの実装
全体ミーティング 金田憲二.
コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第1週目 アセンブリ言語講座
アルゴリズムとデータ構造 補足資料11-1 「mallocとfree」
オペレーティングシステム イントロダクション
Ibaraki Univ. Dept of Electrical & Electronic Eng.
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
アルゴリズムとデータ構造 補足資料4-1 「メモリと配列」
アルゴリズムとデータ構造 補足資料5-1 「メモリとポインタ」
オペレーティングシステムJ/K (仮想記憶管理)
第7回 授業計画の修正 中間テストの解説・復習 前回の補足(クロックアルゴリズム・PFF) 仮想記憶方式のまとめ 特別課題について
コンピュータの基本構成について 1E16M001-1 秋田梨紗 1E16M010-2 梅山桃香 1E16M013-3 大津智紗子
データ構造と アルゴリズム 第五回 知能情報学部 新田直也.
先週の復習: CPU が働く仕組み コンピュータの構造 pp 制御装置+演算装置+レジスタ 制御装置がなければ電卓と同様
オペレーティングシステム i386アーキテクチャ(1)
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
第5回 メモリ管理(2) オーバレイ方式 論理アドレスとプログラムの再配置 静的再配置と動的再配置 仮想記憶とメモリ階層 セグメンテーション
コンピュータアーキテクチャ 第 9 回.
アルゴリズムとデータ構造1 2006年7月4日
Mondriaan Memory Protection の調査
オペレーティングシステムJ/K (管理のためのデータ構造)
アルゴリズムとデータ構造1 2009年6月15日
オペレーティングシステムJ/K (並行プロセスと並行プログラミング)
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
コンピュータアーキテクチャ 第 5 回.
SMP/マルチコアに対応した 型付きアセンブリ言語
コンパイラ 第12回 実行時環境 ― 変数と関数 ― 38号館4階N-411 内線5459
アルゴリズムとデータ構造 2010年6月17日
ソフトウェア工学 知能情報学部 新田直也.
L4-Linux のメモリ管理における問題点とその解決策
Ibaraki Univ. Dept of Electrical & Electronic Eng.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
Presentation transcript:

メモリ管理(1)

メモリ思い出そう プログラムの実行のために,ありとあらゆるものがメモリに格納されなくてはならなかったことを グローバル変数,配列 局所変数・配列(スタック) 実行中に確保される領域(malloc, new) プログラムのコード

えっと,じゃ,12300番地から17300番地までがあいてるのでそこをどうぞ メモリの「管理」とは 「誰が」,メモリの「どの部分を」,「今」,使ってよいかを記憶しておき, 「メモリ割り当て要求」にこたえることができるようにすること 帳簿 メモリ使用状況   えっと,じゃ,12300番地から17300番地までがあいてるのでそこをどうぞ 5000バイトくださいな

あらゆるメモリ管理に共通の概念 割り当て(allocation)と解放(deallocation) 割り当て 解放 割り当て 1000バイトくださいな 30000番地をどうぞ 割り当て 30000番地返します オッケー 解放 500バイトくださいな また30000番地をどうぞ 割り当て

OSのメモリ管理API Unix : brk, sbrk, mmap, etc. Win32 : VirtualAlloc, VirtualFree, MapViewOfFile, etc. 詳しくは後述する

普段良く使っているメモリ割り当てプリミティブ・APIの実例 C グローバル変数, スタック, malloc/free, strdup, etc. C++ グローバル変数, スタック, new/delete, STLの諸操作, … Java, C# new, Stringの連結などの諸操作 Garbage Collection Python リスト, 辞書, オブジェクト生成, 文字列連結などの諸操作 Garbage collection Perl, シェルスクリプト,Visual Basic, …

注: OSのAPIとプログラミング言語のAPIの関係 malloc/freeなどはOSとアプリケーションプログラムの仲介屋(問屋・小売店・客) OSのAPI (sbrk, brk, etc.) malloc/ free OS メモリ管理 ライブラリ (malloc/freeなど) アプリケーション

そもそもメモリ管理は難しいか? 空き領域をきちんと記録しておいて,メモリ割り当て・解放要求に答えればよい? アドレス emacs IE (物理メモリ量) アドレス emacs IE enshu.exe gcc enshu.exe 物理メモリ

OSがない状態での安直なメモリ管理問題点 危険な相互作用 他のプロセスが利用しているメモリを,他のプロセスが読み書きできてしまう 割り当てられていないメモリでも読み書きできてしまう メモリ量の制限 合計の「割り当て中」メモリ量物理メモリ量 アドレスの被再現性 並行して実行しているプロセスの有無などで,割り当てられるアドレスが異なる

OSが提供すべき「強い」メモリ管理 メモリ アドレス プロセスAの「メモリ」 OS プロセスBの「メモリ」 プロセスCの「メモリ」 搭載メモリ量と無関係に定まる上限 メモリ アドレス L プロセスAの「メモリ」 割り当て・解放 OS L プロセスBの「メモリ」 L プロセスCの「メモリ」

仮想記憶(Virtual Memory) 今時のOSが必ず提供する重要機構 あたかも 「各プロセスが」 「他のプロセスと分離された」 「物理メモリ量に依存しない量の(たくさんの)」 メモリを持っているかのような錯覚を与える

仮想記憶 危険な相互作用 メモリ量の制限 アドレスの被再現性 各プロセスのメモリが「分離」している 割り当てられていないメモリへのアクセスを防ぐ メモリ量の制限 割り当て可能なメモリ量が物理メモリ量に依存しない(もちろん無制限ではない) アドレスの被再現性 割り当てられるアドレスは他のプロセスの有無によらない

以降の話 以下ではこれらの機能がどのように実現されているのかを見る 重要用語・概念 CPUの機能 OSの提供するメモリ管理API (次週)

仮想記憶の仕組み概要 アドレス変換 ページング プログラムが用いるアドレス(論理アドレス)と,メモリハードウェアが用いるアドレス(物理アドレス)は同一ではない ページング すべての「割り当て済み」領域に,常に物理的なメモリ領域が割り当てられているわけではない いったん確保された物理メモリも他で必要になったらディスクに追い出される

重要概念 論理アドレスと物理アドレス 論理アドレス 物理アドレス プログラムが理解(メモリアクセス時に指定)するアドレス メモリハードウェアが理解するアドレス

論理アドレス プログラムは論理アドレスを用いてメモリをアクセスする 複数の論理アドレス空間が存在する main() { p = 10000; printf(“%d\n”, *p); } 複数の論理アドレス空間が存在する プロセス論理アドレス空間 論理アドレス10000 をアクセス

論理アドレス空間 複数の論理アドレス空間は分離している プロセスAの10000番地とプロセスBの10000番地は「別の場所」 各論理アドレス空間の大きさは,物理メモリ量によらない(ポインタのbit数とOSの設計で決まる) 232 – 1 論理アドレス空間 A 論理アドレス空間 B 論理アドレス空間 C

物理アドレス メモリハードウェアが理解するアドレスは物理アドレス 可能な物理アドレスは0 … 搭載メモリ量 – 1 (当然)各アドレスは計算機にひとつだけ存在する CPU メモリ rd 30000 物理アドレス

これらすべての帰結(1) アドレス空間, 論理アドレスの組を,対応する「物理アドレス」に変換する仕組み(アドレス変換; Address Translation)が必要 アドレス空間ID, 論理アドレス 物理メモリ Paddr ASID, Laddr アドレス変換機構 CPU

これらすべての帰結(2) 「割り当て中のメモリ」すべてに物理メモリを確保することは不可能 ディスクを補助記憶域としてうまくやりくり(ページング; paging)する必要がある

メモリ管理のためにCPUが備える機構

メモリ管理ユニット(Memory Management Unit; MMU) 役割: すべてのメモリアクセス命令実行に介在して,以下を行う アクセス権の検査 アドレスが物理メモリ上に存在するかの検査 アドレス変換 その他 MMU

メモリアクセス命令時のCPUの動作(概要) アクセス権検査; アドレス変換; アクセス 例: load [r1], r2 (storeもほぼ同じ) レジスタr1の中身がアドレスaだったとする aに対応する物理 アドレスpが存在? アドレス変換 例外(トラップ)発生 page fault NO aはread可? アクセス権検査 例外(トラップ)発生 protection fault NO YES 物理アドレスpを読む

ページ CPU (MMU)は各アドレスに対応する 保護属性,アドレス変換をすべてのアドレスに個別に保持するのは不可能 保護属性(read/write可 etc.) 物理アドレス などを記憶する必要がある 保護属性,アドレス変換をすべてのアドレスに個別に保持するのは不可能 「ページ」(対応付けの単位)の概念

ページ ハードウェアが,保護属性,アドレス変換,などを保持する単位 典型的には4096バイト,8192バイトなどの連続したアドレスの範囲 0x1000 ASID, 論理アドレス  属性や物理アドレス ASID, 論理ページ番号  属性や物理ページ番号 0x2000 0x3000 0x4000

Mapping不在 (対応する物理ページなし) アドレスとページ 例: 32 bit論理アドレス.4096バイトページ アドレス空間ID, 論理ページ番号をキーとして対応付けを保持する 20 bit 12 bit 論理ページ番号 ページ内オフセット 物理ページ番号 保護属性 その他の属性 Mapping不在 (対応する物理ページなし) 1

重要な属性 保護属性 その他の属性 読み出し可(readable) 書き込み可(writable) ユーザモードでアクセス可 参照(reference) bit (read時にset) 汚れ(dirty) bit (write時にset)

Mapping不在 対応する物理ページが現在, 存在しないことを示す 二つの場合がある CPUは両者を区別しない(OSが区別する) 論理的に割り当てられていない そこをアクセスするのは実際, 違反 論理的には割り当て中.だが, OSが「たった今は」物理メモリを割り当てていない CPUは両者を区別しない(OSが区別する)

対応付けの実際 ページテーブル TLB (Translation Lookaside Buffer) メモリ上に置かれた表 論理アドレス空間, 論理ページ番号をキーとして物理ページ番号,属性を値とする表 TLB (Translation Lookaside Buffer) CPU内にある, 通常100エントリ程度の連想記憶(通常fully associative) 役割: ページテーブルのキャッシュ

工夫のない対応付けに必要なページテーブルの大きさ 仮定 32 bit論理アドレス. 20 bitページ番号 1エントリ32 bit (物理ページ番号+属性) 220 ×4 × n = 4n MB n : 論理アドレス空間の数  同時に存在するプロセス数 まだ大きすぎる(もう一工夫)

ページテーブルの構造 「ほとんど空」の論理アドレス空間を小さく表現する 多段のページテーブル

多段のページテーブル 10 bit 10 bit 12 bit a1 a2 o a1 a2

64bitアドレス? Madhusudhan Tallurl, Mark D. Hill, Yousef A. Khalidi. A New Page Table for 64-bit Address Spaces. SOSP 1995

メモリアクセス時のCPUの動作: まとめ (read) read(a) { p,attr = lookup_TLB(a); if (!found) p,attr = lookup_page_table(a); if (!found) raise page fault; if (!attr.readable) raise protection fault; if (!attr.user && CPU_mode == user) raise protection fault; read p; /* in cache or memory */ set reference bit for a; }

Writeの場合 write(a, v) { p,attr = lookup_TLB(a); if (!found) p,attr = lookup_page_table(a); if (!found) raise page fault; if (!attr.writable) raise protection fault; if (!attr.user && CPU_mode == user) raise protection fault; write v to p; /* in cache or memory */ set reference/dirty bit for a; }

余談:セグメンテーション ページング以前の仮想記憶 セグメント: (ページよりも大きな)連続したアドレスの範囲 必要に応じて伸ばせる 各論理アドレス空間で割り当て中のメモリは,少数(数個)のセグメントとする 必要に応じてセグメントを丸ごと移動,ディスクに退避 テキスト セグメント データ セグメント スタック セグメント

そういえばセグメンテーションフォルトって何だっけ セグメントを越えたアクセス 今日的には,protection fault, access violation