缓存管理
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;