Linux kernel Linux内核中的生物结构

Linux kernel Linux内核中的生物结构,linux-kernel,block-device,Linux Kernel,Block Device,我正在阅读Robert Love的Linux内核开发。我不理解这段关于bio结构的内容: 内核中块I/O的基本容器是bio结构,它在中定义。此结构将正在运行(活动)的块I/O操作表示为段列表。段是内存中连续的缓冲区块。因此,单个缓冲区在内存中不需要是连续的。通过 允许以块的形式描述缓冲区,bio结构为内核提供了执行块I/O操作的能力,即使是来自内存中多个位置的单个缓冲区。像这样的向量I/O称为分散-聚集I/O flight(active)的确切含义是什么 “作为一个片段列表”——我们是在谈论分段

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

内核中块I/O的基本容器是bio结构,它在
中定义。此结构将正在运行(活动)的块I/O操作表示为段列表。段是内存中连续的缓冲区块。因此,单个缓冲区在内存中不需要是连续的。通过 允许以块的形式描述缓冲区,bio结构为内核提供了执行块I/O操作的能力,即使是来自内存中多个位置的单个缓冲区。像这样的向量I/O称为分散-聚集I/O

  • flight(active)
    的确切含义是什么
  • “作为一个片段列表”——我们是在谈论分段吗
  • “允许缓冲区…在内存中”是什么意思
  • 1) “飞行中”指“进行中” 2) 没有 3) 不太确定:)

  • “飞行中”指已请求但尚未启动的操作
  • “段”在这里是指要读或写的内存范围,一个连续的段 作为操作的一部分要传输的数据段
  • “分散/聚集I/O”是指分散操作,该操作在磁盘上获取连续范围的数据并将其分配到内存中,聚集在内存中获取单独范围的数据并将其连续写入磁盘。(用前面提到的合适的设备替换“磁盘”)一些I/O机器能够在一次操作中完成这项工作(这种情况越来越普遍)

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

    Q1)飞行(主动)的确切含义是什么

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

    “Q2)作为细分列表”--我们是在讨论这个细分吗

    内核需要内存缓冲区来保存与块设备之间的数据

    在内核中,有两种可能分配内存

  • 虚拟地址连续-物理地址连续(使用kmalloc()-提供良好的性能,但大小有限)
  • 虚拟地址连续-物理地址非连续(使用vmalloc()-以满足巨大的内存大小要求)
  • 此处,段表示第一种类型,即用于块IO传输的连续物理内存。段列表表示一组这样的连续物理内存区域。请注意,列表元素是非连续内存段

    Q3)“允许缓冲区…在内存中”是什么意思

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

    它的意思是“从内存中的多个位置执行单个缓冲区的块I/O操作”,我认为单个缓冲区在内存中应该是连续的,还是它在虚拟内存中是连续的,但在物理内存中是非连续的,即内存分配的情况2?