LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1127|回复: 1

关于块缓冲区的问题?

[复制链接]
发表于 2007-11-11 22:36:38 | 显示全部楼层 |阅读模式
我刚看linux内核的书,现在在看《Linux Kernel development》。
可能问的太幼稚,希望大家见谅。

在13章的块I/O层,前面说一个缓冲区对应一个磁盘块。按照buffer_head里的*b_page指针对应的struct page结构,也就是说一个缓冲区是b_page指向的内存页的(b-data,b_data+b_size)连续区域。后面又出现bio结构体,说有了segment来描述缓冲区,就不需要保证单个缓冲区一定要连续。
我的问题是:既然按照前面buffer_head表示的缓冲区时连续的,后面为什么要说“不需要保证单个缓冲区一定要连续”?而一个bio_vec结构正好可以表示一个缓冲区。这到底是什么回事,真是搞糊涂了。
发表于 2007-11-15 00:58:16 | 显示全部楼层
研究一下page,segment,block,sector的大小和包含关系就清出了(《Understanding the Linux Kernel》):
sector: 512bytes, basic unit of data transfer
block (buffer_head): 512/1024/2048/4096, basic unit of data transfer for VFS and, consequently, for filesystem
segment:A segment is simply a memory page -- or a portion of a memory page -- that include the data of some adjacent disk sectors
page: 4K/2M/4M, buddy system内存管理的基本单位
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表