总数:315912 限制:3992092
峰值:632980
当系统遇到分页活动增加的情况时,提交的内存数量(“认可总数”)就会增加。一旦它达到了“认可限制”值,系统就需要扩展分页文件,“认可限制”值指出在不必扩展分页文件的情况下可以向内存提交的虚拟内存数量,因为目标是避免扩展分页文件,所以必须保持“认可总数”和“认可限制”值相差较大。如果这两个值接近了,那么系统必须动态增加分页文件的大小。
“任务管理器”的“认可用量”区域显示的信息还说明了系统的主内存是否足以满足系统执行的任务,如果认可“总数”值经常超过系统中的内存数量,那么系统的物理内存可能不足。
5.5 实验总结
“任务管理器”、“计算机管理”、“我的电脑”属性、“系统信息”、“系统监视器”等程序的应用,知道了怎样对系统的各项指标进行查询,对操作系统对内存的管理有了进一步认识,。
理解了分页过程、内存共享、未分页合并内存和分页合并内存的定义,并且知道计算机如果通过这些方法提升系统的性能。
5.6 实验评价(教师)
实验6 存储管理
Windows 2000内存结构
(实验估计时间:100分钟)
6.1 背景知识
Windows 2000 是32位的操作系统,它使计算机CPU可以用32位地址对32位内存块进行操作,内存中的每一个字节都可以用一个32位的指针来寻址,这样,最大的存储空间就是232字节或4000兆字节
(4GB),在Windows下运动的每一个应用程序都认为能独立可用的4GB大小的空间。
而另一方面,实际上没有几台机器的RAM能达到4GB,更不必说让每个进程都独享4GB内存了,显然,Windows在幕后将虚拟内存(virtual memory,VM)地址映射到了各进程的物理内存地址上,而所谓物理内存是指计算机的RAM和由Windows分配到用户驱动器根目录上的换页文件,物理内存完全由系统管理。
6.2 实验目的
1)通过实验了解Windows 2000内存的使用,学习如何在应用程序中管理内存、体会Windows应用程序内存的简单性和自我防护能力。 2)了解Windows 2000内存结构和虚拟内存的管理,进而了解进程堆和Windows为使用内存而提供的一些扩展功能。
6.3 工具/准备工作
在开始本实验之前,请回顾教科书的相关内容。 您需要做以下准备:
1)一台运行Windows 2000 Professional 操作系统的计算机。 2)计算机中需安装Visual C++ 6.0 专业版或企业版。
6.4 实验内容与步骤
Windows提供了一个API,即GetSystemInfo(),以便用户能检查系统中虚拟内存的一些特性。
步骤1:登录进入Windows 2000 Professional。
步骤2:在“开始”菜单中单击“程序”、“Microsoft Visual Studio 6.0”“Microsoft Visual C++ 6.0”,进入Visual C++窗口。 步骤3:在工具栏单击“新建”按钮,编写程序保存为6-1.cpp。 程序功能:获取有关系统的内存设置的信息
参考头文件与函数:windows.h、iostream、shlwapi.h、iomanip ZeroMemory()、GetSystemInfo()、StrFormatByteSize()、 StrFormatByteSize()、 步骤4:编译6-1.cpp。
步骤5:编译完成后,单击“Build”菜单中的“Build 6-1.exe”命令,建立6-1.exe可执行文件。
操作能否正常进行,如果不行,原因是什么?
可以正常进行
步骤6:在工具栏单击“Execute program”按钮,执行6-1.exe程序。
运行结果(如果运行不成功,原因是什么?): 1)虚拟内存每页容量为:4.00KB 2)最小应用地址:0x00010000 3)最大应用地址:0x7ffeffff
4)当前可供应用程序使用的内存空间为:1.99GB
5)当前计算机的实际内存大小为:1.96GB
请回答问题:
1)理论上每个Windows应用程序可以独占的最大存储空间是: 内存的最大的存储空间。
2)用于检查系统中虚拟内存特性的API函数是:GetSystemInfo()
6.5 实验总结
GetSystemInfo()函数返回关于当前系统的信息,可用于检查系统中虚拟内存特性,由于内存可以共享,所以理论上每个Windows应用程序可以独占的最大存储空间可以是内存的最大的存储空间。
6.6 实验评价(教师)
实验7 存储管理
Windows 2000虚拟内存
(实验估计时间:120分钟)
7.1 背景知识
在Windows 2000 环境下,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的权限与这些区域相关联。 如表7-1所示,给出了MEMORY_BASIC_INFORMATION的结构,此数据描述了进程虚拟内存空间中一组虚拟内存页面的当前状态,其中State项表明这些区域是否为自由区、已调配区或保留区;Protect项则包含了Windows系统为这些区域添加了何种访问保护;Type项则表明这些区域是可执行图像、内存映射文件还是简单的私有内存,VirtualQueryEX()API能让用户在指定的进程中,对虚拟内存地址的大小和属性进行检测。
Windows还提供了一整套能使用户精确控制应用程序的虚拟地址空间API,一些用于虚拟内存操作及检测的API如表7-2所示。
表7-1 MEMORY_BASIC_INFORMATION结构的成员
成员名称 PVOID BaseAddress 虚拟内存开始处的指针 PVOID AllocationBase DWORD AllocationProtect 如果这个特定的区域为子分配区的话,则为虚拟内存外面区域的指针;否则此值与BaseAddress相同 虚拟内存最初分配区域的保护属性。其可能值包括: PAGE_NOACESS,PAGE_READONLY,PAGE_READWRITTEPAGE_EXECUTE_READ。 和目的 DWORD RegionSize 虚拟内存区域的字节数 DWORD State DWORD Protect DWORD Type 区域的当前分配状态,其可能值为MEM_COMMIT,MEM_FREE和MEM_RESERVE 虚拟内存当前区域的保护属性,可能值与AllocationProtect成员相同 虚拟内存区域中出现的页面类型,可能值为MEM_IMAGE,MEM_MAPPED和MEM_PRIVATE
表7-2 虚拟内存的API
API名称 VirtualQueryEx() VirtualAlloc() VirtualFree() VirtualProtect() VirtualLock() VirtualUnlock() 拟内存的区域 保留或调配进程的部分虚拟内存,设置分配和保护标志 释放或收回应用程序使用的部分虚拟地址 改变虚拟内存区域保护规范 防止系统将虚拟内存区域通过系统交换到页面文件中 释放虚拟内存的锁定区域,必要时,允许系统将其交换到页面文件中 描 述 通过填充MEMORY_BASIC_INFORMATION结构检测进程内虚
提供虚拟内存分配功能的是VirtualAlloc()API,该API支持用户向系统要求新的虚拟内存或改变已分配内存的当前状态,用户若想通过VirtualAlloc()API函数使用虚拟内存,可以采用两种方式能知系统: 1)简单地将内存内容保存在地址空间内。
2)请求系统返回带有物理存储区(RAM的空间或换页文件)的部分地址空间。
用户可以用flAllocation Type参数( commit和reserve)来定义这些方式,用户可以通知Windows按只读、读写、不可读写、执行或特殊方式来处理新的虚拟内存。
与VirtualAlloc()函数对应的是VirtualFree()函数,其作用是释放虚拟内存中的已调配页或保留页。用户可利用dwFree Type参数将已调配页修改成保留页属性。
VirtualProtect()是VirtualAlloc()的一个辅助函数,利用它可以改变虚拟内存的保护规范。
7.2 实验目的
1)通过实验了解Windows 2000内存的使用,学习如何在应用程序中管理内存、体会Windows应用程序内存的简单性和自我防护能力。 2)学习检查虚拟内存空间或对其进行操作
3)了解Windows 2000内存结构和虚拟内存的管理,进而了解进程堆和Windows为使用内存而提供的一些扩展功能。
7.3 工具/准备工作