虚拟内存是真实存在的还是只是一种管理内存的方法

虚拟内存是真实存在的还是只是一种管理内存的方法

我不确定虚拟内存是否实际上是一个物理组件,或者人们只是将其称为优化内存过程的一种方法。

答案1

虚拟内存是一个概念。

正如 anrieff 所说,支持虚拟内存的系统将有一个实际处理映射的 MMU。处理器将使用虚拟地址,该地址可能是它支持的 32 位或 64 位地址空间中的任何地址。虚拟地址不受物理内存量的限制。

正如我在评论中提到的那样,虚拟内存不必映射到任何东西。 涉及两组表:

  • MMU 页表,这些页面可能映射到实际物理内存,也可能不映射到实际物理内存,具体取决于“存在”位。您可以拥有不“存在”的页面;MMU 既不知道也不关心它们可能包含什么,但它们不会映射到实际物理 DRAM。如果您尝试访问其中一个,系统会生成一个页面错误到操作系统。

  • 操作系统跟踪进程和自身的内存分配情况,并负责处理页面错误。它可以决定在访问内存的进程暂停时如何处理不存在的页面。可能的选择包括:

交换:页面被换出。分配一些真实的 DRAM 并从磁盘读入,然后返回给进程。

内存映射 IO:类似,但从特定文件读取。

PCI/AGP空间:请求通过总线传输到GPU等,而不是主内存。

零:操作系统要么保持一些预清零的 DRAM 准备就绪,要么在将页面提供给您之前停止将零写入页面。

无效:最后,操作系统完全有可能根本不返回,而只是终止请求该页面的进程。一个常见的例子是 Linux 内存“过度使用”:进程可以请求和分配比可用 DRAM+交换空间更多的内存。只要它们不使用它,这就可以了。如果他们全部使用它,并且系统耗尽实际内存,它将开始终止进程​​以恢复系统。其他危机情况可能包括通过网络将内存映射到文件(该文件已消失)或交换到发生故障的驱动器。

您可以故意分配一个不可用的页面(Linux 上的 mmap 选项 PROT_NONE)。这有时对于查找某些类型的错误很有用。

相关内容