实验9、Windows虚拟内存1背景知识在Windows环境下,4GB的虚拟地址空间被划分成两个部分:低端2GB提供给进程使用,高端2GB提供给系统使用
这意味着用户的应用程序代码,包括DLL以及进程使用的各种数据等,都装在用户进程地址空间内(低端2GB)
用户过程的虚拟地址空间也被分成三部分:1)虚拟内存的已调配区(committed):具有备用的物理内存,根据该区域设定的访问权限,用户可以进行写、读或在其中执行程序等操作
2)虚拟内存的保留区(reserved):没有备用的物理内存,但有一定的访问权限o3)虚拟内存的自由区(free):不限定其用途,有相应的PAGE_NOACCESS权限
与虚拟内存区相关的访问权限告知系统进程可在内存中进行何种类型的操作
例如,用户不能在只有PAGE_READONLY权限的区域上进行写操作或执行程序;也不能在只有PAGE_EXECUTE权限的区域里进行读、写操作
而具有PAGE_NOACCESS权限的特殊区域,则意味着不允许进程对其地址进行任何操作
在进程装入之前,整个虚拟内存的地址空间都被设置为只有PAGE_NOACCESS权限的自由区域
当系统装入进程代码和数据后,才将内存地址的空间标记为已调配区或保留区,并将诸如EXECUTE、READWRITE和READONLY的权限与这些区域相关联
如表1所示,给出了MEMORY_BASIC_INFORMATION的结构,此数据描述了进程虚拟内存空间中一组虚拟内存页面的当前状态,其中State项表明这些区域是否为自由区、已调配区或保留区;Protect项则包含了Windows系统为这些区域添加了何种访问保护;Type项则表明这些区域是可执行图像、内存映射文件还是简单的私有内存
VirtualQueryEX()API能让用户在指定的进程中,对虚拟内存地址的大小和属性进行检测
Windows还提供