块设备驱动的bio_vec

发布于 2022-09-18 17:53:45 字数 388 浏览 7 评论 0

struct bio_vec{
struct page *bv_page;
unsigned int bv_len;
unsigned int bv_offset;
}
这是bio_vec结构体,看宋宝华的书在介绍块设备驱动时上面一直讲段的概念,看了几遍才明白书上说得段是bio_vec结构体.但是我想问一下,是不是每个段只包含一页吗?可以包含多页吗?由谁指示,是不是由bv_len指明呢?如果包含多个页,那么另外的页是不是和page指向的页相邻,若不是,那这个段又是如何包含多个页呢?
还是这本书在讲DMA时,也一直说段的概念,不过那里的段指的是:scatterlist结构体,和bio_vec非常相似,同样也有上面的问题,可以包含多个页吗?
这是小弟的一点理解不知对不对,请高手不吝赐教。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

星星的軌跡 2022-09-25 17:53:45

我觉得你理解错了。bio_vec的作用是指向内存page中的数据。在其外层为bio数据结构里面定义了对应的块设备磁盘号。
所以我理解bio_vec的作用是实现内存数据和磁盘数据的映射。
在2.4中请求描述符里有bh
2.6换成了bio
看看bh就明白了。bio好处是可以更方便的合并I/O请求

够钟 2022-09-25 17:53:45

在struct bio 这个结构了bio_vec实际上是个数组,每个bio_vec 对应一个page,一个bio_vec就是一个segment段。实际上应该是段包含在page里面。
段在page内的起始是bv_offset指定,大小是bv_len.所以对和page可以看成一一对应。

暮倦 2022-09-25 17:53:45

打错了。。。段和page可以看成一一对应
linux的输入法,无力吐槽了。sogou快来吧。

随遇而安 2022-09-25 17:53:45

本帖最后由 remaper 于 2013-05-22 16:25 编辑

回复 2# meijiaxi

    bio_vec只是描述了一个段,但是没有和disk映射吧。我想知道的是,bio里的bi_sectors是扇区的起始号,bi_size是扇区数。请问是不是所有bio_vec里的扇区数加起来 == 这个bi_size?

换句话说,是不是bio_vec可以是任意的page数组,但是disk上必须是连续的扇区?对吗?

时光沙漏 2022-09-25 17:53:45

bump u up for 2 points

蓝咒 2022-09-25 17:53:45

很复杂,不太理解!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文