



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验五 存储管理Windows xp虚拟内存一、背景知识在Windows xp环境下,4GB的虚拟址空间被划分成两个局部:低端2GB提供给进程 使用,高端2GB提供给系统使用。这意味着用户的应用程序代码,包括DLL以及进程使用的 各种数据等,都装在用户进程地址空间内(低端2GB)用户过程的虚拟地址空间也被分成三 个局部:1)虚拟内存的已调配区(committed)具有备用的物理内存,根据该区域设定的访问权 限,用户可以进行写、读或在其中执行程序等操作。2)虚拟内存的保存区(researved)没有备用的物理内存,但有一定的访问权限。3)虚拟内存的自由区(free)不限定其用途,有相应的PAGE
2、_NOAC_CESS权限。与 虚拟内存区相关的访问权限告知系弘进程可在内存中进行何种类型的操作。例如:用户不能在只有PAGE_READONLY权限的区域上进行写操作或执行程序:也不能在只有 PAGE_EXECUTE权限的区域里进行读、嚼作。而具有PAGE_NOACESS权限的特殊区域,那么意 味着不允许进程对其地址进行任何操作。在进程装入之前,整个虚拟内存的地址空间都被设置为只有PAGE_NOACESS权限的 自由区域。当系统装入进程代码和数据后,才将内存地址的空间标记为已调配区或保存区,并 将诸如EXECUTE、READWRITE和READONLY的权限与这些区域相关联。如表5-1所示,给出
3、了MEMORY_BASICNFORMATION的结构,此数据描述了进程 虚拟内存空间中一组虚拟内存页面的当前状态,其中State项说明这些区域是否为自由区、 已调配区或保存区;Protect项那么包含了 Windows系统为这些区域添加了何种访问保护;Type项 那么说明这些区域是可执行图像、内存映射文件还是简单的私有内存,VirtualQueryEX()API 让用户在指定的进程中,对虚拟内存地址的大小和属性进行检测。Windows还提供了一整套能使用户精确控制应用程序的虚拟地址空间API, 一些用于虚 拟内存操作及检测的API如表5-2所示。表5-1 MEMORY_BASIC_INFORM
4、ATION 结构的成员成员名称目的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_
5、RESERVEDWORD Protect虚拟内存当前区域的保护属性,可能值与AllocationProtect成员相同DWORDType虚拟内存区域中出现的页面类型,可能值为 MEMMAGE , MEM_MAPPED 和 MEM_PRIVATE表5-2虚拟内存的API API名称描述VirtualQueryEx()通过填充MEMORY_BASICNFORMATION结构检测进程内虚拟 内存的区域VirtualAlloc。保存或调配进程的局部虚拟内存,设置分配和保护标志VirtualFree()释放或收回应用程序使用的局部虚拟地址VirtualProtect()改变虚拟内存区域保护规范Virtu
6、alLock()防止系统将虚拟内存区域通过系统交换到页面文件中VirtualUnlockQ释放虚拟内存的锁定区域,必要时,允许系统将其交换到页面文件中提供虚拟内存分配功能的是VirtualAlk)c()API,该API支持用户向系统要求新的虚拟内 存或改变已分配内存的当前状态,用户假设想通过VirtualAllocOAPI函数使用虚拟内存,可以采 用两种方式能知系统:1)简单地将内存内容保存在地址空间内。2)请求系统返回带有物理存储区(RAM的空间或换页文件)的局部地址空间。用户可以用fl Allocation Type参数(commit和reserve)来定义这些方式,用户可以通知 Wind
7、ows按只读、读写、不可读写、执行或特殊方式来处理新的虚拟内存。与VirtualAlloc。函数对应的是VirtualFree()函数,其作用是释放虚拟内存中的已调配页或 保存页。用户可利用dwFree Type参数将已调配页修改成保存页属性。VirtualProtect。是VirtualAlloc()的一个辅助函数,利用它可以改变虚拟内存的保护规 范。二、实验目的通过实践了解Windows xp内存的使用,学习如何在应用程序中管理内存、体会 Windows应用程序内存的简单性和自我防护能力。学习检查虚拟内存空间或对其进行操作了解Windows xp内存结构和虚拟内存的管理,进而了解进程堆和W
8、indows为使用 内存而提供的一些扩展功能。三、工具/准备工作在开始本实践之前,请回顾教科书的相关内容。您需要做以下准备:) 一台运行Windows xp Professional操作系统的计算机。2)计算机中需安装Visual C+6.0专业版或企业版。U1、实验内容与步骤.虚拟内存的检测使用VirtualQueryEX。函数来检查虚拟内存空间。步骤 1 :登录进入 Windows xp Professional o羽聚 2:在历始舞鼾单击程芋Microsoft Visual Studio 6.0 Microsoft Visual C+ 6.0”, 进入 Visual C+窗口。步骤3:在
9、工具栏单击“新建”按钮,编写代码保存为5-kcpp.功能:检测进程的虚拟地址空间参考头文件与函数:windows.h iostream shlwapi.h iomanipA WalkVM()ZeroMemory() GetSystemInfo(&si) StrFormatByteSize() VirtualQueryEx()API步骤4:单击“Build”菜单中的Compile 5-Lcpp”命令,单击“是”按钮确认,系 统对5-l.cpp进行编译。步骤5:编译完成后,单击“Build”菜单中的“Build 5-l.exe”命令,建立5-l.exe 可执行文件。操作能否正常进行,如果不行,原因
10、是什么?步骤6:在工具栏单击uExecute program v按钮,执行5-l.exe程序。运行结果(如果运行不成功,原因是什么?):按committed、reserved free等三种虚拟地址空间分别记录实践数据,其中“描述”是 指对该组数据的简单描述,例如:对以下一组数据:00010000-0001 xpCommitted,READ WRITE,Private 可描 述为:具有 READWRITE权限的已调配私有内存区。将系统当前的自由区(free)虚拟地址空间填入表5-3中。表5-3 实践记录地址大小虚拟地址空间访问权限描述freefreefreefreefreefreefreefr
11、eefreefreefreefreefreefreefreefreefreefreefreefreefreefreefreefreefree将系统当前的已调配区(committed)虚拟地址空间填入表5-4中表5-4 实践记录地址大小虚拟地址空间访问权限描述committedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommitted
12、committedcommittedcommittedcommittedcommittedcommittedcommitted将系统当前的保存区(reserved)虚拟地址空间填入表5-8中 表5-5 实践记录地址大小虚拟地址空间访问权限描述reservedreserved地址大小虚拟地址空间访问权限描述reservedreservedreservedreservedreservedreservedreservedreservedreservedreservedreservedreservedreservedreservedreserved.虚拟内存操作如何分配一个大容量空间,将物理存储委托给其中的很小一局部(千分之一)并加 以使用。步骤1:在工具栏单击“新建”按钮,编写代码并保存为5-2.cppo功能:分配和使用大块内存参考头文件与函数:windows.h、iostream FillZero() malloc() FillZero () free() VirtualAlloc() VirtualFree() ;螂2:单击“Build”菜
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论