Windows内存体系(2) -- 页交换文件
一、页交换文件
虚拟地址空间
只是操作系统为进程“虚拟”出来的一块地址区域,并不代表任何实际的空间。而“页交换文件”
却对应了实际的空间,这个空间一般是磁盘上名为“pagefile.sys”
的文件。
“页交换文件”
的大小和位置可以在系统设置(系统属性 -> 高级 -> 性能 -> 设置 -> 高级
)中进行设置:
从微软的官方文档来看,“虚拟内存”
等于“物理内存”+“分页文件”
总和。可以把“虚拟内存”
理解为Windows的一种内存管理机制。
二、虚拟地址空间、页交换文件、物理内存
虚拟地址空间、页交换文件、物理内存三者的关系如下图:
《Windows核心编程》第13章关于“物理存储器和页交换文件”章节中讲到了“页交换文件、物理存储器之间的数据交换过程”,流程如下:
应用程序从进程的虚拟地址空间预定并调拨
了一块地址区域时,起初这块区域只是从“页交换文件”中调拨的,这样作有个好处就是:因为还不确定何时才会使用这块区域,如果立即从物理内存调拨,会将占用很多的物理内存。
当程序读写该地址区域时,此时就会出现上面图上的页交换文件和物理内存之间的数据交换过程。
三、将页面锁定在物理内存
从上面的几节我们知道,当物理内存中没有闲置页面时,系统会将内存中的某些页面的数据写入到交换文件中,从而将该物理内存区域释放出来供后面的程序使用。
我们可以通过调用VirtualLock
方法,将页面锁定在物理内存中,从而防止虚拟内存管理机制将页面交换至页面文件,而引起不必要的硬盘和物理内存之间的低效页面交换。
也可以通过调用VirtualUnlock
方法解锁页面,允许系统对页面进行交换操作。
需要注意的是,锁定页面时系统会根据当前可用实际物理内存情况,以及进程工作集配额判定当前最大可锁定的页面的实际数量,超过此数量会引起一个错误。我们可以调用SetProcessWorkingSetSize
可以改变一个进程工作集大小的配额,从而可以锁定更多的物理页面。
- 点赞
- 收藏
- 关注作者
评论(0)