Linux内核中的生物结构

时间:2013-01-28 18:51:12

标签: linux-kernel block-device

我正在阅读Robert Love的Linux内核开发。我不理解关于bio结构的这一段:

  

内核中块I / O的基本容器是生物结构,它在<linux/bio.h>中定义。此结构表示作为段列表在行(活动)的块I / O操作。段是在内存中连续的缓冲区块。因此,各个缓冲区在存储器中不需要是连续的。通过   允许以块为单位描述缓冲区,bio结构为内核提供了从内存中的多个位置执行甚至单个缓冲区的块I / O操作的能力。像这样的向量I / O称为分散 - 聚集I / O.

  1. flight(active)究竟是什么意思?
  2. “作为细分列表” - 我们是在谈论this细分吗?
  3. “允许缓冲区......在内存中”是什么意思?

3 个答案:

答案 0 :(得分:14)

块设备是在I / O事务期间处理块(512,1024字节)数据的设备。 “struct bio”可用于Kernel-Space的块I / O操作。该结构通常用于块设备驱动程序开发中。

Q1)航班(有效)的确切含义是什么?

块设备通常使用用于存储文件的文件系统来实现。现在,当用户空间应用程序启动文件I / O操作(读,写)时,内核依次通过文件系统管理器启动一系列块I / O操作。 “struct bio”跟踪要处理的所有Block I / O事务(由用户app启动)。这就是航班/活动区域。

“Q2)作为细分列表” - 我们是在谈论这种细分吗?

内核需要内存缓冲区来保存数据到/从Block设备。

在内核中有两个可能的内存,其中分配了内存。

  1. 虚拟地址连续 - 物理地址连续(使用kmalloc() - 提供良好的性能但尺寸有限)
  2. 虚拟地址连续 - 物理地址不连续(使用vmalloc() - 用于巨大的内存大小要求)
  3. 这里的段表示第一种类型,即用于块IO传输的连续物理存储器。段列表表示一组这样的连续物理存储区域。请注意,列表元素是非连续的内存段。

    Q3)“通过允许缓冲区......在内存中”是什么意思?

    Scatter-gather功能允许一次性(读/写事务)从/向设备的多个非连续存储器位置进行数据传输。这里“struct bio”记录了要处理的多个段。每个段是连续的存储区域,而多个段是彼此不连续的。 “struct bio”为内核提供了执行分散 - 聚集功能的功能。

答案 1 :(得分:3)

  1. “在飞行中”是指已请求但尚未启动的操作。
  2. “Segment”这里表示要读取或写入的内存范围,是连续的 作为操作的一部分要传输的数据。
  3. “分散/收集I / O”是指 scatter 操作,它在磁盘上获取连续的数据范围并将其中的部分分发到内存中, gather 分开内存中的数据范围,并将它们连续写入磁盘。 (用前面的一些合适的设备替换“磁盘”。)一些I / O机器能够在一次操作中完成此操作(这种情况越来越普遍)。

答案 2 :(得分:1)

1)“在飞行中”意味着“在进行中” 2)没有 3)不太确定:))