Linux块设备的原理远比字符设备要复杂得多,尽管在linux这一块的方法论有很多相似之处,但考虑到它是用中块结构,它常常要搭配内存页管理,页缓冲块缓冲来改善硬盘访问的速度,按照块硬件最大的性能要求进行软件发挥。
我们现在从入门级别的角度来理解块设备在初建时候需要的数据结构和过程,在这里,我以图形的方式呈现,可以按照图示的结构标识找到linux内核源码,看它们的函数就可以理解完整的初建过程。
一. 数据结构。
- block_device: 旨在描述一个分区或整个磁盘对内核的一个块设备实例
- hd_struct: 旨在描述分区应有的分区信息
- gendisk: 旨在描述整个磁盘有哪些分区信息和相关操作被填充。
- request: 旨在描述向内核请求一个列表准备做队列处理。
- request_queue: 旨在描述内核申请request资源建立请求链表并填写BIO形成队列。
- bio: 旨在描述块数据传送时怎样完成填充,入或读取块给driver的
二. 框架模型。
图1-1 linux块设备模型架构框架之初建