オペレーティングシステムの概念
fork()
親プロセスと子プロセスが最初に同じページを共有できるようにすることで、動作中の書き込み中のコピーという技術を使用できます。 ...記録中にコピーを使用してページをコピーすることを決定するときは、使用可能なページが割り当てられている場所を記録することが重要です。多くのオペレーティングシステムでは、これらの要求に対して無料のページプールを提供しています。これらの空きページは通常、プロセスのスタックまたはヒープを拡張する必要がある場合、または書き込み中にコピーするためにページを管理する必要がある場合に割り当てられます。オペレーティングシステムは通常、要求時にゼロを埋めるという技術を使用してこれらのページを割り当てます。要求に応じてゼロ化されるページは、割り当てられる前にゼロ化され、前の内容がクリアされます。
Copy-On-Writeはページフォルトに基づいていませんか? (私はそうは思わない)
書き込み中にコピーとページフォルトが同じ空きページプールを共有しますか?そうでなければなぜですか? (私はそうは思わない)
malloc()
ページフォルトに基づいて実装されていますか? (と思いますが、そのプールがページフォルトによって使用されていない場合は、書き込み中にコピーと同じ使用可能なページプールを共有する理由はわかりません。)
ありがとうございます。
ベストアンサー1
(タグが付いているからオペレーティングシステム、私はこの文脈で答えました。これらのどれもLinuxに限定されていません。 )
Copy-On-Writeはページフォルトに基づいていませんか?
ページフォルトに基づいています。 「コピー」ページは読み取り専用として表示されます。プロセスが書き込みを試みると、CPUに障害が発生し、カーネルは書き込みを再開する前にページをコピーします。
書き込み中にコピーとページフォルトが同じ空きページプールを共有しますか?そうでなければなぜですか?
はい、そうです。
malloc()
ページフォルトに基づいて実装されていますか?
malloc()
アドレス空間や割り当てられたページ自体は操作されず、完全にCライブラリによって処理されます。ヒープにメモリを割り当てるために使用される関数は次のとおりです。brk()
はい、ページエラーに依存します。割り当てられたページが存在しないとマークされます。これは、ページがメモリからアクセス可能かどうかを追跡するためにカーネルとMMUによって使用される対応するページテーブルエントリの「存在」ビットに依存します。存在しないページにアクセスするとエラーが発生し、カーネルはページを割り当て、誤ったコマンドを再開します。