萌えハッカーニュースリーダー

2025/11/03 23:04 A Friendly Tour of Process Memory on Linux

出典: https://www.0xkato.xyz/linux-process-memory/
hakase
博士

やあ、ロボ子。今日はLinuxのプロセスメモリについて話すのじゃ。

roboko
ロボ子

博士、よろしくお願いします。Linuxのメモリ管理は奥が深いと聞きます。

hakase
博士

そうじゃ、まずは仮想メモリからじゃ。プログラムは連続したメモリ空間を認識するけど、実際にはLinuxがページ単位で仮想アドレスを物理アドレスに変換しておる。

roboko
ロボ子

なるほど。その対応を管理するのがページテーブルなのですね。

hakase
博士

その通り!そして、VMA(仮想メモリ領域)は、同じ権限と種類のメモリ領域を持つ連続した仮想アドレス範囲のことじゃ。

roboko
ロボ子

`mmap`システムコールは、仮想メモリ領域を予約するために使うんですよね。ファイルや匿名メモリを割り当てる時に。

hakase
博士

そうじゃ。ただし、`mmap`はページアラインメントが必要なのじゃ。あと、ファイル終端を超えたマッピングは許可されるけど、アクセスすると`SIGBUS`が発生するから注意が必要じゃぞ。

roboko
ロボ子

`SIGBUS`は、ファイルマッピングへの書き込みがEOFを超えた時に発生するんですね。覚えておきます。

hakase
博士

ページフォールトについても説明するのじゃ。CPUがアドレス変換に失敗した場合に発生して、カーネルが物理ページを割り当てるか、エラーを返すのじゃ。

roboko
ロボ子

マイナーフォールトとメジャーフォールトの違いは何ですか?

hakase
博士

マイナーフォールトはデータが既にRAMにある場合で、メジャーフォールトはI/Oが必要な場合じゃ。

roboko
ロボ子

なるほど、I/Oが発生するかどうかで区別されるんですね。

hakase
博士

それから、コピーオンライトじゃ。`fork()`時にページを複製せず、書き込み時に初めてコピーを作成することで、メモリ効率を高めるのじゃ。

roboko
ロボ子

メモリ効率化の重要なテクニックですね。

hakase
博士

TLB(Translation Lookaside Buffer)はアドレス変換のキャッシュじゃ。`mprotect`による権限変更時にTLBのinvalidateが発生し、一時的な停止が生じる場合があるから注意じゃ。

roboko
ロボ子

THP(Transparent Huge Pages)についても教えてください。

hakase
博士

THPは大きなページサイズを利用してTLBの負荷を軽減し、パフォーマンスを向上させるのじゃ。匿名メモリとshmem/tmpfsで自動的に有効になるぞ。

roboko
ロボ子

Meltdown対策のPTI(Page Table Isolation)についても触れられていますね。

hakase
博士

そうじゃ。PTIはユーザ空間とカーネル空間で異なるページテーブルを使用し、投機的実行による情報漏洩を防ぐのじゃ。

roboko
ロボ子

セキュリティ対策も重要ですね。

hakase
博士

`/proc/<pid>/maps`や`/proc/<pid>/smaps`などのメモリ管理ツールも便利じゃぞ。プロセスのメモリ使用状況を詳しく調べることができるのじゃ。

roboko
ロボ子

トラブルシューティングのヒントもありがとうございます。`EINVAL`、`ENOMEM`、`SIGBUS`、`EACCES`などのエラー原因を覚えておきます。

hakase
博士

最後に、W^X (Write XOR Execute)は、書き込み可能かつ実行可能なページを同時に許可しないセキュリティポリシーのことじゃ。

roboko
ロボ子

今日はLinuxのプロセスメモリについて、とても勉強になりました!

hakase
博士

どういたしまして。ところでロボ子、メモリが足りなくなったらどうする?

roboko
ロボ子

増設します!

hakase
博士

正解!…って、物理メモリの話じゃないぞ!swapじゃ、swap!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search