2014-02-25 75 views

回答

1

不,它不必。虚拟内存的任何页面都可以映射到任意的物理页面。因此,您可以让虚拟内存的相邻页面指向非相邻的物理页面。该映射由OS维护并由CPU的MMU单元使用。

2

简短回答:您不必在意(除非您是内核/驱动程序开发人员)。这对你来说都是一样的。

较长的答案:相反,虚拟连续的内存是通常不是物理连续(只有非常少量)。除巧合之外,或机器刚启动后不久。然而,这不是必需的。

分配大量物理连续RAM的唯一方法是使用大页面(因为一页内的内存需要连续)。然而,这是无用的努力,因为你的过程没有明显的区别,你认为它的连续内存是实际上是连续的,但是使用大页面存在缺点。

通过物理上非连续的RAM进行内存映射的工作方式并不特别“特殊”。它遵循所有内存管理遵循的相同方法。

操作系统在“页面”中划分虚拟内存并为您的进程创建页表项。当您访问某个位置的内存时,对应的页面根本不存在,或者它存在并对应于实际的页面,内存。

如果该页面存在于RAM中,则完全没有任何反应。。否则会产生故障,并运行一些操作系统代码。如果结果表明该页面根本不存在(或没有正确的访问权限),则您的进程将被分段错误终止。

否则,操作系统选择一个未使用的任意页面(或者将它认为最不重要的一个换出),并将数据从磁盘加载到该页面中。在内存映射的情况下,数据来自映射文件,否则它来自交换(并且对于全新分配的内存,复制零页)。 OS然后将控制返回到您的过程。你永远不知道这件事发生。

如果您访问位于不同页面的“连续”(或您认为!)内存区域中的另一个位置,则会运行完全相同的过程。


在现实中,它是一个有点复杂,因为一个页面可能在RAM中存在,但不存在“正式”,是的要被回收或页面等列表的一部分。但是这太复杂了。