3

動的ライブラリに関する記事を読みました。そして、以下の文が理解できませんでした。

複数のライブラリを必要とするプログラムの場合、共有ライブラリを使用すると、プログラムのメモリ フットプリントを (ディスク上と実行時のメモリ内の両方で) 削減できます。これは、複数のプログラムが共有ライブラリを同時に使用できるためです。したがって、一度に必要なライブラリのコピーはメモリ内に 1 つだけです。

ld-linux.so再配置処理(動的ライブラリのロードなど)を行うのはの義務です。

ld-linux.so必要なライブラリがロードされたことをどのように知るのですか?

プログラムはそれらをどのように共有しますか?

ライブラリが更新された場合はどうなりますか? 新しく起動したプログラムは、新しいプログラムをロードするか、メモリに常駐するプログラムを使用しますか?

4

1 に答える 1

0

申し訳ありませんが、これはすべての質問に対する回答ではありません。共有部分に回答するだけです。

その秘訣は、仮想メモリ管理です。プログラムまたは共有ライブラリがメモリにロードされると、そのコードはプロセスの仮想メモリ空​​間に単純にマップされます。書き込み保護されたメモリ領域としてマップされるため、同じメモリ ページを任意の数の仮想メモリ アドレス空間にマップできます。仮想メモリ マネージャが知る必要がある唯一のことは、ファイルのどの部分がページを「バックアップ」しているかということです。

複数のプロセスが同じパーツを参照する場合、仮想メモリ システムは常にこのパーツを 1 回だけロードします。これは、どのメモリ ページが現在メモリに常駐しているかを記憶しているためです。

共有ライブラリを使用する 1 つのプログラムが、同じ共有ライブラリを使用する別のプロセスが開始される前に終了する場合でも、ほとんどの場合、仮想メモリ マネージャーは共有ライブラリの再読み込みを回避できます。これは、共有ライブラリを含むメモリ ページが未使用としてマークされるためですが、メモリが他の目的で必要とされない限り、いわゆるページ キャッシュがメモリ ページの内容を記憶しています。また、共有ライブラリが再ロードされると、VM は必要なコードをまだ含んでいるメモリ ページを検索するだけです。

于 2013-10-08T13:21:31.960 に答える