进程内存映射中的文本部分

text section in process memory map

正常情况下,进程内存映射由stack、text、data+bss和heap组成。

内存地址独立于除文本部分以外的其他进程。

我的问题是关于文本部分,是否只有子进程可以共享

与其父进程相同的文本部分?或者其他进程也可以共享它。

============================================= =========================

@avd: 是的,参考维基百科

http://en.wikipedia.org/wiki/Process_isolation

"Process isolation can be implemented by with virtual address space, where process A's address space is different from process B's address space - preventing A to write into B."

这就是我的意思,每个进程都有自己的内存映射。

但是,我看OS这本书的时候,提到可以分享正文部分。所以我不是很清楚,或者我误解了这本书的那部分内容。

============================================= ========================= 额外信息:

http://www.hep.wisc.edu/~pinghc/Process_Memory.htm

如果要同时执行程序的第二个副本,则进程共享文本段。在此设置中,系统使用指针引用先前加载的文本段,而不是重新加载重复的文本段。如果需要,共享文本是使用 C/C++ 编译器时的默认设置,可以在编译时使用 -N 选项关闭。

每个进程都有自己的虚拟地址。 virtual 地址不会与任何人共享,包括子进程。但是这些虚拟地址被OS内核和MMU映射到物理地址。

问题是 来自不同地址 space 的虚拟地址可以指向相同的物理地址 !例如,当进程分叉时,它获得自己的虚拟地址 space,但除非此子进程不更改(写入)它的内存,否则它 共享 父进程的内存供读取。当子进程尝试修改一些内存时,内核将为子进程创建特定页面的单独副本,并且它将不再共享(直到子进程自己分叉)。这称为写时复制 (CoW)。

所以真正的事情是文本部分可以通过将不同的虚拟页面映射到相同的物理页面(称为框架)来共享。