第五章-缓冲区管理(金培权课程)

缓冲区结构

在这里插入图片描述

frame的参数

  1. Dirty:frame中的块是否被修改
  2. Pin-count:frame的块已经被请求并且还未释放的计数,也就是当前的用户数
  3. Others:Latch:是否加锁

请求块操作

  1. 如果请求块不在缓冲池中:
    1)选择一个frame替换
    2)若frame是dirty,则写回磁盘
    3)将请求快写入frame中
  2. 否则增加对应frame的pin-count,并返回地址

释放块操作

  1. unpin对应frame
  2. 表明哪块block是dirty

缓冲区替换策略

只有pin-count为0的frame才会被选择为候选frame

OPT算法

  1. 定义:也称为Belady’s算法,最佳的页面置换算法
  2. 规则:每次置换以后永远用不到的页面,如果没有则淘汰最久以后再用到的页面
  3. 只存在理论意义,可以作为算法性能上界作为对比

LRU

  1. 规则:所有frame按照最近一次访问时间排列成一个链表,基于时间局部性,越是最近访问的在未来被访问的概率越高,总是替换LRU端的frame
  2. 优点:在重复访问同一个页面上效果较好,选择frame的复杂度只有O(1)
  3. 缺点:缓存污染、维护LRU链表代价高、不满足时间局部性则性能差、没有考虑访问频率

LRU-K

  1. 规则:若某个frame的访问次数达到了K次以上,则尽量不置换
  2. 方法:维护两个LRU链表(1个是访问K次以上的,1个访问次数小于K),优先置换小于K次的链表
  3. LRU-2性能较好

2Q

  1. 规则:与LRU-2类似,区别在于访问1次的队列采用FIFO

Second-Chance LRU

  1. 规则:给每个frame两次置换机会
  2. 方法:LRU链表基础上增加一个bit,初始为1,第一次被选中置换时置0并放到MRU端;只有bit位为0的LRU页才会被置换;若重新被访问,则移到MRU端并置为1

CLOCK

  1. 规则:避免每次访问都需要调整链表
  2. 方法:引入环形Second Chance FIFO,引入一个current指针指向当前指向的frame,给每个frame添加一个referenced位,初始为1
    1)current指向frame的pin-count>0,则current++
    2)current指向frame的referenced位若为1,则置0;current++
    3)current指向frame的referenced位若为0,且pin-count为0,则替换该frame;current++
    (注意若访问命中时,不会改变current指针)

缓冲区管理器的实现

Buffer vs. Disk file

一般而言,frame大小=page大小;buffer由若干frame组成,file由若干page组成

Page/block的一般存储格式

在这里插入图片描述
也就是对一个块来说,有若干槽,对于不连续存储,每个槽对应是否有内容由最后一行的位图表示;对于连续存储,只有最后一个地方记录记录数量

Buffer中Frame的查找

  1. 读磁盘块时:根据page_id确定在Buffer中是否已经存在frame
  2. 写磁盘块时:根据frame_id快速找到文件中对应的page_id
  3. 建立frame-page之间的索引
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值