1

多くの本や投稿を読んだとしても、「同じ物理アドレスを指す複数の独立した仮想アドレス」の利点をよく理解していません。

たとえば、同様の質問で、物理アドレス指定と仮想アドレス指定の概念の違い

投稿は、プログラムが互いにクラッシュしないと主張しています、そして

「一般的に、特定の物理ページは1つのアプリケーションの仮想空間にのみマップされます」

さて、http://tldp.org/LDP/tlk/mm/memory.htmlの「共有仮想メモリ」のセクションには、次のように書かれています。

「たとえば、bashコマンドシェルを実行しているシステムに複数のプロセスが存在する可能性があります。各プロセスの仮想アドレス空間に1つずつ、bashのコピーを複数持つのではなく、物理メモリに1つのコピーだけを置き、すべてのプロセスを実行することをお勧めします。 bashで共有してください。」

1つの物理アドレス(シェルプログラムなど)が2つの独立した仮想アドレスにマップされている場合、これがクラッシュしないようにするにはどうすればよいですか?物理アドレスを使用するのと同じではないでしょうか。

仮想アドレス指定は何を提供しますか?これは物理アドレス指定では不可能または便利ではありませんか?仮想メモリが存在しない場合、つまり2つが同じ物理メモリを直接指している場合はどうでしょうか。調整メカニズムを使用することで、それでも機能すると思います。では、なぜこれらのものを「仮想アドレス指定、MMU、仮想メモリ」に煩わせるのでしょうか。

4

2 に答える 2

4

この機能の主な用途は2つあります。

まず、共有ページを介して通信できるプロセス間でメモリを共有できます。実際、共有メモリはIPCの最も単純な形式の1つです。

ただし、共有読み取り専用ページを使用して、無駄な重複を回避することもできます。ほとんどの場合、プログラムのコードはメモリにロードされた後も変更されないため、そのメモリページはそのプログラムを実行しているすべてのプロセス間で共有できます。明らかに、コードのみが共有され、スタック、ヒープ、および一般にプログラムのデータ(または必要に応じて状態)を含むメモリページは共有されません。

このトリックは「コピーオンライト」で改善されています。実行可能ファイルのコードは通常、実行時に変更されませんが、実際に自己変更するプログラムがあります(これらは、開発のほとんどがまだアセンブリで行われていた過去には非常に一般的でした)。このような機能をサポートするために、オペレーティングシステムは前に説明したように読み取り専用の共有を行いますが、共有ページの1つで書き込みを検出すると、そのようなページの共有を無効にし、そのページの独立したコピーを作成して、プログラムに書き込みを許可します。そこの。

このトリックは、データが変更されない可能性が高いが、変更される可能性がある状況で特に役立ちます。

この手法を使用できるもう1つのケースは、プロセスがフォークする場合です。すべてのメモリページをコピーする代わりに(子プロセスがすぐに実行する場合は完全に役に立たないexec)、新しいプロセスは、コピーオンライトですべてのメモリページを親と共有します。モード、迅速なプロセス作成を可能にし、それでも「古典的な」フォークの振る舞いを「偽造」します。

于 2011-07-15T13:04:29.950 に答える
2

1つの物理アドレス(シェルプログラムなど)が2つの独立した仮想アドレスにマップされている場合

複数のプロセスを構築して、メモリの一部を共有できます。たとえば、一方はメモリに書き込むサーバーとして機能し、もう一方はメモリから読み取るクライアントとして機能するか、読み取りと書き込みの両方を行います。これは、プロセス間通信(IPC)を実行するための非常に高速な方法です。(パイプやソケットなどの他のソリューションでは、データをカーネルにコピーしてから、共有メモリがスキップする他のプロセスにコピーする必要があります。)ただし、他のIPCソリューションと同様に、プログラムは共有メモリ領域への読み取りと書き込みを調整する必要があります。いくつかのメッセージングプロトコルによって。

また、例の「コマンドシェルを実行しているシステム内のいくつかのプロセス」は、コードを含むアドレス空間の読み取り専用部分をbash共有します。同じメモリ内コードを同時に実行でき、変更できないため、お互いを殺すことはありません。

引用で

一般に、特定の物理ページは1つのアプリケーションの仮想空間にのみマップされます

「一般的な」部分は実際には「通常」である必要があります。メモリページは、設定しない限り、または読み取り専用でない限り、共有されません。

于 2011-07-15T12:56:17.247 に答える