Windows03报告.ppt_第1页
Windows03报告.ppt_第2页
Windows03报告.ppt_第3页
Windows03报告.ppt_第4页
Windows03报告.ppt_第5页
免费预览已结束,剩余68页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,马洪兵清华大学电子工程系, 62773434,Windows操作系统原理,2,第三讲 Windows操作系统的 存储管理(上),Windows 的内存管理 Windows 的外存管理 实习.内存管理问题,3,Windows的内存管理,内存管理器的组成部分 地址空间布局 地址转换机制 缺页处理 内存分配方式 工作集 物理内存管理,4,内存管理器的组成部分,一组执行体系统服务程序,用于虚拟内存的分配、回收和管理。大多数这些服务都是通过Win32 API 或内核态的设备驱动程序接口形式出现。 一个页面错误陷阱处理程序用于解决硬件检测到的内存管理异常,并代表进程将虚拟页面装入内存。 运行在六个不同

2、的核心态系统线程上下文中的几个关键组件,5,工作集管理器(MmWorkingSetManager) :当空闲内存低于某一界限时,便启动所有的内存管理策略,如:工作集的修整、老化和已修改页面的写入等。 进程/堆栈交换器(KeSwapProcessOrStack) :完成进程和内核线程堆栈的换入和换出操作。 已修改页面写入器(MiModifiedPageWriter):将修改链表上的“脏”页写回到适当的页文件。,内存管理器的组成部分,六个关键组件:,6,映射页面写入器(MiMappedPageWriter):将映射文件中脏页写回磁盘。 废弃段线程(MiDereferenceSegmentThrea

3、d):负责系统高速缓存和页面文件的扩大和缩小。 零页线程(MmZeroPageThread):将空闲链表中的页面清零。,内存管理器的组成部分,六个关键组件:,7,地址空间布局,应用程序代码,全程变量,每个线程堆栈,DLL代码,3GB用户空间,1GB系统空间,7FFFFFFF,80000000,内核和执行体,HAL,引导驱动程序,C0000000,进程页表,BFFFFFFF,超空间,C0800000,系统高速缓存,分页缓冲池,未分页缓冲池,FFFFFFFF FFFFFFFF,00000000,00000000,在boot.ini中加入3GB标志,8,地址空间布局,系统代码 包括操作系统映像、HA

4、L和用于引导系统的设备驱动程序。 系统映射视图 用来映射Win32子系统可加载的核心态部分Win32k.sys,以及它使用的核心态图形驱动程序。 会话空间 用来映射一个用户的会话信息。 进程页表和页目录 描述虚拟地址映射的结构。 超空间 一个特殊的区域用来映射进程工作集链表,并为创建临时映射物理页面。,系统地址空间布局,9,地址空间布局,系统工作集链表 描述系统工作集的工作集链表数据结构。 系统高速缓存 用来映射在系统高速缓存中打开的文件的虚拟空间。 分页缓冲池 可分页系统内存堆。 系统PTE 系统PTE缓冲池,用来映射系统页面。 非分页缓冲池 不可分页的系统内存堆。,系统地址空间布局,10,

5、地址空间布局,MmSystemRangeStart 系统空间的起始地址 MmSystemCacheStart MmSystemCacheEnd 系统高速缓存的起始、终止地址 MiSystemCacheStartExtra MiSystemCacheEndExtra 系统高速缓存扩展(或系统PTE扩展)的起始、终止地址 MmPagedPoolStart MmPagedPoolEnd 分页缓冲池的起始、终止地址,系统地址空间布局,11,地址空间布局,MmNonPagedSystemStart 系统PTE的起始地址 MmNonPagedPoolStart MmNonPagedPoolEnd 非分页缓

6、冲池的起始、终止地址 MmNonPagedPoolExpansionStart 非分页缓冲池扩展的起始地址 MmSystemCacheWorkingSetList 系统工作集列表,系统地址空间布局,12,地址空间布局,每个进程有自己的用户地址空间(低2G),在用户地址空间中有,进程的环境变量、进程的参数、进程的堆(Heap)、进程载入的模组、进程PEB、线程的堆栈(Stack)、线程TEB,用户地址空间布局,MmUserProbeAddress 最高用户空间地址,13,地址转换机制,14,地址转换机制,硬件PDE/PTE 的格式(X86),由HARDWARE_PTE 结构定义,15,. . .

7、,. . .,. . .,. . .,. . .,进程1 的页表,进程2 的页表,PTE 0,进程1的 页目录,进程2的 页目录,PTE 0,PDE 0,PDE 0,System PTE 0,PDE 511,PDE 512,PDE n,PDE n,PDE 512,PDE 511,. . .,. . .,. . .,. . .,. . .,. . .,System PTE n,. . .,系统页表,进程没有 访问的系 统页表,各进程私有,地址转换机制,进程页表与系统页表,16,快表TLB,地址转换机制,17,缺页处理,页目录项和页表项的最低位最低位为1,有效(Valid),表示该页映射了物理内存

8、。 当要访问的虚拟地址所在页在物理内存中时,该虚拟地址所在页相应的 PDE,PTE 都有效,CPU 自动根据相应的PDE,PTE把虚拟地址转换成物理地址,完成访问 这一过程操作系统不需介入。 如果要访问的虚拟地址所在页在不物理内存中,此时的PTE无效(最低位为 )。对无效PTE的格式的定义,由操作系统负责。,18,缺页处理,无效的页表项 页文件 所需的页驻留在一个页文件中,引发页面调入操作 请求零页 所需的页必须是零页面,页文件偏移,保护,0,0,文件号,31 12 11 10 9 5 4 1 0,转换,原型,有效,19,缺页处理,无效的页表项 转换 所需页面在内存中的后备链表、修改链表或修改

9、尚未写入链表 未知 页表项为零,或者页表不存在,转换,原型,有效,页框号,保护限制,0,1,1,31,12 11 10 9 5 4 3 2 1 0,写,拥有者,直接写,缓存禁用,保护限制,20,缺页处理,当某条指令访问的页不在物理内存中时,CPU 仍然会自动通过页目录和页表把虚拟地址 转换成物理地址,在地址转换过程中,CPU将会发现对应地址的页表项无效,从而就会引发页面错误(Page Fault) 异常,该异常的中断号是 0 xe,有时也称为缺页中断。 发生缺页中断时, CPU 自动将引发异常时访问的虚拟地址存入寄存器CR2。,缺页中断,21,缺页处理,在发生异常时,CPU 自动根据中断号,在

10、中断描述符表中找到相应的中断描述符,根据中断描述符中的地址,转到异常处理程序ntoskrnl!KiTrap0E。 异常处理程序 KiTrap0E是操作系统提供的,它将会调用MmAccessFault ,MmAccessFault 通过 CR2 中的访问地址,计算出相应的 PDEPTE地址,通过分析PTE中的内容(无效的 PDEPTE的格式由操作系统定义),可以知道是哪种情况引起的异常,并根据情况作出相应的处理。,缺页中断,22,页面调入I/O,向文件(页或映射文件)发出读操作来解决缺页问题 页面调入I/O是同步的,缺页处理,23,页文件,使磁盘空间看起来象内存一样 最多16个页文件 页文件以非

11、压缩的形式被创建,缺页处理,24,内存分配方式,以页为单位的虚拟内存分配方式 函数(Virtualxxx) 内存映射文件 函数(CreateFileMapping, MapViewOfFile), 内存堆方法 (Heapxxx 和早期的接口Localxxx 和Globalxxx)。,用户空间内存分配方式,25,以页为单位的虚拟内存分配方法 适合于管理大型对象数据结构,尤其是动态或稀疏分配的。对于以页为单位的虚拟内存,Windows 采用两阶段内存分配方法:保留内存和提交内存。 应用程序可以首先保留地址空间,然后向此地址空间提交物理页面。VirtualAlloc和VirtualAllocEx函数

12、实现这些功能。 保留地址空间是为线程将来使用所保留的一块虚拟地址。在已保留的区域中,提交页面必须指出将物理存储器提交到何处以及提交多少。提交页面在访问时会转变为物理内存中的有效页面。 VirtualFree或VirtualFreeEx函数回收页面或释放地址空间。,用户空间内存分配方式,26,使用 VirtualAlloc 可以在用户地址空间中保留或者提交指定地址和大小的一段地址空间。那么系统如何知道指定的这段地址空间是不是已经被分配(保留或者提交)。对于指定地址空间是否已经被提交了物理内存,可以通过页目录和页表来判断,不过这样做很麻烦。而对于指定地址空间是否已经被保留,通过页目录和页表没有办法

13、判断。 Windows中使用 VAD 来解决这个问题。,用户空间内存分配方式,以页为单位的虚拟内存分配方法,27,虚拟地址描述符,用户空间内存分配方式,对于每一个进程,Windows 的内存管理器维护一组虚拟地址描述符(VAD,Virtue Address Descriptors)来描述一段被分配的进程虚拟空间的状态。 虚拟地址描述信息被构造成一棵自平衡二叉树以使查找更有效率。,VAD二叉排序树的根的地址保存在进程结构 EPROCESS 中。,28,Windows的进程结构,用户空间内存分配方式,29,通过区域对象服务提供的大数据流和内存共享服务 区域对象(section object)在Wi

14、n32子系统中被称之为文件映射对象,表示可以被两个或更多进程所共享的内存块。区域对象也可以基于页文件。 CreateFileMapping创建区域对象 MapViewOfFile函数映射区域对象的一部分(叫做区域视图),并指定映射范围 当两个进程对同一区域对象建立视图时,就发生了对该区域对象的共享。,用户空间内存分配方式,30,区域对象(section object),区域对象和其他对象一样由对象管理器创建和删除,对象管理器负责用对象头来管理区域对象,而虚拟内存管理器定义区域对象的实体并实现对象服务。,用户空间内存分配方式,31,用户空间内存分配方式,内存堆方法 内存堆方法适合于大量的小型内存

15、申请。堆(heap)是保留的地址空间中一个或多个页组成的区域,这个地址区域可以由堆管理器按更小块划分和分配。堆管理器是执行体中分配和回收可变内存的函数集。 进程启动时带有一个缺省进程堆,通常是1MB大小。为了从缺省堆中分配内存,线程必须调用GetProcessHeap函数得到一个指向它的句柄。有了句柄后,线程可以调用HeapAlloc和HeapFree来从堆中分配和回收内存块。 进程也可以使用HeapCreate函数创建另外的私有堆。当进程不再需要私有堆时,可以通过调用HeapDestroy释放虚拟地址空间。,32,系统内存分配,非分页缓冲池 由系统虚拟地址组成,它们长期驻留在物理内存中,在任

16、何时候都可以被访问到(从任何IRQL级和任何进程上下文),而不会发生页错误。 分页缓冲池 是系统可以被分页和换出的虚拟内存的一个区域。不从DPC/调度级或更高级访问内存的设备驱动程序可以使用分页缓冲池。,内存分配方式,33,系统有两种非分页缓冲池:一种在一般情况下使用,另一种小型的(4页)缓冲池在非分页缓冲池已满并且调用者不能允许分配失败时,紧急使用。 单处理机系统有三个分页缓冲池;多处理机系统有五个。,系统内存分配,系统内存分配,34,工作集,工作集要讨论的问题是分给每个进程多少物理页面,以及如何动态调整各进程的物理页面数。 由Denning提出 工作集驻留在物理内存中的虚拟页面的子集。 进

17、程工作集:为每个进程分配的一定数量的页框 系统工作集:为可分页的系统代码和数据分配的 页框,35,工作集大小的变化:进程开始执行后,随着访问新页面逐步建立较稳定的工作集。当内存访问的局部性区域的位置大致稳定时,工作集大小也大致稳定;局部性区域的位置改变时,工作集快速扩张和收缩过渡到下一个稳定值。,工作集,36,取页策略:内存管理器利用请求式页面调度算法以及簇(集群)方式将页面装入内存 置页策略:选择页框应使CPU内存高速缓存不必要的震荡最小 换页策略 在多处理器系统中,Windows 2000/XP/2003采用了局部先进先出置换策略。而在单处理器系统中,其实现更接近于最近最少使用策略(LRU

18、)(称为“轮转算法)。,页面调度策略,工作集,37,系统工作集,系统高速缓存页面 分页缓冲池 Ntoskrnl.exe中可分页的代码和数据 设备驱动程序中可分页的代码和数据 系统映射视图(部分映射在0 xA0000000处,如Win32k.sys),工作集,38,当操作系统需要提供一个物理页给应用程序,来满足应用程序要求的时候,将遇到一个问题,系统如何知道哪些物理页已经被使用,哪些物理页没有被使用。 页框号数据库( Page Frame Number DataBase )和它的相关结构用来解决这个问题。,物理内存管理,Page Frame Number PFN,39,对于每一个物理页,操作系统

19、使用一个24字节长的结构MMPFN来保存它的相关信息。页框号数据库就是一个 MMPFN 数组,这个数组的每一项对应一个物理页,例如数组第0项,对应物理页0,也就是页框号为0的物理页框。 Windows把页框号数据库的首地址保存在全局变量 MmPfnDatabase 中。,物理内存管理,40,物理内存管理,活动(Active)有效(Valid ) 这个物理页在某个进程的 Working Set 中,该进程的一个有效的页表项中的高20bit正是这个物理页的PFN。 过渡(Transition) 系统正在从一个文件将内容读入该物理页,或者正在向一个文件写出该物理页内容。,物理内存中每个页面的状态,4

20、1,物理内存管理,后备(stand by) 这个物理页曾经在某个进程的 Working Set 中,并且物理页中的内容在被该进程使用时没有被改变过。但是现在已经被移出该进程的 Working Set,不过物理页中的内容仍是在该进程 Working Set 中时的内容。该进程相应的PTE中的高20bit仍然是这个物理页的页框号,只是该PTE被标为 invalid 和 transition。当该进程需要再次访问这一页的内容时,只需要重新设定该PTE的标志,并把该PTE变为有效。把该物理页从 Standby 状态变为Active(Valid) 状态就可以了。,物理内存中每个页面的状态,42,物理内存

21、管理,修改(Modified ) 这个物理页曾经在某个进程的 Working Set 中,并且物理页中的内容在被该进程使用时被改变过。但是现在已经被移出了该进程的 Working Set,不过物理页中的内容仍是被移出时的内容。该进程相应的PTE中的高20bit仍然是这个物理页的页框号,只是该PTE被标为 invalid 和 transition。当该进程需要再次访问这一页的内容时,只需要重新设定该PTE的标志,并把该PTE变为有效。把该物理页从 Modified 状态变为Active(Valid) 状态就可以了。在该物理页被系统作为其他用途使用之前,该物理页中的内容需要被写入硬盘中的页文件的相

22、应页。,物理内存中每个页面的状态,43,物理内存管理,修改不写入(Modified no-write ) 内存管理器的 Modified Page Writer 将不会把这种物理页写入硬盘,其他和 Modified 物理页一样。 空闲(Free ) 该物理页中的内容不再被需要 零初始化(zeroed) 该页free并且已经被用零初始化 坏(Bad ) 该页存在硬件错误,不能被使用,物理内存中每个页面的状态,44,物理内存管理,45,物理内存管理,MmZeroedPageListHead,MmFreePageListHead,MmStandbyPageListHead,MmModifiedNoW

23、ritePageListHead,MmModifiedPageListHead,MmBadPageListHead,46,物理内存管理,47,Windows的外存管理,磁盘管理的基本术语 Windows 外存管理的演变 动态分区 驱动程序 多重分区管理 卷名字空间,48,盘一种物理存储设备。 扇区可寻址的大小固定的块。 分区盘上连续扇区的集合。 简单卷代表文件系统驱动程序作为一个独立单元管理来自一个分区的所有扇区。 多分区卷代表文件系统驱动程序作为一个独立单元管理来自多个分区的所有扇区。多分区卷提供简单卷所不支持的性能、可靠性和大小等特性。,磁盘管理的基本术语,49,Windows外存管理的演

24、变,MSDOS在一个物理盘上采用多个分区,也就是逻辑盘,50,Windows NT (5.0以前)扩展了MS-DOS分区的基本概念,支持企业级操作系统所需的一些存储管理的特征:跨磁盘管理(disk spanning)和容错(fault tolerance) 支持由多个分区组成的卷,允许一个大的卷由分布在不同物理盘上的分区组成,Windows外存管理的演变,51,早期Windows磁盘管理的缺点,对大多数磁盘设置的改变需要重启操作系统才能生效 多分区磁盘的配置信息保存在注册表中 每个卷有一个唯一的从A到Z的驱动器名,Windows外存管理的演变,52,Windows 5.0开始引入了基本盘和动态

25、盘的概念 基本盘基于MS-DOS分区方式的盘 基本盘的多分区卷配置信息保存在注册表中 动态盘支持创建新的多分区卷 动态盘的多分区卷配置信息保存在磁盘上 动态盘分区格式是专有的,与其他操作系统不兼容,包括Windows早期版本,Windows外存管理的演变,53,动态分区,由逻辑磁盘管理子系统(LDM)负责管理,LDM的数据库存在于每个动态盘最后的1MB保留空间中。 LDM实现了一个MS DOS的分区表,这是为了继承一些在Windows2000/XP/2003下运行的磁盘管理工具,或是在双引导环境中让其它系统不至于认为动态盘还没有被分区。 由于LDM分区在磁盘的MS DOS分区表中并没有体现出来

26、,所以被称为软分区,而MS DOS分区被称为硬分区。,54,动态分区,动态盘的内部组织,55,动态分区,LDM数据库,私有头:GUID,磁盘组的名字(该名字是由Dg0和计算机的名字一起组成,例如SusanDg0,意味着计算机的名字是Susan)和一个指向数据库内容表的指针。为了保证可靠性,LDM在磁盘的最后一个扇区保存了私有头的拷贝。,56,数据库内容表有16个扇区大小,其中包含关于数据库布局的信息。 数据库记录区域紧接着内容表,并将内容表后第一个扇区作为数据库记录头。这个扇区中存储了数据库记录区的信息,包括其所包含的记录个数,数据库相关的磁盘组的名字和GUID,以及LDM用于创建下一项的序列

27、号。,LDM数据库,动态分区,57,数据库中的每一项可以是如下四种类型之一:分区,磁盘,组件,卷。LDM把每一项与内部对象的标识符联系到一起。 分区项描述软分区,它是在一个盘上的连续区域。存储在分区项中的标识符把这个项与一个组件和一个磁盘项联系起来。 磁盘项代表一个磁盘组中的动态盘,包括磁盘的GUID。 组件项像一条链子把一个或多个分区项和与分区相连的卷项联系起来。 卷项存放这个卷的GUID,卷的大小和状态,驱动器的名字。,LDM数据库结构,动态分区,58,LDM需要三个项来描述一个简单卷:分区项、组件项和卷项。分区项描述系统分配给某个卷的磁盘上的一个区域,组件项把一个分区项和一个卷项联系起来

28、,卷项中包含Windows 2000/XP内部用来识别卷的GUID。 多分区卷需要的项数多于三个。例如,一个条带卷包括最少两个分区项,一个组件项和一个卷项。唯一一种含有一个以上组件项的卷的类型是:镜像卷。镜像卷含有两个组件项,每个只表示这个镜像的一半。LDM为每个镜像卷使用两个组件项的目的是,当一个镜像破坏时LDM能够在组件一级将他们分割开来,并创建两个各含有一个组件项的卷。 因为简单卷需要三个项,而1MB数据库空间大约可以容纳8000个项,所以在Windows 2000/XP中可以创建的卷数目的有效上界大约是2500个。,LDM数据库结构,动态分区,59,LDM数据库的最后部分是事务处理日志

29、区,它包含的几个扇区在数据库信息改变时用来存储备份信息。这样确保在系统崩溃或断电时,LDM能够利用日志把系统恢复到一个正确的状态。,LDM数据库,动态分区,60,磁盘驱动程序 遵循类/端口/小端口结构 类:实现所有存储设备共同的功能 端口:基于某种特定总线设备的共同功能,如SCSI、IDE 小端口:OEM提供,Windows的外存驱动程序,61,卷管理器,FtDisk.sys驱动程序创建代表基本盘上卷的设备对象,为每一个卷都创建一个形如DeviceHarddiskVolumeX的设备对象 DMIO.sys驱动程序控制对动态盘上LDM数据库的访问并创建代表动态盘上卷的设备对象,它为动态盘的每一个

30、卷都创建一个形如DeviceHarddiskDmVolumesPhysicalDmVolumesBlockVolumeX的设备对象 FtDisk和 DMIO负责识别文件系统驱动程序管理的卷,并将I/O直接从卷映射到组成卷的底层分区。 对简单卷来说,通过把卷的偏移量加上卷在磁盘中的起始地址,卷管理器可以保证卷的偏移量被转换成盘的偏移量。 对于多分区卷这就复杂多了,因为组成卷的分区可以是不邻接的分区,甚至可以在不同的磁盘中。有一些多分区卷使用数据冗余技术,所以它们需要更多的卷到磁盘的转换工作。,Windows的外存驱动程序,62,多重分区管理,跨分区卷(spanned volume) 条带卷(st

31、riped volume) 镜像卷(mirrored volume) 廉价冗余磁盘阵列5卷(RAID-5 volume),63,一个单独的逻辑卷,最多由在一个或多个磁盘上的32个空闲分区组成。 跨分区卷可以用来把小的磁盘空闲区域,或者把两个或更多的小磁盘组成大的卷。 卷管理器对Windows 2000/XP的文件系统隐藏了磁盘物理配置信息。,跨分区卷,多重分区管理,64,条带卷( RAID-0卷),多重分区管理,一系列分区组成的单独的逻辑卷,最多有32个分区并且每个盘一个分区。 条带卷中的一个分区不需要占据整个磁盘,唯一的限制是每个盘上的分区大小相同 数据能够被平均分配到每个磁盘上,65,镜像

32、卷(RAID-1卷),多重分区管理,一个磁盘上分区的内容被复制另一个磁盘与它等大小的分区中。镜像卷有时也被称为RAID-1。 镜像卷能够可以在主分区和镜像分区之间平衡I/O操作。两个读操作可以同时进行,所以理论上只用一半时间就可以完成。当修改一个文件时,必须写入镜像卷的两个分区,但是磁盘写操作可以异步进行,所以用户态程序的性能一般不会被这种额外的磁盘更新所影响。,66,RAID-5卷,多重分区管理,普通条带卷的容错变形,也称为带奇偶校验的条带卷,67,卷安装,安装管理器 安装点 卷安装,68,安装管理器,安装管理器(Mountmgr.sys)是Windows 2000/XP中新的驱动程序,为在Window 2000/XP安装后创建的动态磁盘卷和基本磁盘卷分配驱动器名。 卷管理器创建卷时都将通知它。当接到通知时,确定新的卷GUID或者磁盘标记; 安装管理器使用卷GUID(或者标识)在内部数据库中进行查询 安装管理者使用第一个未分配的驱动器名,为这次分配创建一个符号链接(例如,?D:),卷安装,69,安装点,安装点是Windows 2000/XP的新机制,利用安装点可以将其他卷链接到NTFS卷上的目录,从而可以访问没有驱动器名称的卷。 C:Project CurrentProjectDescription.txt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论