あるプロセスが別のプロセスからフォークされたとします。つまり、fork 関数呼び出しによってプロセスを複製します。フォークはコピー オン ライト メカニズムであるため、フォークされたプロセスまたは元のプロセスがページに書き込むたびに、書き込む新しい物理ページが取得されます。私が理解したことは、フォークされたプロセスと元のプロセスの両方が実行されている場合、次のようになります。
--> フォークすると、元のプロセスとフォークされたプロセスのすべてのページに読み取り専用アクセスが与えられるため、カーネルはどのページが書き込まれたかを知ることができます。これが発生すると、カーネルは新しい物理ページを書き込みプロセスにマップし、以前のコンテンツをそれに書き込み、そのページへの書き込みアクセスを許可します。今はっきりしていないのは、フォークと元のプロセスの両方が同じページに書き込む場合、そのうちの1つが元の物理ページを保持するか(フォークする前)、または両方が新しい物理ページを取得するかです。第二に、フォークされたプロセスと元のプロセスのすべてのページに、フォーク時に読み取り専用アクセスが与えられるという私の仮定は正しいですか?
--> 各ページ フォールトが割り込みをトリガーするため、元のプロセスまたはフォークされたプロセスへの書き込みごとに実行速度が低下します。アプリケーションについて知っていて、大量の連続したメモリ ページが書き込まれることがわかっている場合、グループ内のページの 1 つが複数のページ (たとえば、ページのグループ) に書き込み許可を与える方がよいのではないでしょうか。に書かれています。これにより、ページ フォールト処理による割り込みの数が減ります。ではない?確かに、この場合、不必要にコピーを作成することがありますが、512 個のlong型の変数(ページの 4096 バイト) を書き込むよりも、割り込みの方がオーバーヘッドがはるかに大きいと思います。私の理解は正しいですか、それとも何か不足していますか?