Slide 1

Slide 1 text

仮想記憶 ~ 確認編 ~ Jan. 23rd, 2023 Satoru Takeuchi twitter: satoru_takeuchi

Slide 2

Slide 2 text

はじめに ● 「その54 仮想記憶 ~概念編~」で説明したことを実機で確認 ● 話を簡単にするために実行ファイルはPIEではないとする ○ その35 Address Space Location Randomization

Slide 3

Slide 3 text

おさらい: 仮想記憶 ● プロセスごとに固有の仮想アドレス空間を持つ ○ プロセスは仮想アドレスしか指定できない ○ 仮想アドレスにアクセスするとカーネルとハードウェアが連携して物理アドレスに変換し、物理メモリ にアクセス 物理メモリ(システムに搭載されているメモリ ) プロセスAの 仮想アドレス空間 物理アドレス空間 プロセスAのメモリ プロセスBのメモリ プロセスBの 仮想アドレス空間

Slide 4

Slide 4 text

実験してみよう ● 実験プログラム 1. グローバル変数fooの値とアドレスを表示して ENTERキーが押されるのを待つ 2. もう一度(1)と同じことをする 3. fooの値を書き換えた後に fooの値とアドレスを表示して ENTERキーが押されるのを待つ ● やること 1. 上記プログラムを2つ動かす。それぞれを A,Bとする 2. 2つのプログラムが同じアドレスにマップされていることを確認 3. A、Bともにfooの値とアドレスが同じであることを確認 4. Aだけfooの値を書き換える(Aをstep2まで実行) 5. Bのfooの値は変わってないことを確認 (Bをstep2まで実行) 6. Bのfooの値を書き換える(Bをstep2まで実行)

Slide 5

Slide 5 text

初期状態 物理メモリ(システムに搭載されているメモリ ) プロセスAの 仮想アドレス空間 物理アドレス空間 プロセスAのメモリ プロセスBのメモリ プロセスBの 仮想アドレス空間 foo(=0) foo(=0) &foo (=0x571260) &foo (0x571260)

Slide 6

Slide 6 text

プロセスAのfooの値を書き換え 物理メモリ(システムに搭載されているメモリ ) プロセスAの 仮想アドレス空間 物理アドレス空間 プロセスAのメモリ プロセスBのメモリ プロセスBの 仮想アドレス空間 foo(=100) foo(=0) &foo (=0x571260) &foo (0x571260)

Slide 7

Slide 7 text

プロセスBのfooの値を書き換え 物理メモリ(システムに搭載されているメモリ ) プロセスAの 仮想アドレス空間 物理アドレス空間 プロセスAのメモリ プロセスBのメモリ プロセスBの 仮想アドレス空間 foo(=100) foo(=100) &foo (=0x571260) &foo (0x571260)

Slide 8

Slide 8 text

まとめ ● 「その54 仮想記憶 ~概念編~」で述べたことが実証できた ● 📝「どうやって仮想アドレスを物理アドレスに変換しているか」について説明する動 画を作成見込み