虚拟内存一直很有用吗?

Abh*_*nav 5 operating-system kernel virtual-memory

虚拟内存是现代操作系统目前使用的一个很好的概念.但我一直在回答一个问题,对此并不确定.这是一个问题:

假设在一台机器上只运行几个应用程序,这样系统的物理内存就超过了所有应用程序所需的内存.为了支持虚拟内存,操作系统需要做很多工作.因此,如果运行的应用程序都适合物理内存,真的需要虚拟内存吗?

(此外,一起运行的应用程序将始终适合RAM.)

Nay*_*uki 9

即使所有应用程序的内存使用量都适合物理内存,虚拟内存仍然很有用.VM可以提供以下功能:

  • 特权内存隔离(每个应用程序都无法触及内核或内存映射的硬件设备)
  • 进程间内存隔离(一个应用程序无法看到另一个应用程序的内存)
  • 静态内存地址(例如,每个应用程序main()的地址为0x0800 0000)
  • 延迟内存(例如,首次访问时,堆栈中的页面被分配并设置为零)
  • 重定向内存(例如内存映射文件)
  • 共享程序代码(如果程序或库的多个实例正在运行,其代码只需要存储在内存中一次)

  • 这是一个次要优势,但我认为值得一提。当 DLL 被加载到 RAM 中时,虚拟内存管理器可以检测到同一个 DLL 被加载了多次,并且它使进程共享相同的物理 RAM。所以我们的现代操作系统分配的内存更少。 (2认同)

Dar*_*ust 5

虽然在这种情况下并不严格需要,但虚拟内存不仅仅是提供比实际可用(交换)更多的内存.例如,它有助于避免内存碎片(从应用程序的角度来看),并且取决于动态/共享库的实现方式,它可以帮助避免重定位(重定位是指动态链接器需要调整库或可执行文件中的指针时刚加载).