0

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

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

虚拟内存可以允许在进程创建过程中通过 fork() 系统调用共享页面,从而加快进程创建速度。

页面如何共享fork()?请说清楚。

4

2 回答 2

1

我相信文本指的是为 fork() 所做的写时复制优化。

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

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

就减少副本和减少内存使用而言,这大大降低了 fork() 的成本。

不利的一面是,每当 fork()ed 进程或原始进程写入页面时,写入都会引发异常(因为物理页面被标记为只读)并且该页面毕竟被复制。幸运的是,事实证明这种情况并不经常发生。

于 2012-04-20T10:44:42.647 回答
0

如果具有相同或不同虚拟地址页的两个进程共享相同的物理内存帧,则这些页可能会被 fork 共享。他们在页表中有相同的帧号条目

于 2012-04-20T09:48:05.230 回答