安徽工业大学操作系统实验指导书郭玉华 - 下载本文

上的内存地空间的需求。不过,Windows 2000/XP将未分页合并内存限制为256MB (在Windows NT 4中的限制为128MB) 。根据系统中的物理内存数量,复杂的算法在启动时动态确定Windows 2000/XP系统上的未分页合并内存的最大数量。Windows 2000/XP内部的这一自我调节机制可以根据当前的内存配置自动调整大小。例如,如果增加或减少系统中的内存数量,那么Windows2000将自动调整未分页合并内存的大小,以反映这一更改。

4. 提高分页性能

只有一个物理硬盘驱动器的系统限制了优化分页性能的能力。驱动器必须处理系统和应用程序的请求以及对分页文件的访问。虽然物理驱动器可能有多个分区,但是将分页文件分布到多个分区的分页文件并不能提高硬盘驱动器的能力。只有当一个分区没有足够的空间来包含整个分页文件时,才将分页文件放在同一个硬盘的多个分区上。

拥有多个物理驱动器的服务器可以使用多个分页文件来提高分页性能。关键是将分页请求的负载分布到多个物理硬盘上。实际上,使用独立物理驱动器上的分页文件,系统可以同时处理多个分页请求。各个物理驱动器可以同时访问它自己的分页文件并写入信息,这将增加可以传输的信息量。多个分页文件的最佳配置是将各个分页文件放在拥有自己的控制器的独立驱动器上。不过,由于额外的费用并且系统上的可用中断很有限,因此对于大多数基于服务器的配置来说,这可能是不切实际的解决方案。

分页文件最重要的配置参数是大小。无论系统中有多少个分页文件,如果它们的大小不合适,那么系统就可能遇到性能问题。

如果初始值太小,那么系统可能必须扩大分页文件,以补偿额外的分页活动。当系统临时增加分页文件时,它必须在处理分页请求的同时创建新的空间。这时,系统将出现大量的页面错误,甚至可能出现系统失效。当系统必须在进程的工作区外部 (在物理内存或分页文件中的其他位置) 查找信息时,就会出现页面错误。当系统缺乏存储资源 (物理内存及虚拟内存) 来满足使用需求,从而遇到过多的分页时,就会出现系统失效。系统将花更多的时间来分页而不是执行应用程序。当系统失效时,Memory:Pages/see计数器将持续高于每秒100页。系统失效严重降低了系统的性能。此外,动态扩展分页文件将导致碎片化。分页文件将散布在整个磁盘上而不是在启动时的连续空间中创建,从而增加了系统的开销,并导致系统性能降低。因此,应该尽量避免系统增加分页文件的大小。

提示: 1) WINDOWS中采用的虚拟存储管理方案是请求页式存储管理,分页文件就是我们原理课中所说的交换/对换文件,存放的内容是暂时被交换到外存中的进程页面。UNIX使用的是交换分区,WINDOWS使用的是交换文件。 2)在NTFS驱动器上,总是至少保留25%的空闲驱动器空间,以确保可以在连续的空间中创建分页文件。 3) Windows 2000使用内存数量的1.5倍作为分页文件的最小容量,这个最小容量的两倍作为最大容量。它减少了系统因为错误配置的分页文件而崩溃的可能性。系统在崩溃之后能够将内存转储写入磁盘,所以系统分区必须有一个至少等于物理内存数量加上1的分页文件。 5. Windows虚拟内存

Windows 2000是32位的操作系统,它使计算机CPU可以用32位地址对32位内存块进行操作。内存中的每一个字节都可以用一个32位的指针来寻址。这样,最大的存储空间就是232字节或4000兆字节 (4GB) 。这样,在Windows下运行的每一个应用程序都认为能独占可能的4GB大小的空间。

而另一方面,实际上没有几台机器的RAM能达到4GB,更不必说让每个进程都独享4GB内存了。Windows在幕后将虚拟内存 (virtual memory,VM) 地址映射到了各进程的物

21

理内存地址上。而所谓物理内存是指计算机的RAM和由Windows分配到用户驱动器根目录上的换页文件。物理内存完全由系统管理。

在Windows 2000环境下,4GB的虚拟地址空间被划分成两个部分:低端2GB提供给进程使用,高端2GB提供给系统使用。这意味着用户的应用程序代码,包括DLL以及进程使用的各种数据等,都装在用户进程地址空间内 (低端2GB) 。用户进程的虚拟地址空间也被分成三部分:

1) 虚拟内存的已调配区 (committed) :具有备用的物理内存,根据该区域设定的访问权限,用户可以进行写、读或在其中执行程序等操作。

2) 虚拟内存的保留区 (reserved) :没有备用的物理内存,但有一定的访问权限。 3) 虚拟内存的自由区 (free) :不限定其用途,有相应的PAGE_NOACCESS权限。 与虚拟内存区相关的访问权限告知系统进程可在内存中进行何种类型的操作。例如,用户不能在只有PAGE_READONLY权限的区域上进行写操作或执行程序;也不能在只有PAGE_EXECUTE权限的区域里进行读、写操作。而具有PAGE_ NOACCESS权限的特殊区域,则意味着不允许进程对其地址进行任何操作。

在进程装入之前,整个虚拟内存的地址空间都被设置为只有PAGE_NOACCESS权限的自由区域。当系统装入进程代码和数据后,才将内存地址的空间标记为已调配区或保留区,并将诸如EXECUTE、READWRITE和READONLY的权限与这些区域相关联。

程序清单4-1还显示了如何理解Virtual QueryEX() API填充的MEMORY_BASIC_ INFORMATION结构,如表4-l所示。此数据描述了进程虚拟内存空间中一组虚拟内存页面的当前状态。其中State项表明这些区域是否为自由区、已调配区或保留区;Protect项则包含了Windows系统为这些区域添加了何种访问保护;Type项则表明这些区域是可执行图像、内存映射文件还是简单的私有内存。VirtualQueryEX() API能让用户在指定的进程中,对虚拟内存地址的大小和属性进行检测。

表4-1 MEMORY_BASIC_INFORMATION结构的成员 成员名称 PVOID BaseAddress PVOID AllocationBase 虚拟内存区域开始处的指针 如果这个特定的区域为子分配区的话,则为虚拟内存外面区域的指针;否则此值与BaseAddress相同 虚拟内存最初分配区域的保护属性。其可能值包括: DWORD AllocationProtect PAGE_NOACCESS,PAGE_READONLY,PAGE_READWRITE和PAGE _EXECUTE_READ DWORD RegionSize DWORD State DWORD Protect DWORD Type 虚拟内存区域的字节数 区域的当前分配状态。其可能值为MEM_COMMIT,MEM_FREE和MEM_RESERVE 虚拟内存当前区域的保护属性。可能值与AllocationProtect成员的相同 虚拟内存区域中出现的页面类型。可能值为MEM_IMAGE, MEM_MAPPED和MEM_PRIVATE 目的

Windows还提供了一整套能使用户精确控制应用程序的虚拟地址空间的虚拟内存API。

一些用于虚拟内存操作及检测的API见表4-2所示。

提供虚拟内存分配功能的是VirtualAlloc() API。该API支持用户向系统要求新的虚拟内存或改变已分配内存的当前状态。用户若想通过VirtualAlloc() 函数使用虚拟内存,可以采用两种方式通知系统:

1) 简单地将内存内容保存在地址空间内;

2) 请求系统返回带有物理存储区 (RAM的空间或换页文件) 的部分地址空间。

用户可以用flAllocation Type参数 (commit和reserve) 来定义这些方式,用户可以通知

22

Windows按只读、读写、不可读写、执行或特殊方式来处理新的虚拟内存。

与VirtualAlloc() 函数对应的是VirtualFree() 函数,其作用是释放虚拟内存中的已调配页或保留页。用户可利用dwFree Type参数将已调配页修改成保留页属性。

VirtualProtect() 是VirtualAlloc() 的一个辅助函数,利用它可以改变虚拟内存区的保护规范。

表4-2 虚拟内存的API API名称 VirtualQueryEx() VirtualAlloc() VirtualFree() VirtualProtect() VirtualLock() VirtualUnlock() 描述 通过填充MEMORY_BASIC_INFORMATION结构检测进程内虚拟内存的区域 保留或调配进程的部分虚拟内存,设置分配和保护标志 释放或收回应用程序使用的部分虚拟地址 改变虚拟内存区域保护规范 防止系统将虚拟内存区域通过系统交换到页面文件中 释放虚拟内存的锁定区域,必要时,允许系统将其交换到页面文件中

23

1、 实验目的

(1) 通过对Windows 2000“任务管理器”、“计算机管理”、“我的电脑”属性、“系统信

息”、“系统监视器”等程序的应用,学习如何察看和调整Windows的内存性能,加深对操作系统存储管理、虚拟存储管理等理论知识的理解。

(2) 了解Windows 2000的内存结构和虚拟内存的管理,理解进程的虚拟内存空间和物理

内存的映射关系。

2、 实验内容和步骤

(1)观察和调整Windows 2000/XP的内存性能。

步骤1:阅读“背景知识”,请回答: 1) 什么是“分页过程”?

操作系统求助于硬盘以获得虚拟内存,即将信息从主内存移动到磁盘进行临时存储的过程。

2) 什么是“内存共享”?

应用程序间需要彼此通信和共享信息,即操作系统必须允许访问某些内存空间而不危及它和其它应用程序的安全性和完整性。

3) 什么是“未分页合并内存”和“分页合并内存”?

Windows 2000中,未分页合并内存的最大限制是多少? 分页合并内存是存储迟早需要的可分页代码或数据的内存部分。 未分页合并内存包含必须驻留在内存中的占用代码或数据。 Windows 2000/XP将未分页合并内存限制为256MB。

4) Windows 2000分页文件默认设置的最小容量和最大容量是多少?

____________________________________________________________________ ________________________________________________________________________ 步骤2:登录进入Windows 2000 Professional。

步骤3:查看包含多个实例的应用程序的内存需求。 1) 启动想要监视的应用程序,例如Word。 2) 右键单击任务栏以启动“任务管理器”。

3) 在“Windows任务管理器”对话框中选定“进程”选项卡。 4) 向下滚动在系统上运行的进程列表,查找想要监视的应用程序。 请在表4-3中记录:

24

表4-3 实验记录 映像名称 WINWORD.EXE 768 PID 00 CPU CPU时间 0:0:24 内存使用 13196

“内存使用”列显示了该应用程序的一个实例正在使用的内存数量。 5) 启动应用程序的另一个实例并观察它的内存需求。

25