• 検索結果がありません。

メモリ管理

N/A
N/A
Protected

Academic year: 2021

シェア "メモリ管理"

Copied!
37
0
0

読み込み中.... (全文を見る)

全文

(1)
(2)

メモリ

思い出そう

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

(3)

メモリの「管理」とは

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

(4)

あらゆるメモリ管理に共通の概念

 割り当て(allocation)と解放(deallocation) 1000バイトくださいな 30000番地をどうぞ 30000番地返します オッケー 500バイトくださいな また30000番地をどうぞ 割り当て 解放 割り当て

(5)

OSのメモリ管理API

 Unix : brk, sbrk, mmap, etc.

 Win32 : VirtualAlloc, VirtualFree, MapViewOfFile, etc.

(6)

普段良く使っているメモリ割り当

てプリミティブ・APIの実例

 C

• グローバル変数, スタック, malloc/free, strdup, etc.

 C++ • グローバル変数, スタック, new/delete, STLの諸操作, …  Java, C# • new, Stringの連結などの諸操作 • Garbage Collection  Python • リスト, 辞書, オブジェクト生成, 文字列連結などの諸操作 • Garbage collection

(7)

注: OSのAPIとプログラミング言

語のAPIの関係

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

(8)

そもそもメモリ管理は難しいか?

 空き領域をきちんと記録しておいて,メモリ

割り当て・解放要求に答えればよい?

アドレス 0 512M (物理メモリ量)

emacs IE enshu.exe gcc enshu.exe

(9)

OSがない状態での安直なメモリ

管理

問題点

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

(10)

OSが提供すべき「強い」メモリ管理

OS プロセスAの「メモリ」 アドレス L 搭載メモリ量と無関 係に定まる上限 0 プロセスBの「メモリ」 L 0 プロセスCの「メモリ」 L 0 メモリ 割り当て・解放

(11)

仮想記憶(Virtual Memory)

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

(12)

仮想記憶

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

(13)

以降の話

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

(14)

仮想記憶の仕組み概要

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

(15)

重要概念

論理アドレスと物理アドレス

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

(16)

論理アドレス

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

(17)

論理アドレス空間

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

(18)

物理アドレス

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

(19)

これらすべての帰結(1)

 アドレス空間, 論理アドレスの組を,対応 する「物理アドレス」に変換する仕組み(ア ドレス変換; Address Translation)が必要 アドレス空間ID, 論理アドレス アドレス変換機構 物理メモリ

ASID, Laddr Paddr

(20)

これらすべての帰結(2)

 「割り当て中のメモリ」すべてに物理メモリ

を確保することは不可能

 ディスクを補助記憶域としてうまくやりくり

(21)

メモリ管理のためにCPUが備

える機構

(22)

メモリ管理ユニット(Memory

Management Unit; MMU)

 役割: すべてのメモリアクセス命令実行に 介在して,以下を行う • アクセス権の検査 • アドレスが物理メモリ上に存在するかの検査 • アドレス変換 • その他 MMU

(23)

メモリアクセス命令時のCPUの

動作(概要)

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

(24)

ページ

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

(25)

ページ

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

(26)

アドレスとページ

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

(27)

重要な属性

 保護属性 • 読み出し可(readable) • 書き込み可(writable) • ユーザモードでアクセス可  その他の属性

• 参照(reference) bit (read時にset)

(28)

Mapping不在

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

(29)

対応付けの実際

 ページテーブル

• メモリ上に置かれた表

• 論理アドレス空間, 論理ページ番号をキーと

して物理ページ番号,属性を値とする表

 TLB (Translation Lookaside Buffer)

• CPU内にある, 通常100エントリ程度の連想記

憶(通常fully associative)

(30)

工夫のない対応付けに必要な

ページテーブルの大きさ

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

(31)

ページテーブルの構造

 「ほとんど空」の論理アドレス空間を小さく

表現する

(32)

多段のページテーブル

a1 a2 10 bit 10 bit o 12 bit a1 a2

(33)

64bitアドレス?

 Madhusudhan Tallurl, Mark D. Hill, Yousef A. Khalidi. A New Page Table for 64-bit

(34)

メモリアクセス時の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;

(35)

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;

(36)

余談:セグメンテーション

ページング以前の仮想記憶

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

(37)

そういえばセグメンテーション

フォルトって何だっけ

 セグメントを越えたアクセス

 今日的には,protection fault, access violation

参照

関連したドキュメント

※1・2 アクティブラーナー制度など により、場の有⽤性を活⽤し なくても学びを管理できる学

定可能性は大前提とした上で、どの程度の時間で、どの程度のメモリを用いれば計

効果的にたんを吸引できる体位か。 気管カニューレ周囲の状態(たんの吹き出し、皮膚の発

システムの許容範囲を超えた気海象 許容範囲内外の判定システム システムの不具合による自動運航の継続不可 システムの予備の搭載 船陸間通信の信頼性低下

以上の各テーマ、取組は相互に関連しており独立したものではない。東京 2020 大会の持続可能性に配慮し

高さについてお伺いしたいのですけれども、4 ページ、5 ページ、6 ページのあたりの記 述ですが、まず 4 ページ、5

行ない難いことを当然予想している制度であり︑

保安規定第66条条文記載の説明備考 表66-12電源設備 66-12-1常設代替交流電源設備①