我正在开发 Ubuntu 14.04 LTS。
- 有两个文件:
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
映射exec2
到它的虚拟地址空间(这里到底发生了什么?)exec2
被执行(在这个阶段,exec1
一直在后台运行。现在到底发生了什么?)
PS:我想知道当exec2
它在磁盘上并且它是mmap
由 ed时会发生什么exec1
?虚拟地址空间和对应的页表是如何exec1
变化的?
接下来,当exec2
实际执行时,它被带到主存中。事情如何变化?内存中使用的静态库函数在file2.c
哪里?我对这个过程没有一个清晰的概念。任何人都可以阐明这个话题吗?