我正在阅读Robert Love的Linux内核开发。我不理解关于bio
结构的这一段:
内核中块I / O的基本容器是生物结构,它在
<linux/bio.h>
中定义。此结构表示作为段列表在行(活动)的块I / O操作。段是在内存中连续的缓冲区块。因此,各个缓冲区在存储器中不需要是连续的。通过 允许以块为单位描述缓冲区,bio结构为内核提供了从内存中的多个位置执行甚至单个缓冲区的块I / O操作的能力。像这样的向量I / O称为分散 - 聚集I / O.
flight(active)
究竟是什么意思?答案 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设备。
在内核中有两个可能的内存,其中分配了内存。
这里的段表示第一种类型,即用于块IO传输的连续物理存储器。段列表表示一组这样的连续物理存储区域。请注意,列表元素是非连续的内存段。
Q3)“通过允许缓冲区......在内存中”是什么意思?
Scatter-gather功能允许一次性(读/写事务)从/向设备的多个非连续存储器位置进行数据传输。这里“struct bio”记录了要处理的多个段。每个段是连续的存储区域,而多个段是彼此不连续的。 “struct bio”为内核提供了执行分散 - 聚集功能的功能。
答案 1 :(得分:3)
答案 2 :(得分:1)
1)“在飞行中”意味着“在进行中” 2)没有 3)不太确定:))