メモリ管理

Similar documents
10-vm1.ppt

メモリ管理

Microsoft PowerPoint - No15›¼‚z‰L›¯.ppt

Microsoft PowerPoint - os ppt [互換モード]

Microsoft PowerPoint - sp ppt [互換モード]

Microsoft PowerPoint - OS09.pptx

Microsoft PowerPoint - OS07.pptx

メモリ管理

Microsoft PowerPoint - No6note.ppt

Operating System 仮想記憶

Microsoft PowerPoint mm

OS

Microsoft PowerPoint mm2

Microsoft PowerPoint - No7note.ppt

DRAM SRAM SDRAM (Synchronous DRAM) DDR SDRAM (Double Data Rate SDRAM) DRAM 4 C Wikipedia 1.8 SRAM DRAM DRAM SRAM DRAM SRAM (256M 1G bit) (32 64M bit)

OS

Microsoft PowerPoint - OS08 [互換モード]

今週の進捗

メモリについて考えてみよう_REL_

Microsoft PowerPoint - os ppt [互換モード]

メモリ管理

01-introduction.ppt

PowerPoint プレゼンテーション

C に必要なコンピュータ知識 C はコンピュータの力を引き出せるように設計 コンピュータの知識が必要

メモリ管理

Microsoft PowerPoint - sp ppt [互換モード]

Intel Memory Protection Extensions(Intel MPX) x86, x CPU skylake 2015 Intel Software Development Emulator 本資料に登場する Intel は Intel Corp. の登録

MMUなしプロセッサ用Linuxの共有ライブラリ機構

04-process_thread_2.ppt

講義計画 1. コンピュータの歴史 1 2. コンピュータの歴史 2 3. コンピュータの歴史 3 4. 論理回路と記憶, 計算 : レジスタとALU 5. 主記憶装置とALU, レジスタの制御 6. 命令セットアーキテクチャ 7. 演習問題 8. パイプライン処理 9. メモリ階層 : キャッシュ

Microsoft PowerPoint - OS11.pptx

Microsoft PowerPoint - OS08.pptx

C プログラミング 1( 再 ) 第 5 回 講義では C プログラミングの基本を学び演習では やや実践的なプログラミングを通して学ぶ

スライド 1

Microsoft PowerPoint ppt

PowerPoint Presentation

Microsoft PowerPoint - 11.pptx

計算機アーキテクチャ

Microsoft PowerPoint pptx

24th Embarcadero Developer Camp

C5

-2 外からみたプロセッサ GND VCC CLK A0 A1 A2 A3 A4 A A6 A7 A8 A9 A10 A11 A12 A13 A14 A1 A16 A17 A18 A19 D0 D1 D2 D3 D4 D D6 D7 D8 D9 D10 D11 D12 D13 D14 D1 MEMR

Linux2.4でのメモリ管理機構

スライド 1

< B8CDD8AB B83685D>

21 章のお話

PowerPoint プレゼンテーション

Microsoft PowerPoint - C++_第1回.pptx

スライド 1

今日の内容 Garbage Collection (GC, ごみ集め ) 参照されなくなったメモリ領域を解放すること 配列境界検査

Microsoft PowerPoint - pc11.ppt

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

PowerPoint プレゼンテーション

第 3 回 Java 講座 今回の内容 今週の Java 講座はコレクション 拡張 for 文, ガベージコレクションについて扱う. 今週の Java 講座は一番内容が薄いも のになるだろう. コレクション コレクションとは大きさが決まっていない配列だと考えればよい. コレクションには List 先

02: 変数と標準入出力

本書は INpMac v2.20(intime 5.2 INplc 3 Windows7/8/8.1に対応 ) の内容を元に記載しています Microsoft Windows Visual Studio は 米国 Microsoft Corporation の米国及びその他の国における登録商標です

memo

PowerPoint Template

ex04_2012.ppt

アドバンスト・フォーマットディスクのパフォーマンス

memo

OS

PowerPoint プレゼンテーション

コンピュータのしくみ

PowerPoint プレゼンテーション

Taro-ポインタ変数Ⅰ(公開版).j

PowerPoint プレゼンテーション

システムソフトウエア2013/1/30 演習問題 学科 学籍番号 氏名 1. つぎの文章の空白を埋めなさい. コンピュータは,CPU( 中央処理装置 ) とメモリ, およびその他の入出力装置から構成されて いる. このうち,CPU は命令の (a) とデコードなどを行う制御部と, 実際の計 算を行う

第2回

-- Home TOC Slide 1 of 32?? (zone, page), Home TOC Slide 1 of 32

PowerPoint プレゼンテーション

Xen 3.0 のすべて 内部実装詳解 VA Linux Systems Japan K.K. 山幡為佐久 Linux Kernel Conference

PowerPoint Presentation

OS 論文購読チャレンジ 仮想マシンのメモリ管理 浅井明里 王力捷

この方法では, 複数のアドレスが同じインデックスに対応づけられる可能性があるため, キャッシュラインのコピーと書き戻しが交互に起きる性のミスが発生する可能性がある. これを回避するために考案されたのが, 連想メモリアクセスができる形キャッシュである. この方式は, キャッシュに余裕がある限り主記憶の

計算機概論

使用する前に

Microsoft PowerPoint - OS12.pptx

Microsoft PowerPoint - OS02.pptx

スライド 1

Microsoft PowerPoint - lec10.ppt

Microsoft PowerPoint - 11Web.pptx

02: 変数と標準入出力

Java における入出力と XML 2011 年 5 月 15 日 海谷治彦 1

プロセッサ・アーキテクチャ

プログラミングI第10回

スライド 1

第1回 プログラミング演習3 センサーアプリケーション

PowerPoint プレゼンテーション

スレッドとプロセス

Microsoft PowerPoint - OS12.pptx

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

ファイナライザを理解する ~ ファイナライザに起因するトラブルを避けるために ~ 2013 年 11 月 25 日 橋口雅史 Java アプリケーションでファイナライザ (finalize() メソッド ) を使用したことがあるプログラマーは多いと思います しかし ファイナライザの仕組みや注意点につ

Prog1_12th

PowerPoint プレゼンテーション

Microsoft PowerPoint - OS10.pptx

Microsoft PowerPoint - OS02.ppt

Microsoft PowerPoint ppt

2006年10月5日(木)実施

Microsoft PowerPoint - ICD2011TakadaSlides.pptx

Transcription:

メモリ管理 (1)

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

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

あらゆるメモリ管理に共通の概念 割り当て (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 OS の API (sbrk, brk, etc.) メモリ管理ライブラリ (malloc/free など ) malloc/ free アプリケーション

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

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

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

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

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

以降の話 以下ではこれらの機能がどのように実現されているのかを見る ハードウェア (CPU) と OS の組み合わせ 重要用語 概念 CPU の機能 OS の提供するメモリ管理 API ( 次週 )

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

多段のページテーブル 10 bit 10 bit a 1 a 2 12 bit o a 1 a 2

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