缓存管理

本文详细介绍了Windows操作系统中的缓存管理机制,包括关键结构如虚拟地址控制块(VACB)、私有缓存映射、共享缓存映射以及缓冲控制块(BCB)。缓存管理涉及文件数据的内存管理,由CcInitializeCacheMap初始化,通过CcGetVirtualAddress、CcCopyRead和CcCopyWrite等函数进行读写操作。预读和延迟写策略提高了系统性能,由缓存管理器异步执行。此外,还讨论了缓存管理器如何处理不同文件流的独立缓存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

缓存管理
ROS在内存管理和缓存管理方面都是虚有其表——只有接口是一样的,里面的实现与windows大相径庭,以下资料来源于wrk,internals。
缓存管理是对于文件数据在内存中的特殊管理,基于内存管理,向文件系统提供服务。而在内存管理器将缓存页面真正写入磁盘时,又调用文件系统的接口然后走磁盘设备驱动。

★.重要结构
1.Virtual Address Control Block 虚拟地址控制块(核心) 结构不大~
描述了系统缓存的一个槽,系统缓存以256k为一个槽(也成为一个view),当进行读写操作时,数据才是活动的(Active),当不活动之后映射不会消失,除非缓存槽已经用尽,他们将被撤除。
CcVacbs是一个数组,记录了每个VACB的地址
typedef struct _VACB {
PVOID BaseAddress;
struct _SHARED_CACHE_MAP *SharedCacheMap;        被映射到一个文件时,它指向文件的共享缓存表
union {
LARGE_INTEGER FileOffset;                            这份视图在文件中的偏移
USHORT ActiveCount;                                引用计数
} Overlay;                                                
LIST_ENTRY LruList;                                    管理列表,空闲或者可重用的视图链表(CcVacbFreeList,CcVacbLru)
} VACB, *PVACB;       

2. PRIVATE_CACHE_MAP 存储于FILE_OBJECT之中的私有缓存表 属于文件对象
typedef struct _PRIVATE_CACHE_MAP {
union {
CSHORT NodeTypeCode;
PRIVATE_CACHE_MAP_FLAGS Flags;
ULONG UlongFlags;
};
ULONG ReadAheadMask;
PFILE_OBJECT FileObject;
LARGE_INTEGER FileOffset1;  //包含最近两次读的位置
LARGE_INTEGER BeyondLastByte1;
LARGE_INTEGER FileOffset2;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值