linux对块设备请求的处理是一种层次体系结构,可以分为5层:
1.vfs:这层对所有文件系统的一种封装
2.mapping layer:这层用来定位数据的物理位置
这个操作分为2步:
a.首先确定包含文件的文件系统的block size,然后计算请求的数据包含多少file block。
b.调用跟文件系统有关的函数来访问文件的inode,确定请求的数据在磁盘上的逻辑块地址,事实上
磁盘被看成由一个一个的block组成,所以kernel需要确定请求数据的起始块号
这层跟下层的区别在于这层看不到sector结构,只看到block结构
3.generic block layer:
这层有个核心的数据结构bio,它代表一次i/o操作,读取连续的磁盘扇区,如果请求的数据不是连续的,那么
需要发送多个bio结构,也就是多次i/o操作。这层将block转到对应的sector。
4.i/o scheduler layer:
这层负责将i/o操作进行排序,采用某种算法来高效地处理操作,下面的博客i/o scheduler将进行详细阐述
5.block device driver:
这层实现真正的数据传输,通过发送命令给磁盘控制器