Slide 1

Slide 1 text

プロセスへのメモリ割り当て(1) mmap Jul. 8th, 2024 Satoru Takeuchi X: satoru_takeuchi 1

Slide 2

Slide 2 text

はじめに ● 前提 ○ メモリはプロセスが起動するときに割り当てられる ○ 足りなければ動的にメモリを獲得する ● はなすこと ○ プロセスはどうやって動的にメモリを獲得するのか ● 備考 ○ 📝 デマンドページング(今は意味がわからなくて OK)は無いものとして話します ■ たぶん次回説明します 2

Slide 3

Slide 3 text

プロセスはどうやって動的にメモリを獲得するのか ● mmapというシステムコールを使います ○ 📝 brkというのもありますが割愛 ● インタフェース: man 2 mmapより抜粋 ○ void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); ■ length: マップする領域の長さ ■ 戻り値: マップされた領域のアドレス ● バイト単位ではなくページ単位で割り当てる 3

Slide 4

Slide 4 text

mmapのイメージ 4 物理メモリ 仮想アドレス空間 プロセスAのメモリ mmap発行前 mmap発行後 物理メモリ 仮想アドレス空間 プロセスAのメモリ 拡張された領域 未割当 未割当 mmapで割当

Slide 5

Slide 5 text

実機確認 ● mmapによって新規メモリ領域がマップされたことを確認 ● mmap.goプログラム ○ プロセスのメモリマップ (/proc//maps)を表示 ○ mmapでメモリ領域を獲得 ○ プロセスのメモリマップを再度表示 5

Slide 6

Slide 6 text

まとめ ● プロセスへのメモリ割り当てにはmmapというシステムコールを使う ● 割り当てはページ単位で行う 6