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

通常,进程内存映射由堆栈,文本,数据+ bss和堆组成。

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

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

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

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

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

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

“进程隔离可以通过虚拟地址空间来实现,其中进程A的地址空间不同于进程B的地址空间 – 防止A写入B.”

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

但是,当我阅读操作系统的书,它提到文本部分可以共享。 所以我不太清楚,或者我误解了这本书的这一部分。

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

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

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

每个进程都有自己的虚拟地址。 该虚拟地址不与任何人共享,包括子进程。 但是这些虚拟地址被翻译,或者换句话说,被OS内核和MMU 映射到物理地址。

问题是来自不同地址空间的虚拟地址可以指向相同的物理地址 ! 例如,当进程分叉时,它得到自己的虚拟地址空间,但是除非这个子进程没有改变 (写入)它的内存,它与父进程共享内存以供读取 。 当子进程尝试修改某些内存时,内核会为子进程创建独立的特定页面副本,并且不会再被共享(直到子进程本身分叉为止)。 这就是所谓的写入复制(CoW)。

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