【问题标题】:text section in process memory map进程内存映射中的文本部分
【发布时间】:2015-04-27 01:36:36
【问题描述】:

进程内存映射通常由栈、文本、data+bss和堆组成。

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

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

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

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

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

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

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

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

但是,当我阅读操作系统书籍时,它提到文本部分可以共享。所以我对此不是很清楚,或者我可能误解了本书的那部分。

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

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

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

【问题讨论】:

  • 您能否详细说明“内存地址独立于文本部分以外的其他进程”的意思。 ?

标签: unix process operating-system kernel


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢,我还用我刚刚找到的额外信息更新了我的问题。
猜你喜欢
  • 1970-01-01
  • 2019-04-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-09
  • 1970-01-01
  • 2019-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多