无法理解fork()描述

时间:2012-04-18 07:46:37

标签: linux operating-system virtual-memory

我正在研究galvin的虚拟内存管理,我无法理解这句话:

  

除了将逻辑内存与物理内存分开之外,还有虚拟内存   内存允许两个或多个进程共享文件和内存   通过页面共享。这带来了以下好处

     

虚拟内存可以允许在使用fork()系统调用创建进程期间共享页面,从而加快进程创建。

如何与fork()共享网页?请澄清。

2 个答案:

答案 0 :(得分:1)

我认为该文本指的是为fork()完成的写时复制优化。

基本上fork()克隆进程,复制其整个内存。 这可能需要很长时间,特别是对于使用大量资金的流程。而且,fork()紧跟一个exec()非常常见,使前一个副本毫无意义。

而不是为每个fork()执行所有这些工作现代Unix创建新进程,但不要复制所有内存。他们只是将原始进程和新进程的虚拟内存页面指向相同的物理页面。

在减少副本和减少内存使用方面,这大大降低了fork()的成本。

缺点是无论何时fork()ed进程或原始进程写入页面,写入都会引发异常(因为物理页面被标记为只读),并且页面将被复制。 幸运的是,事实并非经常发生这种情况。

答案 1 :(得分:0)

如果具有相同或不同虚拟地址页面的两个进程共享相同的物理内存帧,则可以通过fork共享

页面。他们在页面表中有相同的帧号输入