
オペレーティングシステムの概念
fork()
親プロセスと子プロセスが最初に同じページを共有できるようにすることで、動作中の書き込み中のコピーという技術を使用できます。 ...記録中にコピーを使用してページをコピーすることを決定するときは、使用可能なページが割り当てられている場所を記録することが重要です。多くのオペレーティングシステムでは、これらの要求に対して無料のページプールを提供しています。これらの空きページは通常、プロセスのスタックまたはヒープを拡張する必要がある場合、または書き込み中にコピーするためにページを管理する必要がある場合に割り当てられます。オペレーティングシステムは通常、要求時にゼロを埋めるという技術を使用してこれらのページを割り当てます。要求に応じてゼロ化されるページは、割り当てられる前にゼロ化され、前の内容がクリアされます。
Copy-On-Writeはページフォルトに基づいていませんか? (私はそうは思わない)
書き込み中にコピーとページフォルトが同じ空きページプールを共有しますか?そうでなければなぜですか? (私はそうは思わない)
malloc()
ページフォルトに基づいて実装されていますか? (と思いますが、そのプールがページフォルトによって使用されていない場合は、書き込み中にコピーと同じ使用可能なページプールを共有する理由はわかりません。)
ありがとうございます。
答え1
(タグが付いているからオペレーティングシステム、私はこの文脈で答えました。これらのどれもLinuxに限定されていません。 )
Copy-On-Writeはページフォルトに基づいていませんか?
ページフォルトに基づいています。 「コピー」ページは読み取り専用として表示されます。プロセスが書き込みを試みると、CPUに障害が発生し、カーネルは書き込みを再開する前にページをコピーします。
書き込み中にコピーとページフォルトが同じ空きページプールを共有しますか?そうでなければなぜですか?
はい、そうです。
malloc()
ページフォルトに基づいて実装されていますか?
malloc()
アドレス空間や割り当てられたページ自体は操作されず、完全にCライブラリによって処理されます。ヒープにメモリを割り当てるために使用される関数は次のとおりです。brk()
はい、ページエラーに依存します。割り当てられたページが存在しないとマークされます。これは、ページがメモリからアクセス可能かどうかを追跡するためにカーネルとMMUによって使用される対応するページテーブルエントリの「存在」ビットに依存します。存在しないページにアクセスするとエラーが発生し、カーネルはページを割り当て、誤ったコマンドを再開します。
答え2
Copy on Write
(メモリ管理ユニット)の作成に基づいてimplicit interrupt
実装されます。MMU
ページエラーの代表的な原因は次のとおりです。
Apage fault
も暗黙的な割り込みによって生成されますが、MMU
2つは異なります。ページエラーの原因のいくつかは次のとおりです。
無効なメモリアクセス:page fault
Aは、ユーザープロセスに必要なページがメモリにない場合に発生します。これはPage fault
、プロセスが割り当てられていない仮想アドレス(通常は仮想アドレスと呼ばれる)にアクセスしようとした場合に発生する可能性がsegmentation fault
あります。または、ページが交換された場合でも、これが発生する可能性があります。
書き込み時のコピー:aの1つの理由page fault
は、Copy On write
fork()システムコール中にオペレーティングシステムが子プロセスと親プロセスに同じメモリを割り当て、メモリを読み取り専用としてマークするためです。これにより、コピー損失が大幅に削減されます。子供がexec
後で電話するとしましょうfork
。記録中にコピーを使用しないと、この期間中に複製されたページ全体がフラッシュされますexec
。ページの不在は、親または子がそのページに書き込もうとしたときに発生します。その後、オペレーティングシステムは新しいページを割り当て、読み取り専用の制限を削除します。
必要に応じてコピーします。aのもう1つの理由page fault
は、copy on demand
ユーザープロセスが仮想アドレス範囲内で新しいページを要求したときに、オペレーティングシステムがその物理アドレスを割り当てることなく仮想アドレスを割り当てることができるためです。プロセスがページにアクセスしようとすると、ページ障害が発生します。その後、オペレーティングシステムは仮想ページに対応する物理ページを割り当てる。
だから、ページの欠陥により、新しいページの割り当てが不要になる場合があります。(エラーのために生成された場合)しかし、ページがないために新しいページが必要な場合、そのページはページが記録されたときにサーバーにコピーされるのと同じページプールから提供されます。
malloc
実装はそれとは何の関係もありませんcopy on write
。
ノートオペレーティングシステムCopy on Write
はなしで動作できますCopy on Demand
。効果はあまり良くないけど。ただし、page fault
オペレーティングシステムは「ページング」メカニズムをサポートする必要があります。