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

まとめ ● 仮想記憶はシステム上で複数のプログラムを実行する際の課題を解決できる ○ コード/データのマップ先の重複 ○ データ保護 ● プロセスごとに仮想アドレス空間をもつ ○ プロセスが指定するアドレスは全部仮想アドレス ● 詳細は別動画で