还剩3页未读,继续阅读
文本内容:
实验五存储管理——Windows xp虚拟内存
一、背景知识在Windows xp环境下,4GB的虚拟址空间被划分成两个部分低端2GB提供给进程使用,高端2GB提供给系统使用这意味着用户的应用程序代码,包括DLL以及进程使用的各种数据等,都装在用户进程地址空间内(低端2GB)用户过程的虚拟地址空间也被分成三个部分1)虚拟内存的已调配区(committed)具有备用的物理内存,根据该区域设定的访问权限,用户可以进行写、读或在其中执行程序等操作2)虚拟内存的保留区(researved)没有备用的物理内存,但有一定的访问权限3)虚拟内存的自由区(free)不限定其用途,有相应的PAGE_NOAC_CESS权限与虚拟内存区相关的访问权限告知系弘进程可在内存中进行何种类型的操作例如用户不能在只有PAGE_READONLY权限的区域上进行写操作或执行程序也不能在只有PAGE_EXECUTE权限的区域里进行读、嚼作而具有PAGE_NOACESS权限的特殊区域,则意味着不允许进程对其地址进行任何操作在进程装入之前,整个虚拟内存的地址空间都被设置为只有PAGE_NOACESS权限的自由区域当系统装入进程代码和数据后,才将内存地址的空间标记为已调配区或保留区,并将诸如EXECUTE、READWRITE和READONLY的权限与这些区域相关联如表5-1所示,给出了MEMORY_BASIC」NFORMATION的结构,此数据描述了进程虚拟内存空间中一组虚拟内存页面的当前状态,其中State项表明这些区域是否为自由区、已调配区或保留区;Protect项则包含了Windows系统为这些区域添加了何种访问保护;Type项则表明这些区域是可执行图像、内存映射文件还是简单的私有内存,VirtualQueryEX()API^让用户在指定的进程中,对虚拟内存地址的大小和属性进行检测Windows还提供了一整套能使用户精确控制应用程序的虚拟地址空间API,一些用于虚拟内存操作及检测的API如表5-2所示表5-1MEMORY_BASIC_INFORMATION结构的成员成员名称目的PVOID BaseAddress虚拟内存开始处的指针PVOID AllocationBase如果这个特定的区域为子分配区的话,则为虚拟内存外面区域的指针;否则此值与BaseAddress相同DWORD AllocationProtect虚拟内存最初分配区域的保护属性其可能值包括PAGE NOACESS,PAGE READONLY,PAGE READWRITTE和PAGE_EXECUTE_READ°DWORD RegionSize虚拟内存区域的字节数DWORD State区域的当前分配状态,其可能值为MEM_COMMIT,MEM_FREE和MEM_RESERVE DWORDProtect虚拟内存当前区域的保护属性,可能值与AllocationProtect成员相同DWORDType虚拟内存区域中出现的页面类型,可能值为MEM」MAGE,MEM_MAPPED和MEM_PRIVATE表5-2虚拟内存的API API名称描述VirtualQueryEx通过填充MEMORY_BASIC」NFORMATION结构检测进程内虚拟内存的区域VirtualAlloc保留或调配进程的部分虚拟内存,设置分配和保护标志VirtualFree释放或收回应用程序使用的部分虚拟地址VirtualProtect改变虚拟内存区域保护规范VirtualLock防止系统将虚拟内存区域通过系统交换到页面文件中VirtualUnlockQ释放虚拟内存的锁定区域,必要时,允许系统将其交换到页面文件中提供虚拟内存分配功能的是VirtualAlkcAPI,该API支持用户向系统要求新的虚拟内存或改变已分配内存的当前状态,用户若想通过VirtualAllocOAPI函数使用虚拟内存,可以采用两种方式能知系统1简单地将内存内容保存在地址空间内2请求系统返回带有物理存储区RAM的空间或换页文件的部分地址空间用户可以用fl AllocationType参数commit和reserve来定义这些方式,用户可以通知Windows按只读、读写、不可读写、执行或特殊方式来处理新的虚拟内存与VirtualAlloc函数对应的是VirtualFree函数,其作用是释放虚拟内存中的已调配页或保留页用户可利用dwFree Type参数将已调配页修改成保留页属性VirtualProtect是VirtualAlloc的一个辅助函数,利用它可以改变虚拟内存的保护规范
二、实验目的1通过实践了解Windows xp内存的使用,学习如何在应用程序中管理内存、体会Windows应用程序内存的简单性和自我防护能力2学习检查虚拟内存空间或对其进行操作3了解Windows xp内存结构和虚拟内存的管理,进而了解进程堆和Windows为使用内存而提供的一些扩展功能
三、工具/准备工作在开始本实践之前,请回顾教科书的相关内容您需要做以下准备1一台运行Windows xpProfessional操作系统的计算机2计算机中需安装Visual C++
6.0专业版或企业版U
1、实验内容与步骤
2.虚拟内存的检测使用VirtualQueryEX函数来检查虚拟内存空间步骤1登录进入Windows xpProfessional o羽聚2在‘历始舞鼾单击程芋Microsoft VisualStudio
6.0Microsoft Visual C++
6.0”,进入VisualC++窗口步骤3在工具栏单击“新建”按钮,编写代码保存为5-kcpp.功能检测进程的虚拟地址空间参考头文件与函数windows.h iostreamshlwapi.h iomanipAWalkVM ZeroMemoryGetSystemInfosiStrFormatByteSizeVirtualQueryExAPI步骤4单击“Build”菜单中的Compile5-Lcpp”命令,单击“是”按钮确认,系统对5-l.cpp进行编译步骤5编译完成后,单击“Build”菜单中的“Build5-l.exe”命令,建立5-l.exe可执行文件操作能否正常进行,如果不行,原因是什么?步骤6在工具栏单击u Executeprogram v按钮,执行5-l.exe程序运行结果(如果运行不成功,原因是什么?)按committed、reserved free等三种虚拟地址空间分别记录实践数据,其中“描述”是指对该组数据的简单描述,例如对下列一组数据00010000-0001xp
8.00KBCommitted,READ WRITE,Private可描述为具有READWRITE权限的已调配私有内存区将系统当前的自由区(free)虚拟地址空间填入表5-3中表5-3实践记录地址大小虚拟地址空间访问权限描述free free free free free free free free free free free free freefreefreefreefreefreefreefreefreefreefreefreefree将系统当前的已调配区(committed)虚拟地址空间填入表5-4中表5-4实践记录地址大小虚拟地址空间访问权限描述committed committed committed committed committed committed committed committed committed committed committed committed committed committedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommitted将系统当前的保留区reserved虚拟地址空间填入表5-8中表5-5实践记录地址大小虚拟地址空间访问权限描述reserved reserved地址大小虚拟地址空间访问权限描述reserved reserved reserved reserved reserved reserved reserved reservedreservedreservedreservedreservedreservedreservedreserved
3.虚拟内存操作如何分配一个大容量空间,将物理存储委托给其中的很小一部分千分之一并加以使用步骤1在工具栏单击“新建”按钮,编写代码并保存为5-
2.cppo功能分配和使用大块内存参考头文件与函数windows.h、iostream FillZeromalloc FillZerofree VirtualAllocVirtualFree;螂2单击“Build”菜单中的“Compile52cpp”命令,单击“是”按钮确认,系统对5-
2.cpp进行编译步骤5编译完成后,单击“Build”菜单中的“Build5-
2.exe”命令,建立5-
2.exe可执行文件操作能否正常进行,如果不行,原因是什么?步骤6在工具栏单击“Executeprogram”按钮,执行5-
2.exe程序运行结果如果运行不成功,原因是什么?
五、实验总结,撰写实验报告。