缓冲池(BufferPool)缓冲池是对磁盘的一层封装,主要目的是缓解内存速度差异对性能的影响。缓存池管理器在内存中维护一个缓存池,它拦截的到磁盘的API是:fetchPage(pageId:Int):Page获取pageId指定的页面,从内存或磁盘中读取。newPage():Page创建一个新的页面供客户写入新数据,注意在磁盘上分配空闲空间。deletePage(pageId):Boolean删除一页,注意清理磁盘空闲空间。为了给客户更多的控制权,额外提供了这两个API:flushPage(pageId:Int):Boolean显式请求将内存中的页面写回磁盘不会再次需要该页,便于缓存池管理器调度内存为空;传入isDirty标志,表示调用是否修改了页面的数据。具体实现上,bufferpoolmanager维护了一个哈希表和一个Pages列表。页面记录元数据并保留对实际数据的引用。这个哈希表主要负责将pageId映射到Page列表的索引。Page列表的大小是有限的,所以需要维护一个空闲列表来管理其中的空闲空间。
