galvinから仮想メモリ管理について勉強していましたが、このステートメントを理解できません:
論理メモリを物理メモリから分離するだけでなく、仮想メモリを使用すると、ページ共有を通じてファイルとメモリを複数のプロセスで共有できます。これにより、次の利点が得られます。
仮想メモリを使用すると、プロセスの作成中に fork() システム コールでページを共有できるため、プロセスの作成が高速化されます。
ページを と共有するにはどうすればよいfork()ですか? どうか明らかにしてください。
galvinから仮想メモリ管理について勉強していましたが、このステートメントを理解できません:
論理メモリを物理メモリから分離するだけでなく、仮想メモリを使用すると、ページ共有を通じてファイルとメモリを複数のプロセスで共有できます。これにより、次の利点が得られます。
仮想メモリを使用すると、プロセスの作成中に fork() システム コールでページを共有できるため、プロセスの作成が高速化されます。
ページを と共有するにはどうすればよいfork()ですか? どうか明らかにしてください。
このテキストは、fork() に対して行われたコピー オン ライトの最適化について言及していると思います。
基本的に fork() はプロセスを複製し、そのメモリ全体を複製します。これには、特に多額のお金を使用するプロセスの場合、長い時間がかかる場合があります。さらに、 fork() の直後に exec() が続き、前のコピーが無意味になることはよくあることです。
fork() ごとにすべての作業を行う代わりに、最新の Unix は新しいプロセスを作成しますが、すべてのメモリをコピーしません。元のプロセスと新しいプロセスの両方の仮想メモリ ページが同じ物理ページを指しているだけです。
これにより、コピーの削減とメモリ使用量の削減という点で、 fork() のコストが大幅に削減されます。
欠点は、 fork() されたプロセスまたは元のプロセスがページに書き込むたびに、書き込みで例外が発生し (物理ページが読み取り専用としてマークされているため)、最終的にページがコピーされることです。幸いなことに、これはそれほど頻繁には発生しないことがわかっています。
同じまたは異なる仮想アドレス ページを持つ 2 つのプロセスが同じ物理メモリ フレームを共有する場合、ページは fork によって共有される可能性があります。ページテーブルに同じフレーム番号のエントリがあります