gpt4 book ai didi

linux-kernel - Linux内核中的bio结构

转载 作者:行者123 更新时间:2023-12-04 03:08:36 24 4
gpt4 key购买 nike

我正在阅读 Robert Love 的 Linux Kernel Development。我不明白这一段关于bio结构体:

The basic container for block I/O within the kernel is the bio structure, which is defined in <linux/bio.h>. This structure represents block I/O operations that are in flight (active) as a list of segments. 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. Vector I/O such as this is called scatter-gather I/O.


  • 究竟是做什么的flight(active)方法?
  • “作为段列表”--我们在谈论this分割?
  • “通过允许缓冲区......在内存中”是什么意思?
  • 最佳答案

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

    Q1) flight(active) 到底是什么意思?

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

    “Q2)作为分割列表”——我们是在谈论这个分割吗?

    内核需要内存缓冲区来保存进出块设备的数据。

    在内核中有两种可能的内存分配方式。

  • 虚拟地址连续 - 物理地址连续(使用 kmalloc() - 提供良好的性能但大小有限)
  • 虚拟地址连续 - 物理地址非连续(使用 vmalloc() - 对于巨大的内存大小要求)

  • 这里的段表示第一种类型,即用于块 IO 传输的连续物理内存。段列表表示一组这样的连续物理内存区域。请注意,列表元素是非连续内存段。

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

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

    关于linux-kernel - Linux内核中的bio结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14574052/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com