MiniOB 1
MiniOB is one mini database, helping developers to learn how database works.
载入中...
搜索中...
未找到
Public 成员函数 | Protected 成员函数 | Private 属性 | 友元 | 所有成员列表
DiskBufferPool类 参考

BufferPool的实现 更多...

#include <disk_buffer_pool.h>

Public 成员函数

 DiskBufferPool (BufferPoolManager &bp_manager, BPFrameManager &frame_manager)
 
RC create_file (const char *file_name)
 
RC open_file (const char *file_name)
 
RC close_file ()
 
RC get_this_page (PageNum page_num, Frame **frame)
 
RC allocate_page (Frame **frame)
 
RC dispose_page (PageNum page_num)
 释放某个页面,将此页面设置为未分配状态 更多...
 
RC purge_page (PageNum page_num)
 释放指定文件关联的页的内存 如果已经脏, 则刷到磁盘,除了pinned page
 
RC purge_all_pages ()
 
RC unpin_page (Frame *frame)
 用于解除pageHandle对应页面的驻留缓冲区限制 更多...
 
RC check_all_pages_unpinned ()
 
int file_desc () const
 
RC flush_page (Frame &frame)
 
RC flush_all_pages ()
 
RC recover_page (PageNum page_num)
 

Protected 成员函数

RC allocate_frame (PageNum page_num, Frame **buf)
 
RC purge_frame (PageNum page_num, Frame *used_frame)
 
RC check_page_num (PageNum page_num)
 
RC load_page (PageNum page_num, Frame *frame)
 
RC flush_page_internal (Frame &frame)
 

Private 属性

BufferPoolManagerbp_manager_
 
BPFrameManagerframe_manager_
 
std::string file_name_
 
int file_desc_ = -1
 
Framehdr_frame_ = nullptr
 
BPFileHeaderfile_header_ = nullptr
 
std::set< PageNum > disposed_pages_
 
common::Mutex lock_
 

友元

class BufferPoolIterator
 

详细描述

BufferPool的实现

成员函数说明

◆ allocate_page()

RC DiskBufferPool::allocate_page ( Frame **  frame)

在指定文件中分配一个新的页面,并将其放入缓冲区,返回页面句柄指针。 分配页面时,如果文件中有空闲页,就直接分配一个空闲页; 如果文件中没有空闲页,则扩展文件规模来增加新的空闲页。

◆ check_all_pages_unpinned()

RC DiskBufferPool::check_all_pages_unpinned ( )

检查是否所有页面都是pin count == 0状态(除了第1个页面) 调试使用

◆ close_file()

RC DiskBufferPool::close_file ( )

关闭分页文件

◆ create_file()

RC DiskBufferPool::create_file ( const char *  file_name)

创建一个名称为指定文件名的分页文件

◆ dispose_page()

RC DiskBufferPool::dispose_page ( PageNum  page_num)

释放某个页面,将此页面设置为未分配状态

参数
page_num待释放的页面

◆ flush_all_pages()

RC DiskBufferPool::flush_all_pages ( )

刷新所有页面到磁盘,即使pin count不是0

◆ flush_page()

RC DiskBufferPool::flush_page ( Frame frame)

如果页面是脏的,就将数据刷新到磁盘

◆ flush_page_internal()

RC DiskBufferPool::flush_page_internal ( Frame frame)
protected

如果页面是脏的,就将数据刷新到磁盘

◆ get_this_page()

RC DiskBufferPool::get_this_page ( PageNum  page_num,
Frame **  frame 
)

根据文件ID和页号获取指定页面到缓冲区,返回页面句柄指针。

◆ load_page()

RC DiskBufferPool::load_page ( PageNum  page_num,
Frame frame 
)
protected

加载指定页面的数据到内存中

◆ open_file()

RC DiskBufferPool::open_file ( const char *  file_name)

根据文件名打开一个分页文件

◆ purge_frame()

RC DiskBufferPool::purge_frame ( PageNum  page_num,
Frame used_frame 
)
protected

刷新指定页面到磁盘(flush),并且释放关联的Frame

◆ recover_page()

RC DiskBufferPool::recover_page ( PageNum  page_num)

回放日志时处理page0中已被认定为不存在的page

◆ unpin_page()

RC DiskBufferPool::unpin_page ( Frame frame)

用于解除pageHandle对应页面的驻留缓冲区限制

在调用GetThisPage或AllocatePage函数将一个页面读入缓冲区后, 该页面被设置为驻留缓冲区状态,以防止其在处理过程中被置换出去, 因此在该页面使用完之后应调用此函数解除该限制,使得该页面此后可以正常地被淘汰出缓冲区


该类的文档由以下文件生成: