用java实现bustub|用java实现bustub (一)(关系型数据库的实现)

除了上一篇提到的基本要求之外,进一步地,为了保证有客户pin住的页面不被evict,还必须给每一个缓存池的slot维护一个atomic reference count。
为了让客户写入每一个Page的内容,我还额外提供

fun writePage( source: ByteArray, destinationOffset: Int, startIndex: Int, endIndex: Int )

此签名跟kotlin标准库的copyInto是一样的。
接下来,我编写了初步的单元测试来检查缓存池管理器的实现,简单的说主要有:
  • newPage调用:
    • 应该检查缓存池的容量限制
    • 应尝试evict unpinned页面来为新页面腾出空间
  • unpinPage调用:
    • 应该及时将脏页面写回磁盘
    • 返回值要正确反映是否pin操作和unpin操作数量上是否相同
  • fetchPage方法:
    • 把读取磁盘的操作分派给diskManager
【用java实现bustub|用java实现bustub (一)(关系型数据库的实现)】注意到本缓存池管理器并不显式提供pinPage的操作,而是隐含在每一次fetchPage调用中。

    推荐阅读