一、文件系统访问块设备的路径
系统调用函数调用vfs函数,vfs获取要访问的文件的描述符、偏移量、数据长度等参数;
vfs层获取文件的address_mapping结构体,若所请求的磁盘空间在磁盘高速缓存中,则直接通过操作磁盘高速缓存;
vfs未获取到文件对应的磁盘缓存,则通过映射层来查找需要访问的磁盘空间地址。文件和磁盘空间都被拆分成块,映射层调用具体文件系统函数,根据文件inode访问文件对应的磁盘索引节点,根据请求的文件块号(逻辑块号,以文件偏移量进行计算)在磁盘索引节点的数据结构中查找对应的磁盘位置(文件对应的磁盘块可能不连续,磁盘索引节点需存储每个逻辑块和磁盘块的对应关系);
确定了需访问的磁盘块后,通用块层调用对应块设备驱动的钩子下发bio请求(每个io请求只能针对连续的磁盘块,因此需确定磁盘块后然后针对每个连续的磁盘块区间下发bio请求);
io调度程序根据内核的读写策略,将物理介质上相邻的io请求聚集在一起,聚集后的内存区称为物