/* * 每个缓冲区都有一个对应的描述符,描述符用buffer_head结构体表示 * 被称为缓冲区头,在文件linux/buffer_head.h中定义 */ struct buffer_head { unsigned long b_state; /* 缓冲区状态标志 */ atomic_t b_count; /* 缓冲区使用记数 */ struct buffer_head *b_this_page; /* 页面中的缓冲区 */ struct page *b_page; /* 存储缓冲区的页面 */ sector_t b_blocknr; /* 逻辑块号 */ u32 b_size; /* 块大小 (以字节为单位) */ char *b_data; /* 页面中的缓冲区 */ struct block_device *b_bdev; /* 块设备 */ bh_end_io_t *b_end_io; /* I/O完成方法 */ void *b_private; /* 完成方法数据 */ struct list_head b_assoc_buffers; /* 相关的映射链表 */ }; /* *目前内核中块I/O操作的基本容器由bio结构体表示,bio结构体定义于linux/bio.g中 */ struct bio { sector_t bi_sector; /* 磁盘上相关的扇区 */ struct bio *bi_next; /* 请求链表 */ struct block_device *bi_bdev; /* 相关的块设备 */ unsigned long bi_flags; /* 状态和命令标志 */ unsigned long bi_rw; /* 读还是写? */ unsigned short bi_vcnt; /* bio_vecs偏移个个数 */ unsigned short bi_idx; /* bi_io_vec的当前索引 */ unsigned short bi_phys_segments; /* 结合后的片断数目 */ unsigned short bi_hw_segments; /* 重映射后的片段数目 */ unsigned int bi_size; /* I/O 记数 */ unsigned int bi_hw_front_size; /* 第一个可合并的段大小 */ unsigned int bi_hw_back_size; /* 最后一个可合并的段大小 */ unsigned int bi_max_vecs; /* bio_vecs数目上限*/ struct bio_vec *bi_io_vec; /* bio_vec链表 */ bio_end_io_t *bi_end_io; /* I/O 完成方法 */ atomic_t bi_cnt; /* 使用记数 */ void *bi_private; /* 拥有者私有方法 */ bio_destructor_t *bi_destructor; /* 销毁方法 */ }; |
|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )
GMT+8, 2024-9-29 23:28 , Processed in 0.078988 second(s), 12 queries , Gzip On, MemCache On.
Powered by Discuz! X3.5
© 2001-2023 Discuz! Team.