Copy-On-Writeはページフォルトに基づいていませんか?

Copy-On-Writeはページフォルトに基づいていませんか?

オペレーティングシステムの概念

fork()親プロセスと子プロセスが最初に同じページを共有できるようにすることで、動作中の書き込み中のコピーという技術を使用できます。 ...記録中にコピーを使用してページをコピーすることを決定するときは、使用可能なページが割り当てられている場所を記録することが重要です。多くのオペレーティングシステムでは、これらの要求に対して無料のページプールを提供しています。これらの空きページは通常、プロセスのスタックまたはヒープを拡張する必要がある場合、または書き込み中にコピーするためにページを管理する必要がある場合に割り当てられます。オペレーティングシステムは通常、要求時にゼロを埋めるという技術を使用してこれらのページを割り当てます。要求に応じてゼロ化されるページは、割り当てられる前にゼロ化され、前の内容がクリアされます。

Copy-On-Writeはページフォルトに基づいていませんか? (私はそうは思わない)

書き込み中にコピーとページフォルトが同じ空きページプールを共有しますか?そうでなければなぜですか? (私はそうは思わない)

malloc()ページフォルトに基づいて実装されていますか? (と思いますが、そのプールがページフォルトによって使用されていない場合は、書き込み中にコピーと同じ使用可能なページプールを共有する理由はわかりません。)

ありがとうございます。

ベストアンサー1

(タグが付いているから、私はこの文脈で答えました。これらのどれもLinuxに限定されていません。 )

Copy-On-Writeはページフォルトに基づいていませんか?

ページフォルトに基づいています。 「コピー」ページは読み取り専用として表示されます。プロセスが書き込みを試みると、CPUに障害が発生し、カーネルは書き込みを再開する前にページをコピーします。

書き込み中にコピーとページフォルトが同じ空きページプールを共有しますか?そうでなければなぜですか?

はい、そうです。

malloc()ページフォルトに基づいて実装されていますか?

malloc()アドレス空間や割り当てられたページ自体は操作されず、完全にCライブラリによって処理されます。ヒープにメモリを割り当てるために使用される関数は次のとおりです。brk()はい、ページエラーに依存します。割り当てられたページが存在しないとマークされます。これは、ページがメモリからアクセス可能かどうかを追跡するためにカーネルとMMUによって使用される対応するページテーブルエントリの「存在」ビットに依存します。存在しないページにアクセスするとエラーが発生し、カーネルはページを割り当て、誤ったコマンドを再開します。

おすすめ記事