Linux块设备驱动(二)请求

本文探讨Linux块设备驱动中与请求处理相关的数据结构,如request_queue、request和bio。讲解了bio如何描述I/O请求,如何通过I/O调度算法合并请求,并介绍了如何遍历和操作bio_vec进行数据传输,包括获取内存页、磁盘扇区地址和传输数据量的方法,为理解Linux块设备驱动的请求处理提供关键信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

与请求处理相关的几个数据结构:
struct request_queue
struct request
struct bio
一个bio对应上层传递的I/O请求,I/O调度算法会把多个bio合并为一个request,多个request又构成了request_queue,request_queue是上节提到的gendisk结构中的成员。
bio的定义:

struct bio {
	struct bio  *bi_next; /* request queue link */
 	struct block_device *bi_bdev;
	unsigned long  bi_flags; /* status, command, etc */
	unsigned long  bi_rw;  /* bottom bits READ/WRITE,
       					* top bits priority
       					*/
       	struct bvec_iter bi_iter;
       	
       	/* Number of segments in this BIO after
  	* physical address coalescing is performed.
 	 */
 	 unsigned int  bi_phys_segments;
 	 ...
 	 struct bio_vec  *bi_io_vec; /* the actual vec list */
 	 struct bio_set  *bi_pool;
 	 ...
}

其中bio_vec用来描述与bio对应的内存,这些bio_vec可能不在同一数据页中,所以要用向量(bi_io_vec)来表示,bio_vec的定义为:

struct bio_vec {
 	struct page *bv_page;
 	unsigned int bv_len;
 	unsigned int bv_offset;
};

bvec_iter是用来遍历bio的迭代器,记录了当前bi_io_vec的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值