Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1213858
  • 博文数量: 298
  • 博客积分: 10050
  • 博客等级: 上将
  • 技术积分: 3277
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-14 13:36
文章分类
文章存档

2015年(7)

2012年(1)

2010年(5)

2009年(55)

2008年(73)

2007年(160)

我的朋友

分类: LINUX

2007-08-07 11:57:17

当时似乎是pdf文档不能下载,而后来发布的文本并不完整。直到 Chapter 4 bcache 中脏

缓冲区的同步机制的41 bcache中的脏缓冲区同步操作,就结束了。

 

却再找不到完全的版本进行继续的阅读,小遗憾~~

 

    在这里有几个问题:

    (1) 3 1 缓冲区的分配这一节中,详细介绍了grow_buffers(),

create_buffers(),get_unused_buffer_head三个函数,(层层调用)。

 而在普通文件读的 prepare_write 方法包装的block_prepare_write函数调用的__block_prepare_write函数中 调用了

create_empty_buffers (struct page *page, kdev_t dev, unsigned long blocksize)

为页中的所有缓冲区分配bh,这里的page已经存在,就不用像grow_buffers()般需要调用 alloc_page来分配页了。

create_empty_buffers也调用了 create_buffers()get_unused_buffer_head

 

     那么 grow_buffers()create_empty_buffers()的区别即用途有什么不同么?是否前者针

对块设备文件,后者针对普通文件。create_empty_buffers也算是缓冲区分配的操作么?

 

    2)在create_buffers()中对该bh对象进行初始化时

         bh->b_dev = B_FREE;  

       //表明这是一个空闲缓冲区,那么就应该是bh处于空闲状态

 

          bh->b_list = BUF_CLEAN;   

        //那这里是否表示将其链入BUF_CLEAN链表,还是只是记录这个缓冲区应该出现在哪个链表上

         因为一旦是lru_list[BUF_CLEAN],bh就是处于正在使用状态了吧,就与前面矛盾了。

 

     当然,在2.4.18版本中,create_buffers()的代码行bh->b_dev = B_FREE已经变成了

bh->b_dev = NODEV;我反倒觉得这样比较好理解一些。版本更新了的原因,bh的几个状态也与这篇文

章讲述的有些出入了。只是想就这篇文章的概念弄清楚这几个问题了。

阅读(1486) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~