pmap
私はメモリマッピングがどのように行われるかを示すプロセスを知っています。たとえば、pmap 出力の最初の行は、プロセス実行可能ファイルのテキストセグメントのメモリマップを示しています。非常に大きな実行ファイルがあり、コードサイズが大きいとしましょう。小さなテキストセグメント(小さな実行可能ファイル)の場合、pmampは400000 - 401000 - 4096 B - 4 KiB
マップされたテキストセグメントを表示します。
(1)テキストセグメントが本当に大きい場合、どのようにマッピングされますか? (2)コードの実行が進むにつれて、必要なページに基づいて動的にマッピングされますか?
答え1
実行時に必要な実行可能ファイルの部分は現状のままマッピングされ、マッピングは全体の範囲をカバーします。ページ要求時にのみロードされますが、そのためにはマッピングが事前に存在する必要があります。
たとえば、Emacsを使用すると、次のようになります。
0000000000400000 88K r---- emacs-26.3
0000000000416000 2044K r-x-- emacs-26.3
0000000000615000 372K r---- emacs-26.3
0000000000672000 32K r---- emacs-26.3
000000000067a000 36560K rw--- emacs-26.3
テキストセグメントは、次の実行可能ファイルのセクションr-x
に対応する2044KiBセグメントです。.text
例えば size -A
):
section size addr
...
.text 2049234 4324272
...