知识点:浮点数,整数,逻辑运算,信息存储,补码
CSAPP的第一个lab, 难度不大,代码如下。
The assignments and my scores for them are:
项目介绍: http://www.cs.nthu.edu.tw/~ychung/syllabus/CSC3150-2022-Fall.htm
您的B+树索引需要支持删除。如果删除导致某些页面低于占用阈值,您的B+树索引应该正确地执行合并或重新分发。同样,你的B+树索引只能支持唯一键,你应该遵循TASK #2.A中的相同指导方针。
FindLeafPageByOperation
函数找到待删除的节点(已上写锁)。CoalesceOrRedistribute
函数,进行合并或重分配(或不做处理)。实现b_plus_tree.cpp/InsertIntoLeaf函数所涉及到的相关函数。
您的B +树索引只能支持唯一键。 也就是说,当您尝试将具有重复键的键值对插入索引时,它应该返回false
对于checkpoint1,仅需要B + Tree索引支持插入(Insert
)和点搜索(GetValue
)。 您不需要实现删除操作。 插入后如果当前键/值对的数量等于max_size
,则应该正确执行分割。 由于任何写操作都可能导致B + Tree索引中的root_page_id
发生更改,因此您有责任更新(src / include / storage / page / header_page.h)中的root_page_id
,以确保索引在磁盘上具有持久性 。 在BPlusTree
类中,我们已经为您实现了一个名为UpdateRootPageId
的函数。 您需要做的就是在B + Tree索引的root_page_id
更改时调用此函数。
您的B + Tree实现必须隐藏key/value等的详细信息,建议使用如下结构:
这个任务要求我们实现在课堂上所描述的LRU算法。
你需要实现下面这些函数。请确保他们都是线程安全的。
Victim(T*)
: Remove the object that was accessed the least recently compared to all the elements being tracked by the Replacer, store its contents in the output parameter and return True. If the Replacer is empty return False.
Pin(T)
:This method should be called after a page is pinned to a frame in the BufferPoolManager. It should remove the frame containing the pinned page from the LRUReplacer.
Unpin(T)
: This method should be called when the pin_count of a page becomes 0. This method should add the frame containing the unpinned page to the LRUReplacer.
Size()
: This method returns the number of frames that are currently in the LRUReplacer.