3

私は彼女から、 「実行可能ファイルの BSS セグメントはディスクに保存されておらず、カーネルはゼロ ページを BSS アドレス範囲にマップしている」と読みました。誰かがここで何が起こっているかについて詳細な回答を提供できますか?

4

1 に答える 1

12

「実行可能ファイルの BSS セグメントがディスクに保存されていません」

BSS セグメントは、新しいプロセスが作成されたときにゼロで初期化されることが想定されており、実行可能ファイルに一連のゼロを格納するだけではスペースが無駄になるため、実行可能ファイルは、BSS セグメントの開始位置とその大きさを示すだけです。

「そしてカーネルはゼロページをBSS範囲にマップします。」

カーネルが実行可能ファイルから新しいプロセスを構築するとき、BSS 範囲からゼロ ページへのマッピングを作成します。これは、すべてゼロの静的 (仮想) ページです。マッピングにはコピーオンライトが設定されているため、新しいプロセスがBSSページの1つに初めて書き込むとき、書き込みが完了する前に、静的ゼロページの実際のコピーが別のメモリページに割り当てられます.

これにより、(a) 実行可能ファイル内のスペースが節約され、(b) プロセスが決して触れない可能性のある BSS ページを実際に割り当てることが回避されるため、メモリ使用量が節約されますが、それでもすべてのプロセスの BSS セグメントがゼロで初期化されているように見えるという保証が提供されます。要求に応じ。

于 2012-09-11T17:10:22.520 に答える