当内存非常便宜时虚拟内存的重要性

Importance of Virtual Memory when memory is very cheap

这个问题是在一次编程面试中被问到一位学长的。 据我所知,由于软件访问的内存大小越来越大,内存可能很快就会耗尽。所以在这种情况下,如果我们使用交换,效率会很低。所以我们会选择虚拟内存,因为它将磁盘中的内存映射到主内存。

但是如果我们可以拥有非常大的内存,那么虚拟内存还有用吗? 并请告知以上答案是否需要修改。

我怀疑提问者混淆了逻辑内存和虚拟内存的好处。在逻辑内存下,每个进程都有自己的地址space提供保护。此外,共享内核地址 space 受到保护,不会被用户进程不当访问。

换句话说,虽然虚拟内存在未来可能会消失,但逻辑内存转换(通常与虚拟内存混为一谈)很可能会保留下来。

虚拟内存仍然很重要。主要原因之一是它提供保护。虽然这可以通过提供类似于 x86 段的内存保护单元来实现,而不是提供虚拟内存的内存管理单元,但这对虚拟内存提供的下一个重要事物存在问题,即共享和内存映射。尝试做诸如共享内存段之类的事情(如在 System V IPC 共享内存中)是非常困难的,只有内存保护单元和类似的内存映射文件。此外,如果您只有一个内存保护单元,动态增加进程的内存 space 是困难的,因为您仅限于物理上连续的内存。

简而言之,另一种看待这个问题的方式是虚拟内存提供了操作系统为类 Unix 系统和大多数两层特权级系统中的进程提供的基本抽象之一。虽然这种抽象的最初部分是让它看起来好像进程可以访问比系统可能拥有的更多的内存,但虚拟内存提供的其他抽象并不能通过简单地拥有大量 RAM 来克服。

至于逻辑与虚拟,我推荐 this SO question