zoukankan      html  css  js  c++  java
  • ATA Disk在Linux中的驱动架构对比分析

    转自 http://blog.ednchina.com/tiloog/219030/message.aspx     

       这里所说的ATA Disk包含两大类:一类是传统的并行ATAPATA),即IDE接口;另一类是目前流行的串行ATASATA)。对于IDE的驱动,Linux-2.6.28还进行了保留,其可以驱成传统的HD设备,也可以驱成流行的SD设备。对于SATA设备,Linux的标准做法是驱成SD设备,下面对传统ATA的驱动架构和目前流行ATA的驱动架构进行对比分析说明。


           传统ATA的驱动框架如上图所示,传统的ATA Host架构在PCI总线之上,在PCI总线扫描过程中枚举得到。PCI扫描程序ScanATA Host之后会加载该设备的驱动程序,即ATA Host Driver,该Driver亦是一个PCI Device的驱动。ATA Host会被注册到IDE Core Level驱动层,从而生成一条IDE的总线,IDE核心层在对ATA Host初始化完毕之后会扫描该Host,并且加载适合设备的IDE Device Driver。如果Ide Device Driver是一个Ide Disk的驱动,那么ATA磁盘将会被驱成HD设备;如果驱动是Ide-Scsi,那么ATA Device将会被虚拟成一个SCSI Host,并且将该Host加入到Scsi Middle Leve驱动层,同样的原理,Scsi Middle Level驱动层会扫描这个虚拟的Scsi host,然后加载扫描得到设备的驱动,这个驱动通常为scsi disk driver,此时,一个传统IDE设备被驱成了一个SCSI设备。从上述的驱动栈我们可以看出,IDE设备被虚拟成SCSI设备的关键在于IDE Device Driver,在该层对设备进行了虚拟化处理,形成了一条虚拟的SCSI总线,然后再将设备虚拟成了SCSI Device,按照这种思路,我们可以不断的进行设备虚拟和总线层叠扩展。

           从上述驱动框架来看,IDE总线层作用并不是很大,因此,完全可以将IDE总线层抛弃,直接采用如下图所示的驱动框架,这也是目前SATA等驱动常用的驱动模型。


           在上述驱动模型中,ATA Host的枚举过程与第一个模型保持一致,但是ATA Host Driver会直接将ATA Host注册到SCSI Middle Level层,考虑到ATA协议层与SCSI协议层存在差异,因此,通过LibATA驱动作为SCSI Middle LevelATA Host之间的转换层,从而可以很好的将ATA Host直接融入到SCSI的驱动体系中来,可以直接将ATA设备驱成SCSI Device。与第一个模型相比,这个模型的驱动栈变浅了,驱动效率提高了,而且可以无缝的将ATA驱动融入到SCSI驱动体系中。在这个驱动模型中,LibATA驱动无疑是最大的功臣。目前,很多SATA Host驱动以及PATA Host的驱动都采用这种模型。

  • 相关阅读:
    BootStrap 模态框禁用空白处点击关闭
    【云计算】使用nsenter进入Docker容器进行调试
    【架构】Nginx如何设置X-Request-ID请求头,记录请求时间:毫秒?
    【架构】微服务系列文章
    【云计算】OpenStack项目全面介绍
    【云计算】CloudFoundry参考资料
    【云计算】OpenShift容器服务参考
    【Web】Django OAuth invalid_grant error
    【Linux】Shell三类变量的作用域——linux shell “永久环境变量”、“临时环境变量”和"普通变量"之完全解读
    【云计算】OpenStack Horizon DashBoard定制化,完整实现前后台交互
  • 原文地址:https://www.cnblogs.com/leino11121/p/2381899.html
Copyright © 2011-2022 走看看