370 likes | 602 Views
Windows 2000/XP 操作系统概述. 首都师范大学信息工程学院 刘 羽. Windows 2000/XP 操作系统概述. 主要内容 Windows 2000/XP 体系结构 Windows 2000/XP 处理器管理 Windows 2000/XP 内存管理 Windows 2000/XP 文件管理 Windows 2000/XP I/O 管理. Windows 2000/XP 的内存管理.
E N D
Windows 2000/XP操作系统概述 首都师范大学信息工程学院 刘 羽
Windows 2000/XP操作系统概述 • 主要内容 • Windows 2000/XP体系结构 • Windows 2000/XP处理器管理 • Windows 2000/XP内存管理 • Windows 2000/XP文件管理 • Windows 2000/XP I/O管理
Windows 2000/XP的内存管理 • Windows 2000/XP采用了页式虚拟存储技术,作为32位操作系统,Windows 2000/XP提供32位虚拟地址,每个进程的虚拟地址空间理论上最多可达到4GB • 其中,低端2GB或3GB为用户地址空间,高端2GB或1GB为系统地址空间 • 用户空间可被用户态和核心态线程访问,并且对每个进程都是不同的,采用页交换,可以换到外存;而系统空间只能被核心态代码访问,并且对每个进程都是相同的(有三类)
固定页面区 页交换区 直接映射区
Windows 2000/XP的内存管理 • Windows 2000/XP的内存管理主要由执行体中的虚拟内存管理器负责,并由环境子系统负责与具体API有关的一些用户态特征的实现
Windows 2000/XP的内存管理 • 地址转换机制 • 在Windows 2000/XP中,用户应用程序以32位虚拟地址方式编址,处理器利用虚拟内存管理器创建和维护的数据结构将虚拟地址变换为物理地址。 • Windows 2000/XP在X86体系结构上利用二级页表结构来实现虚拟地址向物理地址的变换,一个32位虚拟地址被解释为三个独立的分量:页目录索引、页表索引和字节索引
Windows 2000/XP的内存管理 • 页目录索引用于指出虚拟地址的页目录在页表中的位置。 • 页表索引则用来确定页表项(page table entry,PTE)在页表中的具体位置,而页表项则包含了虚拟地址被映射到的物理地址。 • 字节索引使我们能在物理页中寻找某个具体的地址
虚拟地址变换的基本步骤 • 内存管理的硬件设备定位当前进程的页目录。每个进程都拥有一个单独的页目录,这是由虚拟内存管理器创建的特殊页,用于映射进程所有页表的位置,进程页目录的物理地址被保存在核心进程(KPROCESS)块中。每次进程切换时,通过操作系统设置一个专用的CPU寄存器(在 X86系统中是CR3)来通知硬件设备新进程页目录所在的地址
虚拟地址变换的基本步骤 • 页目录索引用于在页目录中指出页目录项(page directory entry,PDE)的位置,页目录项包含的页框号(page frame number,PFN)描述了映射虚拟地址所需页表的位置。因为 Windows 2000/XP为每个进程均提供一个私有的地址空间,而且每个进程间的地址映射情况各异,所以每个进程都有自己独有的页表集来映射私有地址空间。描述系统空间的页表被所有的进程共享
虚拟地址变换的基本步骤 • 页表索引用于在页表中指明页表项的位置。如果页表项是有效的(标志页表是否有效的标志位为1)。则页表项会包含物理内存中一个页的页框号,相应的虚拟页面就包含在这个物理页框中。如果页表项表明所需的页是无效的,则说明所需的页由于某种原因对当前进程是不可访问的。对无效页面的一次访问称为缺页错误,缺页错误将导致缺页中断。内核中断处理程序将缺页中断调派给内存管理故障处理程序来解决。这个程序运行在引起错误的线程环境下,并负责尝试解决这个错误(如果可能)或引发适当的异常
虚拟地址变换的基本步骤 • 当页表项指向了有效的页时,字节索引用于找到物理页内所需数据的地址
Windows 2000/XP的内存管理 • 每次地址变换都需要经过两次查询: • 一次是在页目录中找到正确的页表, • 一次是在页表中找到正确的项。 • 如果每次对虚拟地址的访问都做两次额外的内存查询,这将使系统性能严重下降,因此大多数处理器在地址变换时运用了高速缓存技术CACHE。X86处理器提供了关联存储器数组形式的高速缓存,称为转换后援缓冲器(translation look aside buffer,TLB)
Windows 2000/XP的内存管理 • TLB是一个向量,它的存储单元能被同时读取,并与目标值比较。 • 在TLB中,向量中包含了大多数最近用过的虚拟页到物理页的映射以及每页的页保护类型。 • 由于常用的虚拟地址很可能记录在TLB项中,这就使虚拟地址到物理地址的变换非常快,而且减少了对内存的访问。 • 如果一个虚拟地址不在TLB中,它可能仍在内存中,但是需要对内存多次访问来找到它。如果一个虚页已经被调出了内存,或者虚拟内存管理器更改了页表项,那么虚拟内存管理器必须明确地将相应的TLB项置为无效。当进程再次访问这个虚页时,就会产生缺页中断,虚拟内存管理器将该页再次调回内存,同时在 TLB中为它重新创建项
Windows 2000/XP的内存管理 • 当一个页被调出内存时,Windows 2000/XP将其存入称为页文件(page file)的盘交换文件中。Windows 2000/XP可以支持多达16个盘交换文件
物理地址扩展(PAE, Physical Address Extension) • Physical Address Extension (PAE) allows for up to 64 gigabytes of memory to be used in 32 bit systems • PAE is provided by Intel Pentium Pro and above CPUs (including all Pentium-series processors except the original Pentium and the Pentium MMX ), as well as by some compatible processors such as those from AMD . • On Microsoft Windows this mechanism is the Address Windowing Extension (AWE)
物理地址扩展(PAE, Physical Address Extension) • 支持PAE技术的Windows系统 • Windows Server2003 Enterprise Edition • Windows Advanced Server, Limited Edition • Windows 2000 Datacenter Server • Windows 2000 Advanced Server • To enable PAE, you must use the /PAE switch in the Boot.ini file • a 2-bit field, two 9-bit fields, and a 12-bit field that
Address Windowing Extensions • Address Windowing Extensions (AWE) is a set of extensions that allows an application to quickly manipulate physical memory greater than 4GB. • AWE allows applications to have data caches larger than 4GB (where sufficient physical memory is present). • AWE uses physical nonpaged memory and window views of various portions of this physical memory within a 32-bit virtual address space.
Windows 2000/XP的内存分配 • Windows 2000/XP的虚拟内存管理器提供了丰富的系统服务(或称本机服务,native service),用户态进程可以通过环境子系统使用本机服务的部分功能,从而使用户具有部分内存管理的能力。
Windows 2000/XP的内存分配 • Windows 2000/XP提供了三种内存分配的机制 • 以页面为单位的虚拟内存分配方法 • 通过区域对象服务提供的大数据流和内存共享服务 • 内存堆方法
以页面为单位的虚拟内存分配方法 • 适合于管理大型对象数据结构。对于以页面为单位的虚拟内存, Windows 2000/XP指定了一种内存分配的两阶段方法:保留内存和提交内存 • 应用程序可以首先保留地址空间,然后向此地址空间提交物理页面。这些功能是通过 VirtualAlloc和VirtualAllocEx函数实现的,保留地址空间是为线程将来使用所保留的一块虚拟地址。试图访问已保留内存会造成访问冲突,因为这时内存页面还没有映射到一个可以满足这次访问的存储器上。在已保留的区域中,提交页面必须指出将物理存储器提交到何处以及提交多少。提交页面在访问时会转变为物理内存中的有效页面
以页面为单位的虚拟内存分配方法 • 可以通过VirtualFree或VirtualFreeEx函数回收页面或释放地址空间。回收和释放之间的区别与保留和提交之间的区别相似——回收的内存仍然被保留,但是释放的内存不被提交,也不被保留 • 分两步保留和提交内存可以直到需要时才提交页面,这样减少了内存的使用。保留内存是 Windows 2000/XP中既快速又廉价的操作,因为它不消耗任何物理页面或进程页文件配额 • 对于每一个进程,Windows 2000/XP的虚拟内存管理器维护一组虚拟地址描述符(Virtue Address Descriptor,VAD)来描述进程虚拟空间的状态。虚拟地址描述信息被构造成一棵自平衡二叉树以使查找更有效率
以页面为单位的虚拟内存分配方法 范围:20000000到2000FFFF 保护限制:读/写 继承:有 范围:00002000到0000FFFF 保护限制:只读 继承:无 范围:4E000000到4F000000 保护限制:复制可写入 继承:有 范围:32000000到3300FFFF 保护限制:只读 继承:无 范围:7AAA0000到7AAA00FF 保护限制:读/写 继承:无 虚拟地址描述信息树
通过区域对象服务提供的大数据流和内存共享服务通过区域对象服务提供的大数据流和内存共享服务 • 区域对象(section object)在Win32子系统中被称之为文件映射对象,表示可以被两个或更多进程所共享的内存块。区域对象也可以基于页文件。 • 区域对象和其他对象一样由对象管理器创建和删除,对象管理器负责用对象头来管理区域对象,而虚拟内存管理器定义区域对象的实体并实现对象服务
通过区域对象服务提供的大数据流和内存共享服务通过区域对象服务提供的大数据流和内存共享服务 • 可以调用Win32 API函数CreateFileMapping创建区域对象,其参数包括映射到区域对象的文件:句柄(或是INVALID_HANDLE_VALUE表示页文件支持区域),还有可选的名字和安全描述符 • 如果区域有名字,其他进程可以用OpenFileMapping打开它。 • 区域对象的大小可以远大于进程地址空间的大小,达264B,这对于数据量很大的图像和多媒体应用十分有利。要访问一个非常大的区域对象,进程只能通过调用MapViewOfFile函数映射区域对象的一部分(叫做区域视图),并指定映射范围。由于在一个时刻只有需要的区域对象视图必须被映射到内存,进程可以只为映射视图保留地址空间
通过区域对象服务提供的大数据流和内存共享服务通过区域对象服务提供的大数据流和内存共享服务 • 应用程序可以通过将文件映射到它的地址空间来方便地完成文件的I/O操作。不仅用户应用程序使用区域对象,系统也通过区域对象加载可执行映像、动态链接库DLL以及设备驱动程序到内存,高速缓存管理器使用它们在缓存文件中存取数据 • 像大多数的现代操作系统一样,Windows 2000/XP提供了在进程和操作系统之间共享内存的机制。共享内存可以定义为对于多个进程都是可见的内存,或者存在于多个进程的虚拟地址空间的内存。当两个进程对同一区域对象建立视图时,就发生了对该区域对象的共享
对象类型 区域 最大规模 页保护限制 页文件/映射文件 基准的/非基准的 对象体属性 服务程序 创建区域 打开区域 扩展区域 映射/非映射区域 查询区域
内存堆方法 • 内存堆方法适合于大量的小型内存申请。堆是保留的地址空间中一个或多个页组成的区域,这个地址区域可以由堆管理器按更小块划分和分配。堆管理器是执行体中分配和回收可变内存的函数集 • 进程启动时带有一个默认进程堆,通常是1MB大小。进程也可以使用HeapCreate函数创建另外的私有堆。当进程不再需要私有堆时,可以通过调用HeapDestroy释放虚拟地址空间。为了从默认堆中分配内存,线程必须调用GetProcessHeap函数得到一个指向它的句柄。有了句柄后,线程可以调用HeapAlloc和HeapFree来从堆中分配和回收内存块
Windows 2000/XP的内存分配 • 以上三种Windows 2000/XP用户空间内存的分配方式,虚拟内存管理器还为设备驱动程序以及其他核心态组件提供了大量的系统内存分配服务,如分配和释放物理内存、锁定物理内存页面实现直接内存访问(DMA)等 • Windows 2000/XP的系统空间包含分页缓冲池和非分页缓冲池两种内存缓冲池,核心态组件可以用它们来分配系统内存。 • 非分页缓冲池由长驻物理内存的系统虚拟地址区域组成,在任何时候,从任何IRQL级和任何进程上下文都可以访问 • 分页缓冲池是系统空间中可以被分页和换出的虚拟内存区域。 • 两种内存缓冲池均位于系统空间,并被映射到每个进程的虚拟地址空间