王雷北京航空航天大学计算机系.ppt

上传人:本田雅阁 文档编号:3215428 上传时间:2019-08-01 格式:PPT 页数:96 大小:437.01KB
返回 下载 相关 举报
王雷北京航空航天大学计算机系.ppt_第1页
第1页 / 共96页
王雷北京航空航天大学计算机系.ppt_第2页
第2页 / 共96页
王雷北京航空航天大学计算机系.ppt_第3页
第3页 / 共96页
王雷北京航空航天大学计算机系.ppt_第4页
第4页 / 共96页
王雷北京航空航天大学计算机系.ppt_第5页
第5页 / 共96页
点击查看更多>>
资源描述

《王雷北京航空航天大学计算机系.ppt》由会员分享,可在线阅读,更多相关《王雷北京航空航天大学计算机系.ppt(96页珍藏版)》请在三一文库上搜索。

1、1,存储管理,王 雷 北京航空航天大学计算机系,2,内容,Windows 2000/XP内存管理 Windows 2000/XP外存管理 Windows 2000/XP高速缓存管理,3,工具, Nt Nt资源包 Platform SDK NT DDK,4,调试工具,CDB.exe i386kd.exe windbg.exe softice(),5,6,配置,配置宿主机调试环境 双机串口通讯连接 目标机的WINDOWS启动时加上/debug参数 安装与目标机系统相匹配的Symbol文件,7,kd !processfields,Pcb: 0x0 ExitStatus: 0x68 LockEvent

2、: 0x6c LockCount: 0x7c CreateTime: 0x80 ExitTime: 0x88 LockOwner: 0x90 UniqueProcessId: 0x94 ActiveProcessLinks: 0x98 QuotaPeakPoolUsage0: 0xa0 QuotaPoolUsage0: 0xa8 PagefileUsage: 0xb0 CommitCharge: 0xb4 PeakPagefileUsage: 0xb8 PeakVirtualSize: 0xbc VirtualSize: 0xc0 Vm: 0xc8,8,LastProtoPteFault: 0

3、xf8 DebugPort: 0xfc ExceptionPort: 0x100 ObjectTable: 0x104 Token: 0x108 WorkingSetLock: 0x10c WorkingSetPage: 0x12c ProcessOutswapEnabled: 0x130 ProcessOutswapped: 0x131 AddressSpaceInitialized: 0x132 AddressSpaceDeleted: 0x133 AddressCreationLock: 0x134 ForkInProgress: 0x158 VmOperation: 0x15c VmO

4、perationEvent: 0x160 PageDirectoryPte: 0x164 LastFaultCount: 0x168 VadRoot: 0x170 VadHint: 0x174 CloneRoot: 0x178 NumberOfPrivatePages: 0x17c NumberOfLockedPages: 0x180 ForkWasSuccessful: 0x15e ExitProcessCalled: 0x186 CreateProcessReported: 0x187,SectionHandle: 0x188 Peb: 0x18c SectionBaseAddress:

5、0x190 QuotaBlock: 0x194 LastThreadExitStatus: 0x198 WorkingSetWatch: 0x19c InheritedFromUniqueProcessId: 0x1a4 GrantedAccess: 0x1a8,9,kd !process 0,PROCESS 80147120 Cid: 0000 Peb: 00000000 ParentCid: 0000 DirBase: 00030000 ObjectTable: 80731e88 TableSize: 254. Image: Idle VadRoot 0 Clone 0 Private 0

6、. Modified 0. Locked 0. 801472DC MutantState Locked OwningThread 0 Process Lock Owned by Thread 0 Token e1000750 ElapsedTime 7:41:18.0524 UserTime 0:00:00.0000 KernelTime 9:34:32.0780 QuotaPoolUsagePagedPool 0 QuotaPoolUsageNonPagedPool 0 Working Set Sizes (now,min,max) (4, 50, 450) (16KB, 200KB, 18

7、00KB) PeakWorkingSetSize 4 VirtualSize 0 Mb PeakVirtualSize 0 Mb PageFaultCount 1 MemoryPriority BACKGROUND BasePriority 0 CommitCharge 0 THREAD 80147320 Cid 0.0 Teb: 00000000 Win32Thread: 00000000 RUNNING,10,内存管理,组成部分 地址空间的布局 地址转换机制 内存分配方式 缺页处理 工作集 物理内存管理 其他内存相关机制,11,组成部分,一组执行体系统服务程序,用于虚拟内存的分配、回收和管

8、理。大多数这些服务都是通过Win32 API 或内核态的设备驱动程序接口形式出现。 一个转换无效和访问错误陷阱处理程序用于解决硬件监测到的内存管理异常,并代表进程将虚拟页面装入内存。 六个的关键组件,12,工作集管理器(16优先):当空闲内存低于某一界限时,便启动所有的内存管理策略,如:工作集的修整、老化和已修改页面的写入等。 进程/堆栈交换程序(23优先):完成进程和内核线程堆栈的换入和换出操作。 已修改页面写入器(17优先):将修改链表上的“脏”页写回到适当的页文件。,13,映射页面写入器(17优先):将映射文件中脏页写回磁盘。 废弃段线程(18优先):负责系统高速缓存和页面文件的扩大和缩

9、小。 零页线程(0优先):将空闲链表中的页面清零。,14,内存布局,15,16,系统代码 包括操作系统映像、HAL和用于引导系统的设备驱动程序。 系统映射视图 用来映射Win32子系统可加载的核心态部分Win32k.sys,以及它使用的核心态图形驱动程序。 会话空间 用来映射一个用户的会话信息。 进程页表和页目录 描述虚拟地址映射的结构。 超空间 一个特殊的区域用来映射进程工作集链表,并为创建临时映射物理页面。,17,系统工作集链表 描述系统工作集的工作集链表数据结构。 系统高速缓存 用来映射在系统高速缓存中打开的文件的虚拟空间。 分页缓冲池 可分页系统内存堆。 系统页表项 系统PTE缓冲池,

10、用来映射系统页面。 非分页缓冲池 不可分页的系统内存堆。,18,地址变换过程,19,进程,20,快表TLB,21,内存分配方式,以页单位的虚拟内存函数(Virtualxxx), 保留与提交 内存映射文件函数(CreateFileMapping, MapViewOfFile), 堆函数(Heapxxx 和早期的接口Localxxx 和Globalxxx)。,22,虚拟地址描述符,23,内存映射文件,加载和执行.exe和dll文件,这可以节省应用程序启动所需的时间; 访问磁盘上的数据文件,这可以减少文件I/O,并且不必对文件进行缓存; 实现多个进程间的数据共享。,24,区域对象(section o

11、bject),25,26,建立过程,打开文件,区域对象可以连接到已打开的磁盘文件(映射文件),或是已提交的内存(提供共享内存)。 可以调用Win32函数CreateFileMapping创建区域对象,其参数包括映射到区域对象的文件句柄(或是INVALID_HANDLE_VALUE表示页文件支持区域)。如果区域有名字,其它进程可以用OpenFileMapping打开它。 设备驱动程序也可以使用ZwOpenSection, ZwMapViewOfSection, 和ZwUnmapViewOfSection函数操纵区域对象。 MapViewOfFile函数映射区域对象的一部分,并指定映射范围。,27

12、,堆函数,缺省进程堆,通常是1MB大小 HeapCreate函数创建另外的私有堆,HeapDestroy删除。 串行化选项。,28,系统内存分配,非分页缓冲池 由系统虚拟地址组成,它们长期驻留在物理内存中,在任何时候都可以被访问到(从任何IRQL级和任何进程上下文),而不会发生页错误。需要未分页缓冲池的一个原因是:页错误不能满足在DPC/调度级或更高。 分页缓冲池 是系统可以被分页和分出系统的空间中虚拟内存的一个区域。不必从DPC/调度级或更高一级访问内存的设备驱动程序可以使用分页缓冲池。它从任何进程上下文都是可访问的。,29,系统有两种非分页缓冲池:一种在一般情况下使用,另一种小型的(4页)

13、缓冲池在非分页缓冲池已满并且调用者不能允许分配失败时,紧急使用。 单处理机系统有三个分页缓冲池;多处理机系统有五个。 后备链表(Look-Aside Lists)。 Ex,30,缺页处理,无效的页表项 页文件 请求零页 转换 未知 原型页表项,31,32,页面调入I/O,向文件(页或映射文件)发出读操作来解决缺页问题 同步的,33,问题,同一进程中的另一线程,或一个其它的进程,都可能由于一个相同的页面导致缺页错误。(称为“冲突页错误”,将在下节中介绍)。 页面可能已经从虚拟地址空间中被删除(并重新映射)。 页面的保护限制可能发生了变化。 错误可能是由一个原型页表项引发的,并且这个原型页表项所映

14、射的页面可能并不在工作集中。,34,冲突页错误(collided page fault),页面调度程序检测 等待操作 I/O操作完成后,所有等待该事件的线程都会被唤醒 第一个获得页框号数据库锁的线程负责执行页面调入完成操作。,35,页文件,最多16个页文件 以非压缩的形式被创建,36,工作集,进程工作集 系统工作集,37,系统工作集,系统高速缓存页面 分页缓冲池 Ntoskrnl.exe中可分页的代码和数据 设备驱动程序中可分页的代码和数据 系统映射视图(部分映射在0xA0000000处,如Win32k.sys),38,取页策略:内存管理器利用请求式页面调度算法以及簇方式将页面装入内存 置页策

15、略:选择页框应使CPU内存高速缓存不必要的震荡最小 换页策略 在多处理器系统中,Windows 2000/XP采用了局部先进先出置换策略。而在单处理器系统中,Windows 2000/XP的实现更接近于最近最少使用策略(LRU)(称为“轮转算法”,用于大多数版本的UNIX)。,39,物理内存管理,活动(又称有效) 过渡(Transition) 后备(stand by) 修改 修改不写入 空闲 零初始化(zeroed) 坏,40,41,物理内存管理,42,43,锁内存,设备驱动程序可以调用核心态函数MmProbeAndLockPages, MmLock PagableCodeSection, M

16、mLockPagableDataSection, 或者 MmLockPagableSection ByHandle。 Win32应用程序可以调用VirtualLock函数锁住进程工作集中的页面。,44,内存保护机制,所有系统范围内核心态组件使用的数据结构和内存缓冲池只能在核心态下访问。 每个进程有一个独立、私有的地址空间,禁止其它进程的线程访问。 支持的处理机还提供了一些硬件内存保护措施(如读/写,只读等)。 共享内存区域对象具有标准的Windows2000/XP存取控制表(ACLs),45,写时复制,46,物理地址扩展,47,地址窗口扩充,48,外存管理,Windows 2000/XP存储的

17、演变 分区(Partitioning) 驱动程序(Drivers) 多重分区管理(Multipartition Volume Management) 卷名字空间(The Volume Namespace),49,存储的演变,让MSDOS在一个物理盘上采用多个分区,也就是逻辑盘 Windows NT借鉴了MSDOS的分区机制,扩展了MSDOS分区的基本概念,支持企业级操作系统所需的一些存储管理的特征:跨磁盘管理(disk spanning)和容错(fault tolerance),50,早期磁盘管理的缺点,对大多数磁盘设置的改变需要重启操作系统才能生效 NT的注册表中为MSDOS方式的分区保存了

18、多分区磁盘的配置信息 每个卷有一个唯一的从A到Z的驱动器名,51,盘一种物理存储设备。 扇区可寻址的大小固定的块。 分区是盘上连续扇区的集合。 简单卷代表文件系统驱动程序作为一个独立单元管理来自一个分区的所有扇区。 多分区卷它代表文件系统驱动程序作为一个独立单元管理来自多个分区的所有扇区。多分区卷提供简单卷所不支持的性能、可靠性和大小等特性。,52,分区,基本分区 动态分区 逻辑磁盘管理子系统(LDM)负责,53,LDM,LDM的数据库存在于每个动态盘最后的1MB保留空间中。 LDM实现了一个MS DOS的分区表,这是为了继承一些在Windows2000/XP下运行的磁盘管理工具,或是在双引导

19、环境中让其它系统不至于认为动态盘还没有被分区。 由于LDM分区在磁盘的MS DOS分区表中并没有体现出来,所以被称为软分区,而MS DOS分区被称为硬分区。,54,55,56,数据库结构,私有头:GUID,磁盘组的名字(该名字是由Dg0和计算机的名字一起组成,例如SusanDg0,意味着计算机的名字是Susan)和一个指向数据库内容表的指针。为了保证可靠性,LDM在磁盘的最后一个扇区保存了私有头的拷贝。 数据库内容表有16个扇区大小,其中包含关于数据库布局的信息。 数据库记录区域紧接着内容表,并将内容表后第一个扇区作为数据库记录头。这个扇区中存储了数据库记录区的信息,包括其所包含的记录个数,数

20、据库相关的磁盘组的名字和GUID,以及LDM用于创建下一项的序列号。,57,数据库中的每一项可以是如下四种类型之一:分区,磁盘,组件,卷。LDM把每一项与内部对象的标识符联系到一起。在最低的级别,分区项描述软分区,它是在一个盘上的连续区域。存储在分区项中的标识符把这个项与一个组件和一个磁盘项联系起来。磁盘项代表一个磁盘组中的动态盘,包括磁盘的GUID。组件项像一条链子把一个或多个分区项和与分区相连的卷项联系起来。卷项存放这个卷的GUID,卷的大小和状态,驱动器的名字。比一个数据库记录大的磁盘项占用多个记录的空间,分区项、组件项和卷项很少占用多个记录的空间。,58,LDM需要三个项来描述一个简单

21、卷:分区项、组件项和卷项。分区项描述系统分配给某个卷的磁盘上的一个区域,组件项把一个分区项和一个卷项联系起来,卷项中包含Windows 2000/XP内部用来识别卷的GUID。多分区卷需要的项数多于三个。例如,一个条带卷包括最少两个分区项,一个组件项和一个卷项。唯一一种含有一个以上组件项的卷的类型是:镜像卷。镜像卷含有两个组件项,每个只表示这个镜像的一半。LDM为每个镜像卷使用两个组件项的目的是:当一个镜像破坏时LDM能够在组件一级将他们分割开来,并创建两个各含有一个组件项的卷。因为简单卷需要三个项,而1MB数据库空间大约可以容纳8000个项,所以在Windows 2000/XP中可以创建的卷

22、数目的有效上界大约是2500个。,59,LDM数据库的最后部分是事务处理日志区,它包含的几个扇区在数据库信息改变时用来存储备份信息。这样确保在系统崩溃或断电时,LDM能够利用日志把系统恢复到一个正确的状态。,60,驱动程序,系统卷中引导扇区中的代码负责执行Ntldr。 Ntldr从系统卷中读取Boot.ini文件,把计算机的引导选项显示给用户。Boot.ini指定分区名为 mult(0)disk(0)rdisk(0)partition(1)的形式。 Ntldr把Boot.ini中用户指定的项转换为正确的引导分区,然后将Windows 2000/XP系统文件(从注册表、Ntoskrnl.exe、

23、引导驱动程序开始)装入内存,继续引导过程。,61,Windows 2000/XP的存储驱动程序 类:实现所有存储设备共同的功能 端口:基于某种特定总线设备的共同功能,如SCSI、IDE 小端口:OEM提供,62,磁盘的类驱动程序使用I/O管理器的IoReadPartitionTable函数识别表示分区的设备对象 设备名 DeviceHarddisk0DP(1)0x7e000-0x7ff50c00+2,63,Windows 2000/XP保存了两个不同的名字空间子目录供Win32使用,其中之一是:?子目录(另一个是BaseNamedObjects 子目录)。 在?子目录中,Windows 200

24、0/XP创建了一些与Win32程序交互的硬件对象,包括串口和并口,还有磁盘。,64,由于磁盘对象实际上存在于其它的子目录中,所以Windows 2000/XP使用符号链接,把在?子目录下的名字与在名字空间其它地方的对象联系起来。I/O管理器为系统中的每一个物理盘都创建一个?PhysicalDriveX的链接,指向DeviceHarddiskXPartition0(从零开始的数字来替代X)。 那些直接访问磁盘扇区的WIN 32应用程序可以调用Win32函数CreateFile,通过指定.PhysicalDriveX(X是一个磁盘的号码)作为参数来打开磁盘。Win32 的应用层先把名字转化为?Ph

25、ysicalDriveX,然后在把名字提交给Windows2000/XP对象管理器。,65,管理工具,FtDisk和 DMIO负责识别文件系统驱动程序管理的卷,并将I/O直接从卷映射到组成卷的底层分区。 对简单卷来说,通过把卷的偏移量加上卷在磁盘中的起始地址,卷管理器可以保证卷的偏移量被转换成盘的偏移量。 对于多分区卷这就复杂多了,因为组成卷的分区可以是不邻接的分区,甚至可以在不同的磁盘中。有一些多分区卷使用数据冗余技术,所以它们需要更多的卷到磁盘的转换工作。,66,多重分区管理,跨分区卷(spanned volume) 条带卷(striped volume) 镜像卷(mirrored vol

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

27、也被称为RAID-1。 镜像卷能够可以在主分区和镜像分区之间平衡I/O操作。两个读操作可以同时进行,所以理论上只用一半时间就可以完成。当修改一个文件时,必须写入镜像卷的两个分区,但是磁盘写操作可以异步进行,所以用户态程序的性能一般不会被这种额外的磁盘更新所影响。 镜像卷是唯一一种支持系统卷和引导卷的多分区卷。,73,廉价冗余磁盘阵列5卷,74,卷名字空间,安装管理器 安装点 卷安装,75,安装管理器,安装管理器(Mountmgr.sys)是Windows 2000/XP中新驱动程序,为在Window 2000/XP安装后创建的动态磁盘卷和基本磁盘卷分配驱动器名。 卷管理器创建卷时都将通知它。当

28、接到通知时,确定新的卷GUID或者磁盘标记; 安装管理器使用卷GUID(或者标识)在内部数据库中进行查询 安装管理者使用第一个未分配的驱动器名,为这次分配创建一个符号链接(例如,?D:),76,安装点,实现安装点的技术是再解析点(Reparse Point)技术。 C:Project CurrentProjectDescription.txt C:ProjectsCurrentProjectDescription.txt,77,卷安装,每个文件系统驱动程序在初始化时都向I/O管理器注册 每个设备对象包含一个卷参数块VPB,但是I/O管理器认为只有卷设备对象的VPB是有意义的 安装请求,78,安

29、装管理器把D:分配给系统中的第二个卷 它产生符号连接?D:指向设备对象DeviceHarddiskVolume2。 一个WIN 32应用程序试图打开D:上的文件TempTest.txt时,它将会指定路径D: TempTest.txt。,79,WIN 32子系统在调用NtCreateFile之前将路径转化为?D: TempTest.txt。 I/O管理器将检查DeviceHarddiskVolume2的VPB是否引用一个文件系统。,80,高速缓存,单一集中式系统高速缓存 任何数据都能被高速缓存,无论它是用户数据流(文件内容和在这个文件上正在进行读和写的活动)或是文件系统的元数据(metadata

30、)(例如目录和文件头) 与内存管理器结合 因为它采用将文件视图映射到系统虚拟空间的方法访问数据 高速缓存的一致性,81,82,虚拟块缓存 Windows 2000/XP高速缓速管理器用一种虚拟块缓存方式,管理器对缓存中文件的某些部分进行追踪。通过内存管理器的特殊系统高速缓存例程将256-KB大小的文件视图映射到系统虚拟地址空间,高速缓存管理器能够管理文件的这些部分。这种方式有以下几个主要特点: 它使智能的文件预读成为可能。 它允许I/O系统绕开文件系统访问已经在缓存中的数据(快速I/O)。,83,基于流的缓存 可恢复的文件系统支持 文件系统写一个日志文件记录,记录将要进行的卷修改操作。 文件系

31、统调用高速缓存管理器将日志文件记录刷新到磁盘上。 文件系统把卷修改内容写入高速缓存,即修改文件系统在高速缓存的元数据。 高速缓存管理器将被更改的元数据刷新到磁盘上,更新卷结构。,84,85,86,高速缓存的大小,缓存区的虚拟大小 缓存的物理大小,87,高速缓存的数据结构,在系统高速缓存的每个256 KB的槽由一个VACB描述。 每个打开的被缓存文件有一个专用的缓存映射,它包含了用于控制文件预读的信息。 每个被缓存的文件有一个单独的共享缓存映射结构,它指向系统缓存中包含此文件映射视图的槽。,88,虚拟地址控制块(VACB),系统高速缓存中数据的虚拟地址 指向共享高速缓存映射的指针 文件偏移 活动

32、计数,89,90,91,92,高速缓存的操作,回写缓存和延迟写 写入文件的数据首先被存储在高速缓存页面的内存中,然后再被写入磁盘。因此,写操作允许在短时间内积累,并一次性刷新到磁盘,这可以减少磁盘的I/O次数。 屏蔽对文件延迟写 在调用Win32 CreateFile函数时指定FILE_ATTRIBUTE_TEMPORARY标志创建一个临时文件,延迟写器就不会将脏页写回磁盘,除非物理内存严重不足或文件关闭。 强制写缓存到磁盘 刷新被映射的文件,93,智能预读,虚拟地址预读 将被访问页面相近的几个页一起读到内存中。内存管理器的这种方法唯一缺点是:必须同步进行 带历史信息的异步预读 高速缓存管理器在文件的私有缓存映射结构中为正在被访问的文件句柄保存最后两次读请求的历史信息,94,快速I/O(fast I/O) 写阻塞,95,访问缓存数据的方法,“拷贝读取”方法在系统空间中的高速缓存数据缓冲区和用户空间中的进程数据缓冲区之间拷贝用户数据; “映射暂留”方法使用虚拟地址直接读写高速缓存的数据缓冲区。 “物理内存访问”方法使用物理地址直接读写高速缓存的数据缓冲区。,96,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1