Windows虚拟内存简介

41 篇文章 2 订阅
4 篇文章 0 订阅

Windows系统中,系统内存本身的空间可能非常有限,但是通过虚拟内存(Virtual Memory),可以让程序可以拥有超过系统物理内存大小的可用内存空间。

 

顾名思义,虚拟内存是逻辑层面的划分。操作系统通过内存管理器(Memory Manager)将虚拟内存地址与物理地址进行对应。通常在系统中,虚拟内存的大小都要大于系统的实际内存大小,因此内存管理器会将一部分虚拟内存中的内容映射到磁盘中。

 

当应用访问虚拟内存地址的时候,如果内存管理器发现对应的物理地址在磁盘中时,内存管理器会将这部分信息从磁盘中加载回内存中以供应用程序访问。

 

对于32位操作系统来说,地址总线的宽度也是32位,因此内存寻址的最大寻址空间数量为232次方,即4G个地址空间,每个地址空间对应1个字节的存储单元,所以理论上32位的系统支持的虚拟内存大小最大为4GB。在这4G个虚拟内存地址中,默认情况下,Windows会将低位地址(0x00000000-0x7FFFFFFF)的这一半分配给用户进程进行使用,而将高位地址(0x80000000-0xFFFFFFFF)这一半分配给操作系统进程来使用。这个比例可以在计算机启动设置中修改,最多可以为用户进程分配3G个虚拟内存地址。

 

Windows内存分页的机制:

Windows内存地址转换主要通过一个称为页表目录的表来进行映射,在Intel x86 CPU中,页表目录的入口指针存储在寄存器CR3中,指针指向一个长度为1024×32位大小的数组(每32位对应一个虚拟地址),也就是下图中的页目录:

物 理 内 CR3 寄 存 器 指 向 页 目 录 首 地 址 磁 盘 存 储 器 页 表 页 目 录

在页目录中每个虚拟地址的组成:

22 《 21 12 《 11 《 页 目 求 萦 引 0 个 可 能 值 凵 页 表 萦 引 0 个 可 能 值 凵 页 中 的 位 置 ( “ 96 个 可 能 值 凵

其中前10位用于定义页目录的索引(210次方恰好为1024),中间10位对应这一页对应的物理内存的首地址,最后12位对应数据相对于首地址的偏移量,所以上图中一个页中可以对应4096个地址,即一个页的大小为4KB

 

对于很多内存使用量很大的应用来说,2GB的可用内存空间远远不能满足需要,因此Windows提供了地址窗口扩展(AWEAddress Windowing Extension)的接口来满足更大内存分配需求的应用程序,通过AWE,应用程序可以在自己的地址空间中保存一个视图(View)或者窗口(Window),然后将物理内存与这个视图或窗口进行映射,对2GB的用户进程可占用的内存来说,最多可以为其映射64GB的物理内存。虽然AWE为程序开发者增加了负担,同时也在映射上增加了开销,但是确实为32位系统下的很多需要大内存的应用程序提供了一个可用方案。为了提高映射的效率以及增加硬件层面的支持,AWE规定了很多限制,具体可以参考https://msdn.microsoft.com/en-us/library/windows/desktop/aa366527(v=vs.85).aspx

 

相比而言,64bit的操作系统提供了更大的寻址空间,理论上64位总线应该支持264次方个地址空间,即16EB1EB=2^60B)内存,但是由于实际物理架构的限制,当前对于IA-64 CPU来说,最多可以支持7TB的虚拟内存大小,而x64可支持8TB的虚拟内存,Windows系统当前将这个值限制为8TB

 

虚拟内存的大小可以在操作系统下面的位置进行修改:

在计算机属性中找到高级设置(Advancedsystem settings),在高级选项卡中找到性能的设置,在打开的窗口中找到高级选项卡,下边就是虚拟内存的设置了:

Control Panel All Control Panel Items System Properties Control Panel Home Computer Name H System em Protection Remote Performance Options Advanced ssor sch uling ta Execution Prevention Device Manager You must be Remote settings ormance System protection on as an Administrato make most of these changes Visual effects. processor scheduling memory usag nd virtual memory Advanced system settings Desktop settings related to your sign-in Startup and Recovery System startup system failure. and debugging information Environment Variables . See also Security and Maintenance Choose hon to ocate processor resources. Adjust for best per C) Backgr ound services Virtual memory A paging fie is an area on the hard disk that Windows uses as if it vvere RAM. Total paging file size for all drives: 8192 ME

 

点击修改,调整虚拟内存的值:

计算机生成了可选文字:Virtual Memory Automatcally manage paging file size for all drives aging e size Drive C'/olume Label) Selected drive : @Custom size. Inital size (MB): Maximum size (ME): p File Size (Ma) S stem mana ed 20480 System managed size C) No paging file Total paging file size for al drives Minimum allowed. Currently allocated: 16 ME 2901 ME 8192 ME

 

参考链接:

https://bbs.pediy.com/thread-135274.htm

http://blog.csdn.net/lanuage/article/details/52003700

http://book.51cto.com/art/200910/159944.htm

http://blog.csdn.net/tttt418/article/details/6113860

http://www.cnblogs.com/VIPler/p/4282584.html

https://msdn.microsoft.com/en-us/library/windows/desktop/aa366527(v=vs.85).aspx

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
简介   如果计算机缺少运行程序或操作所需的随机存取内存 (RAM),则 Windows 使用虚拟内存Virtual Memory)进行补偿。   虚拟内存将计算机的 RAM 和硬盘上的临时空间组合在一起。当 RAM 运行速度缓慢时,虚拟内存将数据从 RAM 移动到称为“分页文件”的空间中。将数据移入与移出分页文件可以释放 RAM,以便完成工作。   一般而言,计算机的 RAM 越多,程序运行得越快。如果计算机的速度由于缺少 RAM 而降低,则可以尝试增加虚拟内存来进行补偿。但是,计算机从 RAM 读取数据的速度要比从硬盘读取数据的速度快得多,因此增加 RAM 是更好的方法。 编辑本段 作用   不知大家有没有发现,在Windows2000(XP)目录下有一个名为pagefile.sys的系统文件(Windows98下为Win386.swp),它的大小经常自己发生变动,小的时候可能只有几十兆,大的时候则有数百兆,这种毫无规律的变化实在让很多人摸不着头脑。其实,pagefile.sys是Windows下的一个虚拟内存,它的作用与物理内存基本相似,但它是作为物理内存的“后备力量”而存在的,但是,它并不是在只有物理内存不够用时才发挥作用的,也就是说在物理内存够用时也有可能使用虚拟内存,如果你虚拟内存设置过小则会提示“虚拟内存不足”。 编辑本段 虚拟内存不足的原因 1、感染病毒   有些病毒发作时会占用大量内存空间,导致系统出现内存不足的问题。赶快去杀毒,升级病毒库,然后把防毒措施做好! 2、虚拟内存设置不当   虚拟内存设置不当也可能导致出现内存不足问题,一般情况下,虚拟内存大小为物理内存大小的2倍即可,如果设置得过小,就会影响系统程序的正常运行。重新调整虚拟内存大小以WinXP为例,右键点击“我的电脑”,选择“属性”,然后在“高级”标签页,点击“性能”框中的“设置”按钮,切换到“高级”标签页,然后在“虚拟内存”框中点击“更改”按钮,接着重新设置虚拟内存大小,完成后重新启动系统就好了。 3、系统空间不足   虚拟内存文件默认是在系统盘中,如WinXP的虚拟内存文件名为“pagefile.sys”,如果系统盘剩余空间过小,导致虚拟内存不足,也会出现内存不足的问题。系统盘至少要保留300MB剩余空间,当然这个数值要根据用户的实际需要而定。用户尽量不要把各种应用软件安装在系统盘中,保证有足够的空间供虚拟内存文件使用,而且最好把虚拟内存文件安放到非系统盘中。 4、因为SYSTEM用户权限设置不当   基于NT内核的Windows系统启动时,SYSTEM用户会为系统创建虚拟内存文件。有些用户为了系统的安全,采用NTFS文件系统,但却取消了SYSTEM用户在系统盘“写入”和“修改”的权限,这样就无法为系统创建虚拟内存文件,运行大型程序时,也会出现内存不足的问题。问题很好解决,只要重新赋予SYSTEM用户“写入”和“修改”的权限即可,不过这个仅限于使用NTFS文件系统的用户。 编辑本段 运行原理及过程   可能大家都会知道虚拟内存就是当物理内存不足够的时候,把硬盘的一部分当作内存来使用。   这样理解其实不够准确   物理内存就是大家平时经常说的1G内存,512M内存   首先要知道:打开任何一个程序,都是要占用物理内存的 ,当关闭这个程序的时候,系统也将会从物理内存中删除这个程序的信息   接着分两方面理解虚拟内存   --------------假设计算机物理内存是512M,系统都安装在C盘--------------------------------------   (一)当物理内存足够的时候   假设,我们运行的程序占用了215M,此时物理内存绝对够用了,但是不要以为此时系统没有用虚拟内存技术,系统照样用了虚拟内存技术,当我们打开QQ的时候,系统就为QQ这个程序指定了一个虚拟空间,只是此时这个虚拟空间里面没有信息而已   (二)当物理内存不足的时候   假设计算机运行”迅雷”和”IE浏览器”这两个个软件的时候物理内存已经达到512M,我们启动QQ,如果没有虚拟内存技术,我们此时根本不能启动QQ,因为QQ不能在内存中写入相关信息,不过现在有了虚拟内存技术,此时系统将会释放一部分物理内存给QQ用,假设释放的是迅雷所占用的物理内存,那么迅雷所占用的物理内存信息将会保存到硬盘上的一个pagefile.sys的文件中   当我们想再运行迅雷的时候,此时系统会从pagefile.sys查找相应的迅雷信息,同时把这些信息重新载入到物理内存里面,并且把QQ的信息释放到pagefiles.sys里面   这样一个循环交换过程就是虚拟内存技术,为什么叫它虚拟呢,因为系统把文件释放到了硬盘上,而这个硬盘可不是内存,只是临时的保存内存信息的地方   一句话,虚拟内存就是用如硬盘u盘等不是内存的介质来存储内存的信息   Window xp系统里面的c:/windows/prefetch这个文件夹里面的文件是虚拟内存技术的扩展,这些prefetch(预读)文件可以提升程序的运行速度   当我们运行程序时候,系统会依据内存记录这个程序经常用到的文件,并且把这个程序读取信息记录下来,同时在c:/windows/prefech下创建一个后缀是.pf的文件,并且把读取的信息保存到这.pf文件夹里面,   假设我们运行已经被记录photoshop这个程序,那么你双击桌面上的photoshop的时候,系统会先从c:/windows/prefetch中查找这个photoshop的相关记录,而不是继续运行photoshop,   系统根据以前记录photoshop用到的相关文件载入到内存中,载入好后,photoshop才可以继续运行,这样运行photoshop的速度就会提升了,大家可能看着要先执行.pf文件.再执行ps程序,这样速度还会快么?其实这个处理速度是很快的,如果没有预读文件,打开photoshop的速度会很慢的   C:/windows/prefetch里面还有一个Layout.ini这个文件,这个文件的作用就是排列文件载入的次序,   如果c:/windows/prefetch里面的预读文件很多,那么你每次运行一个程序的时候,系统都要花大量的时间去搜索这个程序有没有预读文件,这样有可能导致程序启动很慢,所以预读文件很多的时候,那么就去删除这些预读文件吧

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值