LOADING

缓存加载中...

cmu15445p1

2025/4/18

 

task1 lru-k

(不用管lru/clock的实现。)

TODO:

  1. Evict() -> std::optional<frame_id_t>逐出替换器跟踪的所有可逐出帧中具有最大向后 K 距离的帧。如果没有可逐出帧,则返回 std::nullopt。
    意思是:当某个数据访问次数达到K次后,将数据索引从历史队列移到缓存队列中(缓存队列时间降序);缓存数据队列中被访问后重新排序;需要淘汰数据时,淘汰缓存队列中排在末尾的数据。

  2. RecordAccess(frame_id_t frame_id):给定帧在当前时间戳被访问,则记录。该方法应在缓冲池管理器(BufferPoolManager)中固定(pin)页面后被调用。

  3. Remove(frame_id_t frame_id):清除与帧相关的所有访问历史。该方法仅在缓冲池管理器中删除页面时调用。

  4. SetEvictable(frame_id_t frame_id, bool set_evictable):该方法控制帧是否可逐出,同时也控制 LRUKReplacer 的大小。具体来说,当页面的固定计数(pin count)降为 0 时,其对应帧应被标记为可逐出。

  5. Size() -> size_t:返回当前替换器中可逐出帧的数量。