Linux内核中的生物结构

Vik*_*ram 10 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. "作为细分列表" - 我们是在谈论这种细分吗?
  3. "通过允许缓冲区......在内存中"是什么意思?

Pra*_*lix 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() - 用于巨大的内存大小要求)

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

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

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