2012-04-18 49 views
0

我是从galvin研究有关虚拟内存的管理,我无法理解这样的说法:无法理解fork()的描述

除了从物理内存中分离逻辑记忆,虚拟 内存允许文件和内存,可以通过两个或多个进程 通过页面共享。这导致了以下好处

虚拟内存可以让页面来创建进程与fork()系统调用过程中共享的共享,从而加快创建进程。

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

回答

0

如果具有相同或不同虚拟地址页的两个进程共享相同的物理内存帧,则可以通过fork来共享页面。他们在他们的页表中具有相同的帧号的条目

1

我相信文本指的是为fork()完成的copy-on-write优化。

基本上fork()克隆进程,复制整个内存。 这可能需要很长时间,特别是对于使用大量资金的流程。此外,fork()后面紧跟着一个exec(),这使得以前的拷贝毫无意义。

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

这大大降低了叉()的成本,减少副本和减少内存使用量。

缺点是,无论fork()ed进程还是原始进程写入页面,write都会引发异常(因为物理页面标记为只读),并且页面被复制。 幸运的是,事实并非如此。