Pager部分与PCache部分紧密相连,虽然我本次分到的代码并未包含PCache,但是还是简单介绍一下。
SQLite将页内存分配系统实现为两层:
1、PCache结构为页内存分配系统的上层接口结构,与具体的实现无关。
2、用户定义缓冲区模块,PCache1结构为页内存分配系统的默认实现,直接对页空间的分配与回收,上层使用者无需关心其内部实现。
Pcache.c这个文件实现的是页面缓存。
一个完整的页面缓存是这种结构的一个实例。
struct PCache { PgHdr pDirty, pDirtyTail; / 按LRU顺序的脏数据页列表 / PgHdr pSynced; / 在脏数据列表中最后同步的页/ int nRef; / 引用页的数量 / int szCache; / 配置的缓存的大小 / int szPage; / 缓存中每个页的大小 / int szExtra; / 每个页面的额外空间大小 / int bPurgeable; / 如果页面是在后备存储器则为真 / int (xStress)(void,PgHdr); / Call to try make a page clean / void pStress; / xStress的参数 / sqlite3_pcache pCache; / Pluggable cache module / PgHdr pPage1; / 指向第一页的指针 / };涉及到关于Cache的函数: