免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1047 | 回复: 0
打印 上一主题 下一主题

MD中的bitmap(4) - Bitmap的设置 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-10 16:11 |只看该作者 |倒序浏览
Bitmap在磁阵处理写访问请求时,调用bitmap_startwrite设置bitmap内存的信息,包括内存中的bitmap结构,以及内存中bitmap磁盘文件的映射filemap;在磁阵实际将写请求实际提交给子设备前,调用bitmap_unplug将bitmap信息写入磁盘。
除这两个函数外,bitmap_start_sync,bitmap_end_sync,bitmap_endwrite等函数也和bitmap的一些标志设置有关。
bitmap_startwrite
该函数在磁阵处理访问请求时(make_request)调用。函数主要完成:
1. 如果是延迟写,则增加延迟写计数
2. 由于一个写操作涉及的数据段可能对应多个bitmap,对于每个这样的bitmap:
a)       获取该bitmap的内存结构,即bp数组指向的内容
b)       如果该bitmap的COUNTER达到最大值,说明磁阵上该数据区正在进行的写访问已经太多,磁阵等待太久,此时需要启动设备的队列处理。
c)       如果bitmap上没有正在进行的写操作(COUNT=0),设置filemap的对应bit。将内存bitmap结构COUNT直接设置为2。
d)       Bitmap内存结构COUNT累加。(也就是写操作计数为0时,表示没有写入操作;为1,2都是特殊状态,3表示有一个写入,依次类推)
bitmap_unplug
遍历bitmap的所有filemap页,如有标记为脏的页(BITMAP_PAGE_DIRTY ,bit置位时设置),或者为需要写入的(BITMAP_PAGE_NEEDWRITE ,bit清除时设置),则将该页写入磁盘。
如果有脏页,则等待写入结束后返回。
注意这里如果只有BITMAP_PAGE_NEEDWRITE标记的页,是不需要等待的,因为bit的清除并不是很关键,即使这个信息丢失,最多不过是多余的同步操作而已,没有副作用。而bit设置则需要可靠写入磁盘后方可进行磁阵条带的写入,否则在条带数据写入磁盘过程中,bitmap写入磁盘前,磁阵出现异常,则可能导致数据不一致而bitmap不能发觉。
bitmap_start_sync
在磁阵同步操作开始时,调用该函数。
这个函数获取bitmap的内存结构,如果NEED标志或者RESYNC标志被设置,就认为该数据块需要同步,此时如果磁阵工作完好,则清除NEED标志,设置RESYNC标志;如果NEED和RESYNC都没有设置,则认为该数据块不需要同步。
bitmap_end_sync
磁阵同步完成后,调用该函数。
这个函数获取bitmap的内存结构,如果RESYNC标志被设置,则清除该标志。如果同步是失败的,则设置NEED位。如果COUNT小于3,则设置该页file_attr的BITMAP_PAGE_CLEAN(下文简写为CLEAN),表示该页存在需要清除的bit位。
bitmap_endwrite
写操作完成后,取出对应数据段的bitmap内存结构,COUNT递减,如果COUNT小于3,则设置对应filemap页的CLEAN属性。
    如果写失败,则设置对应bitmap的NEED标志。

本文来自CSDN博客,转载请标明出处:
http://blog.csdn.net/qincp/archive/2009/08/06/4417768.aspx


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/103238/showart_2023545.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP