[note]Windows缓存管理机制分析(一)

  1.Windows的缓存管理器概述

1.1 缓存管理器介于内存管理器(VMM)和文件系统驱动程序(FS)之间,它包含一组以"Cc"打头的内核模式函数,全局变量,以及一些系统线程.

1.2 缓存管理器(CM)以虚拟块(Virtual Block)为基础来缓存数据,

    这使得可以在不涉及文件系统驱动程序的情况下进行智能预读((Read_Ahead)和延迟(Lazy_Write)

1.3 Windows缓存管理器使用一种称为虚拟块缓存(virtual Block caching)的方法,它跟踪,记录了哪些文件的哪些部分位于缓存中.

1.4 在intel x86系统中,系统默认的缓存大小为512MB,地址范围是0xc1000000--0xe100000

 

  2.缓存管理器during read and write operation

2.1 读的操作.

大致的过程如下,从I/O管理器发出一个read的IRP开始,然后是到文件系统驱动程序,然后是缓存管理器,再然后是虚拟内存管理器.

中间需要进行两个判断,1.缓存管理器是否将文件缓存到系统缓存中? 2,是否产生页错误?

2.2 写操作和读操作类似,见下图.

 

  3.Cache Manager Interface

 

3.1 文件流(File Stream) 操作函数(

使文件映射到系统缓存中.

@ CcInitializeCacheMap()

@ CcSetFileSize()

@ CcFlushCache()

@ CcZeroData()

@ CcGetFileObjectFromSectionPtrs()

@ ......

 

3.2 文件系统接口

一旦一个文件已经被建立起缓存方式的访问环境,文件系统驱动程序就调用几个函数中的某一个来访问文件中的数据.

要访问被缓存的数据,可以通过下面三种主要的方法:

 

Copy Interface:在系统空间的缓存缓冲区和用户空间的进程缓存缓冲区之间进行用户数据Copy;

@ CcCopyRead() / CcFastCopyRead()

@ CcCopyWrite() / CcFastCopyWrite()

 

MDL Interface:通过DMA(直接内存访问),可以直接读写系统缓存的页面,而无需缓冲区的介入.为了描述对这些物理内存的引用,需要用到MDL.(内存描述符)

@ CcMdlRead()

@ CcMdlReadComplete()

@ CcMdlWrite()

@ CcMdlWriteComplete()

 

Pinning Interface:映射(mapping)和锁定(Pinning)的方法,使用虚拟地址来直接读写数据到缓存缓冲区中.

@ CcMapData()

@ CcPinMappedData()

@ CcPinRead()

@ CcSetDirtyPinnedData()

@ CcUnpinData()

@ ......

转载于:https://www.cnblogs.com/Tbit/archive/2010/09/20/1831758.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值