一文理解Linux数据驱动

一. 说明

  本文是对《存储技术原理分析:基于Linux_2.6内核源代码》部分章节学习总结,旨在对文中知识点的记录,缺少系统全局性的视图。书中对scsi驱动结构设计及代码细节分析很多,如果想系统性学习可以去查阅。
  

二. 文件系统层

Linux的文件系统被分为两层,如下图
在这里插入图片描述
上层:为虚拟文件系统层,简称VFS层。它是具体的文件系统和上层应用之间的接口层,可以理解为具体文件系统的统一框架,使得用户不需要关心不同文件系统细节。需要注意的是,VFS不是一种实际的文件系统,只存在与内存之中,在系统启动时建立,系统关闭时消亡。
下层:为具体的文件系统,如minix、ext2/3/4、sysfs等。通过向VFS层注册回调函数,处理文件系统的相关操作。

三. 块I/O子系统

块设备是支持以固定长度的块为单位读/写数据的存储设备统称。块设备支持随机访问的硬件设备,如磁盘、软盘、CDROM或基于块设备之上的逻辑设备,如分区、MD、device Mapper等。
Linux内核负责处理块设备IO请求的子系统称为Linux块设备层,分层如下图所示:
lLinux 块设备层
通用块层:接收上层发出的磁盘请求,并最终发出IO请求。该层隐藏了底层硬件块的特性,为块设备提供了通用抽象视图。
IO调度层:接收通用块层的IO请求,缓存请求并试图合并请求,并根据设置好的调度算法,处理具体的IO请求。该层集成了很多优秀的调度算法,NOOP(No Operation)、DeadLine及CFQ(Complete Fairness Queueing)等。
块设备驱动层:该层不需要直接与硬件打交道,只是机械的重定向IO。对于scsi块设备,其块设备驱动层即scsi磁盘驱动,为scsi子系统的高层驱动,从而将块IO子系统与scsi子系统联系了起来。

  I/O,简单的将,就是将数据从内存写入磁盘,或从磁盘读入内存。
  块I/O子系统处理I/O的处理流程是:上层调用通用层提供的接口向块IO子系统提交IO请求,这些请求首先放入IO调度层的调度队列,经过合并与排序,最终将转换后的IO请求派发到具体块设备的等待队列,由后者的驱动进一步处理。

四. SCSI子系统

Linux的scsi子系统是一种分层架构,如下图所示,共分为三层。
在这里插入图片描述
scsi高层,代表各种scsi设备类型的驱动,如sd、st、sr、sg。高层驱动负责根据底层驱动发现的scsi设备而分配设备名,并将上层的IO命令转化为scsi命令,交给底层驱动处理。
scsi中层,也称为公共层。包含了一些公共服务函数,如错误恢复,策略例程等。
scsi底层,代表适用于scsi的实际物理接口的驱动器。作用主要是发现连接到主机适配器后面的scsi设备,在内存中为塔门建立好数据结构,并提供消息传递接口,将scsi命令的接收与发送解释为主机适配器的操作。

五. I/O物理通路

以下简述了数据I/O由CPU经内存到磁盘的物理连接通路
在这里插入图片描述
系统内存总线:互连CPU和系统内存、缓存。高速总线
主机I/O总线:上联桥接系统总线,下联I/O控制器与网络适配器,即HBA卡与网卡。
存储I/O总线:下联存储设备和存储子系统;存储设备即磁盘控制器,存储子系统即RAID系统;最后I/O到达终点站存储介质:磁盘、磁带等。

六. I/O逻辑通路

了解了数据I/O物理连接通路后,再更为详细阐述下逻辑通路。其中,左边为存储I/O数据通路,右边为网络I/O数据通路。
在这里插入图片描述
大部分I/O开始于用户态应用程序,通过系统调用进入内核态;存储数据在虚拟文件系统被假定为一个个“文件”,左边是存储I/O的执行通路,右边是网络I/O的执行通路。

存储I/O:经过具体的文件系统到达块设备层,经过通用块层、I/O调度层,最终到达块驱动层,如果是虚拟块设备层,经过多次反复来到物理块设备层,由它进入SCSI子系统。在其中经过高层、中层公共层和底层驱动层,最终数据到达固件/硬件。

网络I/O:经过BSD套接口层(该层为各种网络协议提供统一接口),如果是TCP/IPv4,则从IPv4协议簇层,经TCP协议到达网卡驱动层;通过物理网卡驱动,最后数据到达固件/硬件。


         持续更新中…

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值