1

私はUbuntu 14.04 LTSに取り組んでいます。

  • 次の 2 つのファイルがありますfile1.cfile2.c
  • それらはそれぞれ と にコンパイルされexec1ますexec2file2.c静的ライブラリの関数を利用します。

exec1exec2を使用して仮想アドレス空間にマップしmmapます。次の行は からのものfile1.cです。

#define MAX_SIZE_BYTES 4000000
fd = open(exec2_path, O_RDONLY);
addr = mmap(NULL, MAX_SIZE_BYTES, PROT_READ, MAP_FILE | MAP_SHARED, fd, 0);

次の一連のイベントが発生します。

  1. exec1実行されます。
  2. exec1その仮想アドレス空間へのmmaps exec2(ここで正確に何が起こるのでしょうか?)
  3. exec2が実行されます (この段階でexec1は、バックグラウンドで実行され続けます。正確には何が起こっているのでしょうか?)

exec2PS:がディスク上にあり、それが?mmapによって編集されるとどうなるかを知りたい exec1に対応する仮想アドレス空間とページ テーブルはどのようにexec1変化しますか?
次に、exec2実際に実行されるとメインメモリに持ち込まれます。物事はどのように変化しますか?で使用される静的ライブラリ関数はメモリ内のどこにありますfile2.cか? 私はそのプロセスについて明確な考えを持っていません。誰でもこのトピックに光を当てることができますか?

4

1 に答える 1