Slide 1

Slide 1 text

仮想アドレスと 物理アドレスの対応を 実機確認してみよう Jun. 15th, 2024 Satoru Takeuchi X: satoru_takeuchi 1

Slide 2

Slide 2 text

はじめに ● プロセスの仮想アドレスと物理アドレスがどう対応しているかはユーザ空間から確 認できる ● 実際に実機確認してみよう ● 環境 ○ CPUアーキテクチャ: x86_64 ○ カーネル: 5.15.0-107-generic ● 📝 x86_64以外でできるかどうかは確認していないので知らないです 2

Slide 3

Slide 3 text

確認方法 ● /proc//pagemapに各プロセスのページテーブル相当の情報がある ● ページ(4KiB)単位で8バイトのデータがメモリアドレス0から並んでいる ● 主なデータ: ○ bit 0 ~ bit 54: page frame number: 4KiBをかけると物理メモリアドレスになる ○ bit 63: present bit ● 読み出すにはCAP_SYS_PTRACE capabilityが必要 ○ Ubuntu 22.04.5のデフォルト設定なら rootならOK ○ 権限が無ければzero fillされる ● 📝 詳細は man procfsを参照 3

Slide 4

Slide 4 text

実機確認 ● vp-conversion.py ○ sudo ./vp-conversion.py <仮想アドレス> ● 仮想端末上で動いているbashの実行ファイルをmapしている領域がどの物理アド レスにマップされているか確認 ○ cat /proc/$$/maps を実行してbashのメモリマップを確認 ○ sudo ./vp-conversion.py $$ <仮想アドレス> を実行してアドレスの対応を見る ● 📝 ある瞬間にページがメモリ上にあったとしても次の瞬間には無くなっているかも しれない。それはまた別動画で 4

Slide 5

Slide 5 text

まとめ ● /proc//pagemapを読めばプロセスの仮想アドレスと物理アドレスの対応がわ かる ● かっこいい 5