虚拟内存
此条目可参照英语维基百科相应条目来扩充。 (2020年7月28日) |
虚拟内存(英语:Virtual memory)是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),而实际上物理内存通常被分隔成多个内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。与没有使用虚拟内存技术的系统相比,使用这种技术使得大型程序的编写变得更容易,对真正的物理内存(例如RAM)的使用也更有效率。此外,虚拟内存技术可以使多个进程共享同一个运行库,并通过分割不同进程的内存空间来提高系统的安全性。
要注意的是,虚拟内存不只是“用磁盘空间来扩展物理内存”的意思——这只是扩充内存级别以使其包含硬盘驱动器而已。把内存扩展到磁盘只是使用虚拟内存技术的一个结果,它的作用也可以通过覆盖或者把处于不活动状态的程序以及它们的数据全部交换到磁盘上等方式来实现。对虚拟内存的定义是基于对地址空间的重定义的,即把地址空间定义为“连续的虚拟内存地址”,以借此“欺骗”程序,使它们以为自己正在使用一大块的“连续”地址。
那些需要快速存取或者响应时间非常稳定的嵌入式系统,以及其他的具有特殊应用的计算机系统,可能会为了避免让运算结果的可预测性降低,而选择不使用虚拟内存。
用途与实现
虚拟内存技术是现代计算机系统结构中不可分割的一部分。现代所有用于一般应用的操作系统都对普通的应用程序使用虚拟内存技术,例如文字处理软件,电子制表软件,多媒体播放器等等。大部分架构通过CPU中独立的硬件内存管理单元来辅助实现这一功能。部分仿真器和虚拟机也能够通过宿主系统中的硬件来提高性能。[1]老一些的操作系统,如DOS和1980年代的Windows[2],或者那些1960年代的大型机,一般都没有虚拟内存的功能——但是Atlas,B5000和苹果公司的Lisa都是很值得注意的例外。
从Intel 80286开始,X86指令集通过保护模式引入了虚拟内存技术,但是由于其使用的存储器分段技术对大内存段的支持不佳,后续的80386在分段技术框架下支持了内存分页技术。
Windows操作系统的虚拟内存
对于32位进程,其逻辑内存空间为4G。Windows API提供了一套函数操纵进程的虚拟内存:
- VirtualAlloc(PVOID开始地址,SIZE_T大小,DWORD内存类型,DWORD保护属性)。 内存类型有MEM_RESERVE(保留)、MEM_RELEASE(释放)和MEM_COMMIT(提交)。保留是指占用一块逻辑地址空间,但未实际分配物理内存;提交是实际分配物理内存。MEM_RESET用于把内存清零。 保护属性为: PAGE_NOACCESS、PAGE_READONLY、PAGE_READWRITE、PAGE_EXECUTE、PAGE_EXECUTE_READ、PAGE_EXECUTE_READWRITE。
- VirtualProtect(PVOID基地址,SIZE_T大小,DWORD新保护属性,DWORD旧保护属性)。更改保护属性。
- VirtualFree(PVOID基地址,SIZE_T大小,DWORD内存类型)。页面释放。内存类型是MEM_DECOMMIT或者MEM_RELEASE
- VirtualLock
- VirtualUnlock
- VirtualQuery
参见
参考资料
- ^ AMD-V™ Nested Paging (PDF). AMD. [28 April 2015]. (原始内容 (PDF)存档于2022-03-21).
- ^ Windows Version History. Microsoft. 2005-07-19 [2008-12-03]. (原始内容存档于2015-02-26).
- Windows XP的虚拟内存与性能 (页面存档备份,存于互联网档案馆)
- 微软官方内存管理白皮书 (页面存档备份,存于互联网档案馆)
- Linux下内存管理(页面存档备份,存于互联网档案馆)