CMU 14-445/645 Project #1 Buffer Pool

Lab1 Buffer Pool

时钟更换策略

时钟的组成

在这里插入图片描述

对于单个frame应当有以下三部分组成:frame_idRefPIN

frame_id:唯一确定id,与buffer pool相对应。

Ref:该frame最近是否使用过。使挑选的frame尽量是很久之前使用的(类似与LRU)

PIN:该frame是否正在使用。

?> 注:该时钟不包含任何page信息,真正的page是存储在buffer pool。该时钟只是在buffer pool满了后,buffer pool manager希望加载新的page时,为其提供可以替换的frame_id

时钟的初始化

frame_id:初始化0-X-1,X代表buffer pool中能存储Page的数量。

接下来两个元素的初始化,我们就要先要知道时钟使用的时机:所有的buffer pool都加载了Page,加载一个Page那对应的PIN必然是true,若Page的使用还未结束那么Ref的初始化应当为false

Ref:上述分析,false

PIN:上述分析,true

在这里插入图片描述

Victim

Victim(受害者),方法名很有意思。就在buffer pool满了时,buffer pool manager希望加载新的page时,为其提供可以替换的frame_id

首先我们要知道我们要找什么样的受害者:PINfalseRef也为false。代表现在不在使用,且最近未被使用。

在这里插入图片描述

hand是时钟的指针,它顺时针旋转,便可以发现可以被移除的frame

如果hand扫描一圈发现所有的PIN都是true的话,就代表所有的page都在被使用,就无法加载新的pagebuffer pool,便返回false。如Clock刚初始化的时候:

在这里插入图片描述

还有一个问题,就是我说的在PIN都是true时才找不到,但是我们要找的确是PINRef都为false的情况。那是因为Ref是可以改变的,当时针扫描过一个frame时,若它的PINfalse,且Ref为true,那此时便将Ref变为false

在这里插入图片描述

PIN

PIN(固定方法)则是代表,该frame中存储的page正在使用,不能将其移除(PIN = true)。

UNPIN

UNPIN(取消固定方法)则是代表,该frame中存储的page正在使用,可以将其移除(PIN = false),同时该frame刚被使用过(Ref = false)。

在这里插入图片描述

缓冲池管理器

管理器的组成

在这里插入图片描述

由三部分组成Buffer PoolClockFree List。他们分别的作用:

Buffer Pool:用来存储Page

Free List:目前Buffer Pool中有那几个地方没有加载Page

Clock:在Free List为空时(Buffer Pool加载满时),提供可以移除的受害者。

FetchPage

FetchPage(获取page),若在Buffer Pool中,直接返回对象。若不在,则从磁盘中加载后返回对象。

在这里插入图片描述

NewPage

在这里插入图片描述

Page的结构

在这里插入图片描述
pageIdPage唯一的唯一标识,决定其存储位置。

pinCount:正在被多少线程使用。

dirty:内容是否修改

Data:存储在磁盘上的数据

UnpinPage

在这里插入图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值