免费注册 查看新帖 |

Chinaunix

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

问个关于buffer跟bio的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-07 20:07 |只看该作者 |倒序浏览
现在在看<linux kernel development>

在bio那里说到:
A segment is a chunk of a buffer that is contiguous in memory. Thus, individual buffers need not be contiguous in memory. By allowing the buffers to be described in chunks, the bio structure provides the capability for the kernel to perform block I/O operations of even a single buffer from multiple locations in memory。

这边实在不明白是怎么回事,书上前面有说过buffer跟磁盘上的block是一一对应的,但这边又说单个buffer在内存中可以是不连续的,最后一句也说一个buffer可以在内存中的多个地方。但是看了一下buffer_head,好像也没有一个成员是用来连接一个buffer的多个chunk的,实在搞不懂

还是有什么地方我搞错了,请大家指点一下

论坛徽章:
0
2 [报告]
发表于 2008-10-07 22:01 |只看该作者
也就是说,bio这个结构描述:磁盘地址,bi_sector开始的bi_size字节是一片连续的地址; 而读写时使用的内存区域可以是分散的物理内存页,

bio -> request  ,进入request_queue,经过io调度算法,到SCSI中间层时从调度队列中取出request,将request映射成SG链表,以使SCSI驱动程序进行scatter-gather DMA

论坛徽章:
0
3 [报告]
发表于 2008-10-07 23:26 |只看该作者
呃,还是不太懂,看来是功力不够了。。。

不过还是再问下一个buffer在内存中是不是只存在一个物理页里面,如果是的话上面提到的chunk该怎么理解?

论坛徽章:
0
4 [报告]
发表于 2008-10-08 09:15 |只看该作者
我建议你阅读ULK第14章,讲的比LKD清楚。
首先我认为这里的buffer不是和磁盘的block对应(准确的说磁盘的block应该叫sector),这里的chunk对应下图的segment。BIO结构主要是用bi_io_vec
字段,以segment为单位操作。

untitled.JPG (22.26 KB, 下载次数: 22)

untitled.JPG

论坛徽章:
0
5 [报告]
发表于 2008-10-08 09:20 |只看该作者
这里说的buffer不是什么定义,就是一个内存区域
就像todaygood 说的, 当需要执行IO时,具体做什么是由bio结构来描述的,它包含一堆你心目中的buffer
经过IO调度之后, 设备驱动会得到相应的请求,驱动做的就是执行具体的IO操作
找ULK3看看,lkd不详细

论坛徽章:
0
6 [报告]
发表于 2008-10-08 09:35 |只看该作者
也就是说可以把buffer看成两个概念? 一个是当把block读到内存时用来表示它的buffer(lkd里原本是这么定义buffer的),但实际上并没有专门用来表示它的结构,另一个概念是在进行I/O时用到的buffer,操纵这个buffer用的是bio。这样对我来说好像更好理解一点

[ 本帖最后由 jjj346 于 2008-10-8 09:40 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP