虚拟连续内存与物理连续内存

2024-01-08

虚拟连续内存在物理上也总是连续的吗?如果不是,如何在物理上不连续的 RAM 块上分配和映射虚拟连续内存?感谢详细的回答。


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

更长的答案:相反,实际上连续的内存是通常不会物理上连续(仅少量)。除非是巧合,或者是在机器刚刚启动后不久。然而,这不是必要的。

分配大量物理连续 RAM 的唯一方法是使用大页面(因为一页内的内存需要是连续的)。然而,这是一种无用的努力,因为对于您的进程来说,无论您认为连续的内存是否是内存,都没有明显的差异。actually连续,但使用大页面也有缺点。

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

操作系统将虚拟内存划分为“页”,并为您的进程创建页表条目。当你访问内存中的某个位置时,要么对应的页面根本不存在,要么它存在并对应于一个realRAM 中的页面,或者它存在但doesn't对应于一个realRAM 中的页面。

If the page exists in RAM, nothing happens at all1. Otherwise a fault is generated and some operating system code is run. If it turns out the page doesn't exist at all (or does not have the correct access rights), your process is killed with a segmentation fault.

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

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


1 In reality, it is a little more complicated, since a page may exist in RAM but not exist "officially", being part of a list of pages that are to be recycled or such. But this gets too complicated.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

虚拟连续内存与物理连续内存 的相关文章

随机推荐