私はUbuntu 14.04 LTSに取り組んでいます。
- 次の 2 つのファイルがあります
file1.c
。file2.c
- それらはそれぞれ と にコンパイルされ
exec1
ますexec2
。file2.c
静的ライブラリの関数を利用します。
exec1
exec2
を使用して仮想アドレス空間にマップし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);
次の一連のイベントが発生します。
exec1
実行されます。exec1
その仮想アドレス空間へのmmapsexec2
(ここで正確に何が起こるのでしょうか?)exec2
が実行されます (この段階でexec1
は、バックグラウンドで実行され続けます。正確には何が起こっているのでしょうか?)
exec2
PS:がディスク上にあり、それが?mmap
によって編集されるとどうなるかを知りたい exec1
に対応する仮想アドレス空間とページ テーブルはどのようにexec1
変化しますか?
次に、exec2
実際に実行されるとメインメモリに持ち込まれます。物事はどのように変化しますか?で使用される静的ライブラリ関数はメモリ内のどこにありますfile2.c
か? 私はそのプロセスについて明確な考えを持っていません。誰でもこのトピックに光を当てることができますか?