实验三:存储管理
一、 实验名称
实验三:存储管理
[1]Windows Server 2003内存结构 [2] Windows Server 2003虚拟内存
二、 [1]实验目的
1) 通过实验了解windows Server 2003内存的使用,学习如何在应用程序中管理内存、
体会Windows应用程序内存的简单性和自我防护能力。
2) 了解windows Server 2003的内存结构和虚拟内存的管理,进而了解进程堆和
windows为使用内存而提供的一些扩展功能。
三、 [1]实验内容
1. 使用任务管理器终止进程 2. 显示其他进程计数器
3. 更改正在运行的程序的优先级
四、 [1]实验步骤
Windows提供了一个API即GetSystemInfo() ,以便用户能检查系统中虚拟内存的一些特性。程序5-1显示了如何调用该函数以及显示系统中当前内存的参数。
步骤1:登录进入Windows Server 2003 。 步骤2:在“开始”菜单中单击“程序”-“Microsoft Visual Studio 6.0”–“Microsoft Visual C++ 6.0”命令,进入Visual C++窗口。
步骤3:在工具栏单击“打开”按钮,在“打开”对话框中找到并打开实验源程序5-1.cpp。 程序5-1:获取有关系统的内存设置的信息
步骤4:单击“Build”菜单中的“Compile 5-1.cpp”命令,并单击“是”按钮确认。系统对4-1.cpp进行编译。
步骤5:编译完成后,单击“Build”菜单中的“Build 5-1.exe”命令,建立5-1.exe可执行文件。
操作能否正常进行?如果不行,则可能的原因是什么?
答:操作能正常进行。_____________________________________________________ 步骤6:在工具栏单击“Execute Program” (执行程序) 按钮,执行5-1.exe程序。 运行结果 (分行书写。如果运行不成功,则可能的原因是什么?) :
1) 虚拟内存每页容量为: 4.00KB
2) 最小应用地址: 0x00010000 3) 最大应用地址为: 0x7ffeffff 4) 当前可供应用程序使用的内存空间为: 3.92GB 5) 当前计算机的实际内存大小为: 1.99GB 阅读和分析程序5-1,请回答问题:
1) 理论上每个windows应用程序可以独占的最大存储空间是:____4GB____
2) 在程序5-1中,用于检索系统中虚拟内存特性的API函数是: DWORD
提示:可供应用程序使用的内存空间实际上已经减去了开头与结尾两个64KB的保护区。虚拟内存空间中的64KB保护区是防止编程错误的一种Windows方式。任何对内存中这一区域的访问 (读、写、执行) 都将引发一个错误陷井,从而导致错误并终止程序的执行。也就是说,假如用户有一个NULL指针 (地址为0) ,但仍试图在此之前很近的地址处使用另一个指针,这将因为试图从更低的保留区域读写数据,从而产生意外错误并终止程序的执行。
五、 [1]实验结论
通过本次实验我了解windows Server 2003内存的使用,同时学习了如何在应用程
1 / 12
实验三:存储管理
序中管理内存。在实验的过程中,体会到了Windows应用程序内存的简单性和自我防护能力。对于Windows sever 2003的内存结构有了一定的了解。
二、[2]实验目的
1)通过实验了解Windows Server 2003内存的使用,学习如何在应用程序中管理内存,体会Windows应用程序内存的简单性和自我防护能力。
2)学习检查虚拟内存空间或对其进行操作。
3)了解Windows Server 2003的内存结构和虚拟内存的管理,进而了解进程堆和Windows为使用内存而提供的一些扩展功能。
三、[2]实验内容与实验步骤
1. 虚拟内存的检测
清单5-2所示的程序使用VirtualQueryEX()函数来检查虚拟内存空间。 步骤1:登录进入Windows Server 2003。 步骤2:在“开始”菜单中单击“程序”-“Microsoft Visual Studio 6.0”–“Microsoft Visual C++ 6.0”命令,进入Visual C++窗口。
步骤3:在工具栏单击“打开”按钮,在“打开”对话框中找到并打开实验源程序5-2.cpp。 清单5-2 检测进程的虚拟地址空间
清单5-2中显示一个walkVM()函数开始于某个进程可访问的最低端虚拟地址处,并在其中显示各块虚拟内存的特性。虚拟内存中的块由VirsualQueryEX()API定义成连续快或具有相同状态(自由区,已调配区等)的内存,并分配以一组统一的保护标志(只读、可执行等)。
步骤4:单击“Build”菜单中的“Compile 5-2.cpp”命令,并单击“是”按钮确认。系统对5-2.cpp进行编译。
步骤5:编译完成后,单击“Build”菜单中的“Build 5-2.exe”命令,建立5-2.exe可执行文件。
操作能否正常进行?如果不行,则可能的原因是什么?
答:操作能正常运行。___________________________________________________ 步骤6:在工具栏单击“Execute Program” (执行程序) 按钮,执行5-2.exe程序。 1)分析运行结果(如果运行不成功,则可能的原因是什么)
按committed,reserved,free等三种虚拟地址空间分别记录实验数据,其中“描述”是对该组数据的简单描述,例如,对下列一组数据:
00010<8.00KB>Committed,READWRITE,Private可描述为:具有READWRITE权限的已调配私有内存区。
将系统当前的自由区(Free)虚拟地址空间填入表3-3中。
表3-3 实验记录 地址 00010 00020 00130 00260 002b1000-002c0000 00300 大小 56.0KB 60.0 KB 44.0 KB 40.0 KB 60.0 KB 60.0 KB 虚拟空间类型 free free free free free free 访问权限 NOACCESS NOACCESS NOACCESS NOACCESS NOACCESS NOACCESS 描述 没有任何权限的已调配的共有内存区 没有任何权限的已调配的共有内存区 没有任何权限的已调配的共有内存区 没有任何权限的已调配的共有内存区 没有任何权限的已调配的共有内存区 没有任何权限的已2 / 12
实验三:存储管理
调配的共有内存区 00310 40.0 KB free NOACCESS 没有任何权限的已调配的共有内存区 将系统当前的已调配区(Committed)虚拟地址空间填入表3-4中。 表3-4 实验记录 地址 大小 虚拟空间类型 Committed 00010 8.00KB Committed 00020 4.00 KB Committed 0012c000-0012d000 4.00 KB Private Private Private 访问权限 只描述 有具有READWRITE权限的已调配私有内存区 只有具有READWRITE权限的已调配私有内存区 具有GUARD,READEWRITE权限的已调配私有内存区 只有具有Committed 0012d 12.0 KB Committed 00130 20.0 KB Committed 00140 28.0 KB Committed 00240 12.0 KB Mapped Private Mapped Private READWRITE权限的已调配私有内存区 只有具有READONLY权限的已调配映射内存区 只有具有READWRITE权限的已调配私有内存区 只有具有READWRITE权限的已调配映射内存区 将系统当前的保留区(Reserved)虚拟地址空间填入表3-5中。 表3-5 实验记录 地址 大小 虚拟空间类型 Reserved -0012c000 0.98 MB Reserved 00140 996 KB Reserved 00240 52.0 KB Reserved 00370 -003a0000 52.0 KB 32.0 KB Reserved Private Private Mapped Private Private 访问权限 只描述 有具有READONLY权限的已调配私有内存区 只有具有READONLY权限的已调配私有内存区 只有具有READONLY权限的已调配映射内存区 只有具有READONLY权限的已调配私有内存区 只有具有3 / 12