Linux上的虚拟内存

时间:2014-09-20 21:23:42

标签: linux memory memory-management virtual-memory

虚拟页面映射到VM机制中的物理页面。一旦必须分页新页面,物理页面将被逐出 我一直认为页面输入/页面输出要么是交换区域,要么是实际映射到VM的文件区域。
我已经读过Linux启动时会将所有物理页面映射到虚拟页面(这就是为什么监控工具显示内核保留的内存很多我猜)。
所以我的问题是,这种方法有什么好处?在物理页面被逐出之前,虚拟页面实际上不存在于磁盘上,而且昂贵的部分是页面进出页面,这是不可避免的。此外,在我看来,将最初为内核保留的所有页面传递给请求它们的各种进程会更复杂 我在这里误解了什么?

2 个答案:

答案 0 :(得分:0)

映射所有物理页面简化了将某些内容加载到即将初始化的内存中的过程。初始页面映射没有分配给任何进程(只是内核),但这样做简化并加速了数据,代码,内核结构的i / o和/或复制到新分配的内存,可能只有{{1 }或memcpy()

从哲学上讲,虚拟内存页面不应仅被视为映射到文件的一部分:它们可以是堆栈,堆,文件系统关联缓存或驱动程序数据结构。在这些情况下,虚拟空间不会映射到任何内容。

多年来我一直没有查看相关的源代码,但往往会避免分页到交换文件,至少在具有1 + G内存的现代系统上是这样。它是至少两倍的效率(可能是10次以上)取消映射一些长时间未被访问的只读页面并将其重新映射到当前需要的任何页面。只需要将已修改的页面写入交换。

如果您希望看到完全不同的分页和交换条件,请告诉内核使用更少的内存。将memset()(或更少)添加到Linux引导参数。

答案 1 :(得分:-1)

Linux虚拟内存(通常为虚拟内存)用于抽象物理内存,以允许操作系统控制内存访问。内核维护从虚拟地址映射到物理地址的页表。

分页内存用于指当前存储在磁盘上的页面(交换)被带入内存。分页内存是指将页面写入磁盘(交换)并从内存中清除。这样可以将更频繁使用的页面保存在更快的存储空间中,并将较少使用的页面保存在较慢的存储空间中。

虚拟内存还允许操作系统和进程使用比系统上存在的实际物理内存更多的内存。