fork()
仮想メモリの使い方を説明する教科書を読んでいます。
現在のプロセスが分岐機能を呼び出すと、カーネルは新しいプロセスのさまざまなデータ構造を生成し、一意のPIDを割り当てます。新しいプロセスの仮想メモリを作成するために、現在のプロセスのmm_struct、領域構造、およびページテーブルの正確なコピーを作成します。各ページを表示しますどちらのプロセスも読み取り専用です。, 2 つのプロセスの各領域構造をプライベート書き込み中にコピーとして表示します。
両方のプロセスのすべてのページを読み取り専用として表示する理由を理解できません。親プロセスのすべてのページが読み取り専用の場合、親プロセスは初期化されていない一部のグローバル変数(部分)を変更できません。.bss
それでは、プログラムはどのように実行されますか?
答え1
親プロセスのページマッピングが書き込み可能なままである場合、親プロセスのすべての変更が直接適用され、物理ページが共有されるため、子プロセスもこれを確認できます。両方のマッピングを読み取り専用に設定すると、すべてのプロセスで行われた変更は非公開になります。