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

管理页面Frame 更多...

#include <disk_buffer_pool.h>

class  BPFrameIdHasher
 

Public 成员函数

 BPFrameManager (const char *tag)
 
RC init (int pool_num)
 
RC cleanup ()
 
Frameget (int file_desc, PageNum page_num)
 获取指定的页面 更多...
 
std::list< Frame * > find_list (int file_desc)
 列出所有指定文件的页面 更多...
 
Framealloc (int file_desc, PageNum page_num)
 分配一个新的页面 更多...
 
RC free (int file_desc, PageNum page_num, Frame *frame)
 
int purge_frames (int count, std::function< RC(Frame *frame)> purger)
 
size_t frame_num () const
 
size_t total_frame_num () const
 

Private 类型

using FrameLruCache = common::LruCache< FrameId, Frame *, BPFrameIdHasher >
 
using FrameAllocator = common::MemPoolSimple< Frame >
 

Private 成员函数

Frameget_internal (const FrameId &frame_id)
 
RC free_internal (const FrameId &frame_id, Frame *frame)
 

Private 属性

std::mutex lock_
 
FrameLruCache frames_
 
FrameAllocator allocator_
 

详细描述

管理页面Frame

管理内存中的页帧。内存是有限的,内存中能够存放的页帧个数也是有限的。 当内存中的页帧不够用时,需要从内存中淘汰一些页帧,以便为新的页帧腾出空间。 这个管理器负责为所有的BufferPool提供页帧管理服务,也就是所有的BufferPool磁盘文件 在访问时都使用这个管理器映射到内存。

成员函数说明

◆ alloc()

Frame * BPFrameManager::alloc ( int  file_desc,
PageNum  page_num 
)

分配一个新的页面

参数
file_desc文件描述符
page_num页面编号
返回
Frame* 页帧指针

◆ find_list()

std::list< Frame * > BPFrameManager::find_list ( int  file_desc)

列出所有指定文件的页面

参数
file_desc文件描述符
返回
std::list<Frame *> 页帧列表

◆ free()

RC BPFrameManager::free ( int  file_desc,
PageNum  page_num,
Frame frame 
)

尽管frame中已经包含了file_desc和page_num,但是依然要求 传入,因为frame可能忘记初始化或者没有初始化

◆ get()

Frame * BPFrameManager::get ( int  file_desc,
PageNum  page_num 
)

获取指定的页面

参数
file_desc文件描述符,也可以当做buffer pool文件的标识
page_num页面号
返回
Frame* 页帧指针

◆ purge_frames()

int BPFrameManager::purge_frames ( int  count,
std::function< RC(Frame *frame)>  purger 
)

如果不能从空闲链表中分配新的页面,就使用这个接口, 尝试从pin count=0的页面中淘汰一些

参数
count想要purge多少个页面
purger需要在释放frame之前,对页面做些什么操作。当前是刷新脏数据到磁盘
返回
返回本次清理了多少个页面

当前还在frameManager的锁内,而 purger 是一个非常耗时的操作 他需要把脏页数据刷新到磁盘上去,所以这里会极大地降低并发度

◆ total_frame_num()

size_t BPFrameManager::total_frame_num ( ) const
inline

测试使用。返回已经从内存申请的个数


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