第2930讲windows高速缓存_第1页
第2930讲windows高速缓存_第2页
第2930讲windows高速缓存_第3页
第2930讲windows高速缓存_第4页
第2930讲windows高速缓存_第5页
已阅读5页,还剩28页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

中科研CASoft软件工程师培训讲义Game

Master游戏修改工具第29~30讲Windows高速缓存中科天地软件人才培训中心Created

by本讲重点提要目录¤

高速缓存概述¤

高速缓存结构¤

高速缓存大小¤

高速缓存的数据结构¤

高速缓存操作¤

总结高速缓存概述¤Windows高速缓存管理器是一组核心态函数和系统线程,它与内存管理器合作为所有Windows文件系统驱动程序(本地的和网络的)提供数据高速缓存。¤

Windows高速缓存管理器具有以下几个特性:支持所有文件系统类型(本地的和网络的),从而免除了每个文件系统实现各自的高速缓存管理代码的需要。使用内存管理器控制哪些文件的哪些部分在物理内存中(在用户进程和操作系统之间权衡对物理内存的需求)。支持不涉及文件系统驱动程序的快速“I/O”(fastI/O)。支持可恢复的文件系统在系统崩溃后恢复数据。高速缓存概述¤

单个、集中的系统高速缓存一些操作系统依赖于各个独立的文件系统来高速缓存数据,这在实践中会导致在操作系统中重复高速缓存和内存管理代码,或者限制可以被高速缓存的数据种类。相比之下,WindowsNT提供了一种集中的高速缓存所有在外部存储的数据,而不管这些数据是在本地硬盘、软盘、网络文件服务器、还是在CD-ROM上。任何数据都可以被高速缓存,无论是用户数据流(文件的内容和对该文件进行的读写操作)还是文件系统的“元数据”(例如目录和文件头)。WindowsNT访问高速缓存的方法取决于被高速缓存的数据的类型。高速缓存概述¤

内存管理WindowsNT高速缓存管理器永远不知道物理内存中实际上有多少被高速缓存的数据,原因是因为高速缓存使用了标准的“区域对象”(section

objects,Win32中叫做文件映射对象),通过把文件的视口映射到系统虚拟地址空间来访问数据。通过使用映射文件,高速缓存管理器避免了生产读写I/O请求包来访问在正在高速缓存的文件的数据。而只是简单地从映射高速缓存文件部分的虚拟地址读取或写入数据。高速缓存概述¤

虚拟块高速缓存Window

NT采用一种称为“虚拟块高速缓

存”(virtual

block

caching)的方法高速缓存

数据。通过把256KB的文件视口映射到系统虚

拟地址空间,高速缓存可以监视这些文件部分。这一方法的优点如下:它为智能预读提供了可能:因为高速缓存跟踪哪些文件的哪些部分在高速缓存中,因而可以预测调用者将在哪里做下一步操作。对于已经在高速缓存中的数据的请求,它允许IO系统绕过文件系统实现快速IO。高速缓存概述¤

基于流的高速缓存相对于文件高速缓存,WindowsNT的高速缓存管理器也被设计用来做“流高速缓存”(streamcaching)。流是文件中的字节序列。有些文件系统,例如NTFS,允许一个文件包含多个流。高速缓存管理器通过缓存每一个独立的流来适应这些文件系统。事实上,WindowsNT高速缓存文件就是高速缓存流(所有的文件都至少有一个数据流),流是通过文件名和流名称来识别的。注:关于文件数据流的概念适用于对于结构化存储的文件如

Word文件。典型的例证就是比如对于一个txt文件,不会进行

Fast

I/O,而对于Word文件,会进行Fast

I/O。高速缓存概述¤

可恢复文件系统支持可恢复文件系统,例如NTFS,当系统失败后会修复磁盘卷结构。这一功能意味着,在系统失败时正在进行中的IO操作必须全部完成,或者在系统重新启动时从磁盘中全部恢复。完成一半的IO操作会损坏磁盘卷,甚至导致整个卷不可访问。为了避免这种问题,可恢复文件系统会维护一个日志文件,该日志文件将在更改写入卷之前,记录对文件系统结构(文件系统的元数据)将要做的每一个更新。如果因系统失败而中断了正在进行中的卷修改,可恢复文件系统就可以使用保存在日志文件中的信息重新执行卷的更新。高速缓存概述¤要保证成功地恢复卷,每个为卷更新提供文件性证据的日志文件记录必须在卷更新之前被完全记录到磁盘上。因为磁盘写操作可以被高速缓存,所以高速缓存管理器和文件系统必须共同工作以确保下述操作按顺序执行:文件系统写一个日志文件记录来为它将要进行的卷更新提供文件性保证。文件系统调用高速缓存管理器将日志文件记录刷新到磁盘上。文件系统将卷更新写入高速缓存,即修改高速缓存的元数据。高速缓存管理器将改变的元数据刷新到磁盘上,更新卷结构。高速缓存结构¤

高速缓存结构高速缓存的大小¤

高速缓存的虚拟大小系统高速缓存的大小取决于多种因素,包括内存的大小和Windows的不同版本。系统高速缓存的虚拟大小是物理内存大小的一个函数。在x86系统上默认的大小是64MB,如果系统有多于4032个页面的物理内存(x86系统为16MB,Alpha系统为32MB),高速缓存的大小被设置为每增加1024个页面(x86系统为4MB,Alpha系统为8MB)就增加64M,然后再加上128MB。比如,对于具有64M物理内存的x86系统,其系统高速缓的大小应该如下计算:128

+

(64

16)

/

4

*

64

=

896

MB高速缓存的大小¤

下图显示了系统高速缓的最小和最大的虚拟大

小,如果计算出的虚拟缓存大小超过了512MB,系统将分配额外的虚拟地址空间范围作为扩展

高速缓存(cache

extra

memory)。高速缓存的大小¤

高速缓存的物理大小正如前面提到过的那样,WindowsNT高速缓存管理器与其它操作系统在设计上的主要不同点之一是物理内存管理向全局内存管理器的授权。因此,处理工作集扩充和修整以及管理备用列表的现有代码也用于控制系统高速缓存的大小,并动态地平衡进程和操作系统之间对物理内存的需求。系统高速缓存没有自己的工作集,而是共享一个包括高速缓存、页交换区、可分页NTOSKRNL代码、可分页驱动程序代码的单一的系统集,被称为“系统高速缓存工作集”(system

cache

working

set)或为“系统工作集”。高速缓存的大小¤

实验:查看系统工作集大小按下Ctrl-Shift-Esc,打开Task

Manager(或者按下Ctrl-Shift-Del,再点击任务管理器打开),点击Performance标签,如下图所示,注意,正如我们所说的系统工作集包括了高速缓存、页交换区、可分页NTOSKRNL代码、和可分页驱动程序代码几个部分,因此TaskManager中显示的SystemCache的大小其实并非系统高速缓存的大小。高速缓存的大小高速缓存的数据结构¤

高速缓存管理器使用一下数据结构跟踪高速缓存文件:–VACB,virtual

address

control

bloc,虚拟地址控制块:系统高速缓存中的每个256KB槽都由一个虚拟地址控制块描述。–每一个打开的高速缓存文件都有一个专用的高速缓存映射结构,它包含了用于控制智能预读的信息。¤

每个被高速缓存的文件都有单一的共享高速缓存映射结构,该结构指向系统高速缓存中含有已映射文件的视口。高速缓存的数据结构¤

系统范围的高速缓存的数据结构高速缓存管理器使用VACB跟踪系统高速缓存中视口的状态。在系统初始化期间,高速缓存管理器分配一个单一的非页交换区的块来包含描述系统高速缓存所需的VACB。每个VACB都代表系统高速缓存中的一个256KB的视口,下图显示了VACB的结构:高速缓存的数据结构¤

VACB第一个字段是系统高速缓存中数据的虚拟地址。第二个子段是一个指向共享高速缓存映射结构的指针,用以标识哪一个文件被高速缓存了。高速缓存的数据结构¤

第三个字段标识了视口起始处在文件内部的偏移量(总是基于256KB的间隔尺寸)。最后,

VACB包含了视口的引用计数,即现有多少读写操作正在访问该视口。¤

在文件的I/O操作期间,文件的VACB引用计数被增加,操作结束时,引用计数减少。对于访问文件系统元数据的情况,活动计数表示在锁入内存中的视口中有多少文件系统驱动程序有页面。高速缓存的数据结构¤

每文件的高速缓存的数据结构每一个打开的文件句柄都有一个文件对象,如果文件被高速缓存,文件对象

就指向一个包含最后两次读取位置的

“私有高速缓存映射”结构,这样高速

缓存管理器就可以执行智能预读。此外,一个文件对象的所有私有高速缓存映射

都被连接在一起。高速缓存的数据结构¤

与文件对象不同,每一个被高速缓存的文件都有一个“共享高速缓存映射”结构,用来描述高速缓存文件的状态,包括其大小和有效数据长度。共享高速缓存映射也指向“区域对象指针”、该文件相关的私有高速缓存映射列表、以及在系统高速缓存中描述当前映射文件视口的任何VACB。高速缓存的数据结构¤

下图描述了每文件高速缓存数据结构之间的相互关系。高速缓存的数据结构¤

当请求从一个特定的文件中进行读取时,高速缓存管理器必须回答两个问题:文件是否在高速缓存中?如果在,哪个VACB涉及到了所请求的位置?换句话说,高速缓存管理器必须查明在所请求的地址上的文件视口是否被映射到了系统高速缓存。如果没有VACB包含所需文件的偏移量,被请求的数据在当前就没有被映射到系统高速缓存。高速缓存的数据结构¤

要跟踪用于给定文件的哪些视口被映射

到了系统高速缓存,高速缓存管理器维

护一个指向VACB的指针数组,称为

“VACB索引数组”(VACB

index

array)。VACB索引数组的第一项引用该文件开始的256KB,第二项引用该文件的第二个

256KB,以此类推。¤

下面的图显示了当前映射到系统高速缓存中的三个不同文件的四个不同区域。高速缓存的数据结构高速缓存的数据结构¤

当一个进程在给定位置访问一个指定文件时,高速缓存管理器察看文件的VACB索引数组的

相应项,跟踪被请求的数据是否已经映射到了高速缓存。如果该数组非零(因此它包含至少一个指向VACB的指针),就说明文件被引用

的区域在高速缓存中。VACB会依次在系统高

速缓存中指向文件视口被映射的位置。如果该项为零,高速缓存管理器就必须在系统高速缓存中寻找一个闲置的槽(也就是闲置的VACB)来映射所请求的视口。高速缓存的数据结构¤

作为对大小的优化,共享高速缓存映射包含一个有四项的VACB索引数组。因为每个VACB描述256KB,所以这个固定大小的数组最多可以描述1MB的文件。如果文件大于1MB,就从非分页区分配单独的VACB索引数组,根据文件大小再除以256KB,并在有余数的情况下进行取整加1,即为该索引数组的大小。然后,共享高速缓存映射就指向这个单独的结构了。高速缓存操作¤

回写高速缓存和延迟书写高速缓存操作¤

智能预读高速缓存操作¤

系统线程高速缓存操作¤

温馨提示

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

评论

0/150

提交评论