除了上一篇文章提到的基本要求外,更进一步,为了保证客户pin住的页面不被逐出,每个缓存池必须该插槽维护一个原子引用计数。为了让客户可以写每个Page的内容,我额外提供了funwritePage(source:ByteArray,destinationOffset:Int,startIndex:Int,endIndex:Int)这个签名和kotlin标准库的copyInto是一样的。接下来,我编写了一个初步的单元测试来检查缓冲池管理器的实现。简而言之,主要包括:newPage调用:应检查缓冲池的容量限制应尝试驱逐未固定的页面,为新页面腾出空间unpinPage调用:应及时将脏页写回磁盘。返回值应正确反映pin操作数和unpin操作数是否相同,但隐含在每个fetchPage调用中。
