Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
仮想記憶 ~ 概念編 ~ Jan. 15th, 2022 Satoru Takeuchi twitter: satoru_takeuchi
Slide 2
Slide 2 text
はじめに ● 仮想記憶という機能の説明 ○ システム上で複数のプロセスを動作させる際の課題を解決 ○ プロセスごとに独自のメモリ空間を見せる ○ 本動画では概念だけ説明。機能を実現するしくみは別動画で説明 ● 事前に見ておく必要がある動画 ○ その34 実行ファイル ● 話を簡単にするために実行ファイルはPIEではないとする ○ その35 Address Space Location Randomization
Slide 3
Slide 3 text
プロセスが生まれてから消えるまで 1. ユーザが実行ファイルを指定してカーネルにプロセスを実行するよう依頼 2. 実行ファイル内の情報をもとにコードとデータをメモリ上に配置 3. 実行ファイル内に書かれているエントリポイントから実行開始 test(実行ファイル) メモリ コード データ コード データ マップ
Slide 4
Slide 4 text
二つの課題 ● コード/データマップ位置の重複 ● データ保護
Slide 5
Slide 5 text
コード/データマップ位置の重複 ● 例) 同じプロセスを二つ実行 test(実行ファイル) メモリ コード データ
Slide 6
Slide 6 text
コード/データマップ位置の重複 ● 例) 同じプロセスを二つ実行 1. testファイルからプロセスを生成 test(実行ファイル) メモリ コード データ コード データ マップ
Slide 7
Slide 7 text
コード/データマップ位置の重複 ● 例) 同じプロセスを二つ実行 1. testファイルからプロセスを生成 2. testファイルから二つめのプロセスを生成しようとするが … test(実行ファイル) メモリ コード データ コード データ 既にマップ済み
Slide 8
Slide 8 text
データ保護 ● システムに2つのプロセスA,Bが存在すると仮定 プロセスA プロセスB メモリ *) カーネルの存在は省略
Slide 9
Slide 9 text
データ保護 ● お互いのメモリにアクセスできるとまずい プロセスA 盗み見、破壊可能? プロセスB メモリ
Slide 10
Slide 10 text
仮想記憶 ● Linuxや他の多くのOSは仮想記憶という機能によって2つの問題を解決 ○ 📝 他にも方法は色々あるが省略 ● プロセスごとに独自のメモリ空間を見せる 物理メモリ(システムに搭載されているメモリ ) プロセスAの 仮想アドレス空間 物理アドレス空間 プロセスAのメモリ
Slide 11
Slide 11 text
個々のプロセスの挙動 ● プロセスが指定するアドレスはすべて仮想アドレス ○ 物理メモリに直接アクセス不能 物理メモリ(システムに搭載されているメモリ ) プロセスAのメモリ 1. 仮想アドレスXにアクセス 2. アドレス変換& 物理アドレスYにアクセス
Slide 12
Slide 12 text
複数プロセスがある場合 物理メモリ プロセスAの 仮想アドレス空間 プロセスBの 仮想アドレス空間 プロセスAのメモリ プロセスBのメモリ
Slide 13
Slide 13 text
「コード/データマップ位置の重複」の解決 ● 例) 同じプロセスを二つ実行 ○ testファイルからプロセス Aを生成 test(実行ファイル) 物理メモリ コード データ
Slide 14
Slide 14 text
「コード/データマップ位置の重複」の解決 ● 例) 同じプロセスを二つ実行 1. testファイルからプロセス Aを生成 test(実行ファイル) 物理メモリ コード データ Aのコード Aのデータ プロセスAの 仮想アドレス空間
Slide 15
Slide 15 text
「コード/データマップ位置の重複」の解決 ● 例) 同じプロセスを二つ実行 1. testファイルからプロセス Aを生成 2. testファイルからプロセス Bを生成 test(実行ファイル) 物理メモリ コード データ Aのコード Aのデータ プロセスAの 仮想アドレス空間 プロセスBの 仮想アドレス空間 Bのコード Bのデータ *) 実際はコード領域は共有するが説明は省略
Slide 16
Slide 16 text
データ保護 物理メモリ プロセスAの 仮想アドレス空間 プロセスBの 仮想アドレス空間 プロセスAのメモリ プロセスBのメモリ 見えない 見えない
Slide 17
Slide 17 text
まとめ ● 仮想記憶はシステム上で複数のプログラムを実行する際の課題を解決できる ○ コード/データのマップ先の重複 ○ データ保護 ● プロセスごとに仮想アドレス空間をもつ ○ プロセスが指定するアドレスは全部仮想アドレス ● 詳細は別動画で