首页 > 其他分享 >Project #1 - Buffer Pool

Project #1 - Buffer Pool

时间:2023-03-27 17:56:29浏览次数:47  
标签:Buffer frame list page Project lru id Pool size

Overview

Lecture#05 Buffer Pool

Lecture#06 HashTables

Project1 主要与 Bustub 的 storage manager 相关,分为三个部分:

  • Extendible Hash Table
  • LRU-K Replacer
  • Buffer Pool Manager Instance

Buffer Pool Manager 向系统提供获取 page 的接口,系统通过 page_idBuffer Pool Manager 索要对应的 page,而不关心该 page 具体存放位置。也就是说,系统并不关心(也不可见)获取这个 page 的过程(从 disk 或 memory 上读取),也不关心 page 可能发生的在 disk 和 memory 间的移动。这些内部的操作都交由 Buffer Pool Manager 完成。

Extendible Hash TableLRU-K ReplacerBuffer Pool Manager 内部的组件。Extendible Hash Table 用于实现 page table,将 page id 映射为 Buffer Pool 中 frame 的 frame id。 LRU-K Replacer 完成 Buffer Pool 空间不足时 frame 的移除工作。

image-20221207180458200

Disk Manager 已经为我们提供,是实际在 disk 上读写数据的接口。

我们实现结构的类图如下:

image-20230327012110291

Task #1 - Extendible Hash Table

实现 ExtendibleHashTable 类、Bucket 类,涉及文件:

  • src/container/hash/extdible_hash_table.cpp
  • src/include/Container/hash/extdible_hash_table.h

要求实现一个 extendible hash table,内部不能使用 build-in hash table,如 unordered_map。需要实现对扩容哈希表的支持,而不用实现对缩小/压缩哈希表的支持。该 hash table 在 buffer pool manager 中负责存储 buffer pool 中 page id 到 frame id 的映射关系。

Extendible Hash Table 由一个 directory + 多个 bucket 组成。

  • directory: 存放指向 bucket 的指针,是一个数组。用于寻找 key 对应 value 所在的 bucket。
  • bucket: 存放 value,是一个链表。一个 bucket 可以至多存放指定数量的 value。

Extendible Hash Table 维护两个值 ——

  • global_depth:记录定位到 bucket 指针数组 directory (slot array) 的具体位置,需要取 key 的二进制的多少位
  • 各 bucket 的 local_depth:记录定位到该 bucket 需要取 key 的二进制的多少位

Extendible Hash Table

标签:Buffer,frame,list,page,Project,lru,id,Pool,size
From: https://www.cnblogs.com/angelia-wang/p/17262376.html

相关文章

  • python 实现 average pooling 和 max pooling
    pooling的主要作用1.首要作用:下采样,降维,去除冗余信息。同时扩大感受野,保留了featuremap的特征信息,降低参数量。2.实现非线性,一定程度上避免过拟合。3.可以实现特征......
  • BufferedImage 详解
    1.继承依赖关系:2.介绍:BufferedImage子类描述具有可访问的图像数据缓冲区的图像。缓冲图像由图像数据的颜色模型和光栅组成。栅格采样模型中波段的数量和类型必须与颜......
  • shell关闭buffer执行命令
    前言当执行一些二进制文件时,发现有日志丢失的情况,后来知道是输出到buffer中,换行会将buffer中的内容输出到控制台,而如果没有换行那么会输出到buffer中。一个例子#include<ios......
  • ArrayBuffer、Float32Array、Uint8Array 详解
    ArrayBufferArrayBuffer()是一个普通的JavaScript构造函数,可用于在内存中分配特定数量的字节空间。constbuf=newArrayBuffer(16);//在内存中分配16字节alert(buf.......
  • 设置Mysql sort_buffer_size参数
    按照官网的解释:Eachsessionthatmustperformasortallocatesabufferofthissize.sort_buffer_sizeisnotspecifictoanystorageengineandappliesinag......
  • 什么时候用ExecutorService,什么时候用ThreadPoolExecutor?
    如果不需要对线程池参数应用任何自定义微调,并且希望使用预配置的线程池实例,则应该选择ExecutorService。ExecutorService提供了几种方法来创建不同类型的线程池,例如固定的......
  • box_roi_pooling 网络结构解释
    fasterrcnn中ROIPooling与SPP理解、一、结构说明1、box_roi_pooling在FaterRCNN整体框架中对应ROIpooling位置2、POIpooling后接全连接层网络TwoMLPHead1)参考代......
  • Go语言并发编程(4):sync包介绍和使用(下)-Once,Pool,Cond
    sync包下:Once,Pool,Cond一、sync.Once执行一次Once简介sync.Once是Go提供的让函数只执行一次的一种实现。如果once.Do(f)被调用多次,只有第一次调用会调用f。......
  • SPP(Spatial Pyramid Pooling:空间金字塔)
    fasterrcnn中ROIPooling与SPP理解、一、SPP作用1、目的:将不同大小的窗口输入得到同样大小的窗口输出1)解释:在卷积的操作中,对输入的尺寸是没有限制的,但是大多数网络结......
  • 请写一个用python3.x pool.map多进程下载文件的示例代码
    自己改了一下要下载的url,一个网页,一个exe,一个PDFimportrequestsimportmultiprocessingdefdownload_file(url):local_filename=url.split('/')[-1]with......