深入探索块设备驱动与FUSE文件系统
1. 块设备数据交换机制
在块设备的操作中,数据的读写操作并非直接在操作表中体现,而是遵循特定的流程:
1. 当内核收到读写请求时,会将其放入与驱动关联的请求队列中,此队列之前已完成初始化。
2. 内核会对队列中的请求进行重新排序,以优化请求序列的执行。例如,减少硬盘磁头的移动,将相邻的多个请求合并为一个更长的请求。
3. 队列中的下一个(当前最前端)请求会被传递给驱动程序中预先定义的处理函数。
4. 请求的方向(输入或输出)以及参数(起始扇区、扇区数量等)都在请求体中明确规定。
单个对块驱动的请求( struct request )通常由多个同类型(读或写)的操作( struct bio ,内存缓冲区)组成。这些操作的扇区可能在磁盘上分散分布,具体取决于文件系统的特性。同样,这些操作在内存中的接收地址也可能是分散的(输入 - 输出向量,IOV)。块设备驱动的主要任务就是处理这些请求。
2. 块设备模块示例分析
以 block_mod_s.c 模块为例,它实现了一个内存中的块设备。该模块包含了一些通用的头文件,如 common.h :
#include <linux/module.h>
#include <linux/vmalloc.h>
#include <linux/blkdev.h>
#include <linux/genhd.h>
超级会员免费看
订阅专栏 解锁全文
1

被折叠的 条评论
为什么被折叠?



