25#include <unordered_map>
29#include "common/types.h"
30#include "common/lang/mutex.h"
31#include "common/mm/mem_pool.h"
32#include "common/lang/lru_cache.h"
33#include "common/lang/lruk_cache.h"
34#include "common/lang/bitmap.h"
35#include "storage/buffer/page.h"
36#include "storage/buffer/frame.h"
46#define BP_FILE_SUB_HDR_SIZE (sizeof(BPFileSubHeader))
70 std::string to_string()
const;
86 RC init(
int pool_num);
96 Frame *
get(
int file_desc, PageNum page_num);
104 std::list<Frame *>
find_list(
int file_desc);
113 Frame *
alloc(
int file_desc, PageNum page_num);
119 RC
free(
int file_desc, PageNum page_num,
Frame *frame);
130 size_t frame_num()
const
132 return frames_.count();
140 return allocator_.get_size();
145 RC free_internal(
const FrameId &frame_id,
Frame *frame);
150 size_t operator()(
const FrameId &frame_id)
const
152 return frame_id.hash();
156 using FrameLruCache = common::LruCache<FrameId, Frame *, BPFrameIdHasher>;
157 using FrameAllocator = common::MemPoolSimple<Frame>;
160 FrameLruCache frames_;
161 FrameAllocator allocator_;
184 common::Bitmap bitmap_;
185 PageNum current_page_num_ = -1;
237 RC purge_all_pages();
254 int file_desc()
const;
272 RC allocate_frame(PageNum page_num,
Frame **buf);
278 RC check_page_num(PageNum page_num);
294 std::string file_name_;
296 Frame * hdr_frame_ =
nullptr;
298 std::set<PageNum> disposed_pages_;
317 RC close_file(
const char *file_name);
319 RC flush_page(
Frame &frame);
329 std::unordered_map<std::string, DiskBufferPool *> buffer_pools_;
330 std::unordered_map<int, DiskBufferPool *> fd_buffer_pools_;
Definition: disk_buffer_pool.h:148
管理页面Frame
Definition: disk_buffer_pool.h:82
size_t total_frame_num() const
Definition: disk_buffer_pool.h:138
int purge_frames(int count, std::function< RC(Frame *frame)> purger)
Definition: disk_buffer_pool.cpp:62
RC free(int file_desc, PageNum page_num, Frame *frame)
Definition: disk_buffer_pool.cpp:142
Frame * alloc(int file_desc, PageNum page_num)
分配一个新的页面
Definition: disk_buffer_pool.cpp:121
std::list< Frame * > find_list(int file_desc)
列出所有指定文件的页面
Definition: disk_buffer_pool.cpp:164
Frame * get(int file_desc, PageNum page_num)
获取指定的页面
Definition: disk_buffer_pool.cpp:104
用于遍历BufferPool中的所有页面
Definition: disk_buffer_pool.h:173
BufferPool的管理类
Definition: disk_buffer_pool.h:310
RC create_file(const char *file_name)
Definition: disk_buffer_pool.cpp:636
BufferPool的实现
Definition: disk_buffer_pool.h:193
RC purge_frame(PageNum page_num, Frame *used_frame)
Definition: disk_buffer_pool.cpp:424
RC load_page(PageNum page_num, Frame *frame)
Definition: disk_buffer_pool.cpp:591
RC check_all_pages_unpinned()
Definition: disk_buffer_pool.cpp:469
RC close_file()
Definition: disk_buffer_pool.cpp:266
RC flush_page_internal(Frame &frame)
Definition: disk_buffer_pool.cpp:494
RC get_this_page(PageNum page_num, Frame **frame)
Definition: disk_buffer_pool.cpp:295
RC open_file(const char *file_name)
Definition: disk_buffer_pool.cpp:227
RC purge_page(PageNum page_num)
释放指定文件关联的页的内存 如果已经脏, 则刷到磁盘,除了pinned page
Definition: disk_buffer_pool.cpp:445
RC unpin_page(Frame *frame)
用于解除pageHandle对应页面的驻留缓冲区限制
Definition: disk_buffer_pool.cpp:418
RC flush_page(Frame &frame)
Definition: disk_buffer_pool.cpp:488
RC flush_all_pages()
Definition: disk_buffer_pool.cpp:516
RC allocate_page(Frame **frame)
Definition: disk_buffer_pool.cpp:331
RC create_file(const char *file_name)
RC recover_page(PageNum page_num)
Definition: disk_buffer_pool.cpp:529
RC dispose_page(PageNum page_num)
释放某个页面,将此页面设置为未分配状态
Definition: disk_buffer_pool.cpp:399
页帧标识符
Definition: frame.h:34