两个进程之间的代码段共享

时间:2010-06-28 12:07:05

标签: linux

假设我们背靠背运行两个进程说: -

$ grep abc abc.txt ==> pid 100
$ grep def def.txt ==> pid 101

我在“开始Linux编程”一章第11章中读到过程的代码部分将被共享,因为它是只读的。是这样吗?我认为如果只将grep编译为共享库,那么代码部分将被共享。

还有一个问题,在共享库的情况下,操作系统如何知道库已经加载?假设两个进程同时调用共享库函数,那么两个进程的虚拟地址如何转换为指向RAM中相同位置的物理地址?

2 个答案:

答案 0 :(得分:4)

操作系统不再将文件加载到内存中。相反,文件是memory mapped。这意味着inode和磁盘上文件的偏移量将连接到内存中的页面。这样可以很容易地找出文件的某些部分是否已经加载。此外,您只能将文件的一部分保留在RAM中(安装后,您不再需要设置代码,因此您可以“忘记”它并重用这些页面以获得更有用的信息)。

答案 1 :(得分:2)

未加载库和可执行文件,但使用mmap(2)映射到内存。基本上,当您使用MAP_SHARED标志mmap()时,映射同一文件的其他人将获得相同的内存页。