两个进程之间共享代码段

Ash*_*ish 3 linux

假设我们连续运行两个进程:-

$ grep abc abc.txt ==> pid 100
$ grep def def.txt ==> pid 101
Run Code Online (Sandbox Code Playgroud)

我在《Linux 编程入门》一书第 11 章中读到,进程的代码部分将是共享的,因为它是只读的。是这样吗?我认为如果 grep 被编译为共享库,那么代码部分就会被共享。

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

Aar*_*lla 5

操作系统不再将文件加载到内存中。相反,文件是内存映射的。这意味着磁盘上文件的索引节点和偏移量将连接到内存中的页面。这使得查明文件的某些部分是否已被加载变得非常简单。此外,您可以仅将文件的一部分保留在 RAM 中(设置后,您不再需要设置代码,因此您可以“忘记”它并重用这些页面以获取更有用的内容)。