深入理解缓冲区(六)

4.1.3.2           从buf分配看buf的使用

BufferAlloc函数,当有buf可以被分配时,从缓冲区拿出“空闲”(有个freelist结构)的缓存块进行分配,如果缓冲区已经满,则根据缓存淘汰算法,对缓存中的被选中的脏页进行刷出,然后分配给提出需求者。

 

BufferAlloc被调用关系

BufferAlloc

       ReadBuffer_common

              ReadBufferExtended

              ReadBufferWithoutRelcache

 

BufferAlloc代码分析:

1.         变量定义区,查看“volatile BufferDesc *buf;”的使用之处,可以更好把握buf的分配情况

2.         “buf_id = BufTableLookup(&newTag, newHash);”,调用BufTableLookup函数确定要求的块是否在缓冲区中?

3.         接第二步,如果找到这样的缓存块,则作为BufferAlloc函数的返回值返回找到的缓存块

4.         接第二步,如果没有找到,反复循环,淘汰一些缓冲块出缓冲区(通过对StrategyGetBuffer函数的调用、对得到的buf判断是否是dirty,如果是,则淘汰。注意StrategyGetBuffer函数中,对于缓冲区淘汰策略的使用方式,如何淘汰,取决于淘汰算法------仔细看StrategyGetBuffer函数的实现),直到找到一个可以分配的缓存块

5.         接第四步,为找到的缓存块,赋予恰当的值


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值