2016-11-05 4 views
0

DLLの場合、実行可能ファイルはプロセス間で共有されています。しかし、ユーザが定義したプログラムの場合、2つの端末で "test"を実行すると、 "test"と呼ばせてください。プログラム実行可能ファイルは、これらの2つのプロセスで共有されるのでしょうか、またはそれぞれが個別のコピーを取得しますか?ありがとう。Linuxでは、同じユーザープログラムを実行している2つのプロセス間で実行可能なバイナリが共有されていますか?

+0

両者は異なるプロセスIDをお持ちの場合、私は実行可能コードがあまりにも違うだろうと思います。 –

+1

あなたの質問は曖昧です。あなたが 'DLL'と言った瞬間に、共有オブジェクトが気になります。 Linuxでは '* .so'ファイルと同等です。これらの共有オブジェクトは、ユーザープログラムがコンパイルされるとき、またはユーザープログラムがそれをロードするときにメモリにロードされます。しかし、あなたは2つのプログラムが同時に実行されるのを追跡しました。これは、ユーザー空間のコンテキストではまったく共有されていません。ディスク上に置かれたバイナリは、最初の実行によって排他的にロックされないため、共有されます。両方の実行はメモリ内に独自のコピーを持ち、両方とも別のプログラムカウンタ、スタックポインタ、変数などを持ちます。 – alvits

答えて

1

まず、ファイルがカーネルのページキャッシュにコピーされます。それがすでにある場合、2回目の実行でこのキャッシュされたものが使用されます。 1つのファイルにつき1つのキャッシュ。

+0

私はあなたがデータキャッシュを参照していると思います。プログラムのロード方法が異なります。実際には、 'fork()'や 'clone()'を呼び出すとプロセスが複製され、すべてがコピーされますが、それぞれ前方に移動すると独自のコピーが作成されます。 – alvits

0

テキストセクションは共有されています(コード)。ヒープは共有されません。

ディスクから読み込まれたものはすべて、ディスクキャッシュを共有します。

@alvitsは、ヒープがフォーク上に複製されるが、コピーオンライト(COW)で行われます。つまり、必要に応じて複製されます。データが変更されない場合、新しいメモリを占有しません。

この答えは同じです:how is a shared library file called by two different processes in Linux?

関連する問題