2016-07-25 46 views
1

我知道linux内核使用驱动程序与硬盘设备进行通信,并且设备上有固件代码来为驱动程序的请求提供服务。我的问题是:sata硬盘驱动器暴露的是什么类型的api?

  1. 什么样的功能(即api)固件暴露?例如,它是否仅暴露内核管理的地址空间,还是在linux内核中存在一些处理某些与硬盘相关的物理内容的代码(即轨道/扇区/盘片上的数据布局等)。 )

  2. 内核调度磁盘的磁头移动,还是固件?

  3. 是否有硬盘设备暴露的apis标准规格?

回答

4

据我所知,Linux内核采用了驱动程序与硬盘设备

这对所有外设真正的沟通。

有设备上的固件代码以服务驾驶员的请求

现代硬盘(IDE以来的问世),具有集成的磁盘控制器。
固件”本身不会做任何事情,并且是一个含糊的描述。 I.E.什么是执行此“固件”

  1. 固件显示哪种功能(即api)?例如,它是否仅暴露内核管理的地址空间,还是在linux内核中存在一些处理某些与硬盘相关的物理内容的代码(即轨道/扇区/盘片上的数据布局等)。 )

SATA驱动器使用ATA Packet Interface, ATAPI

旧的SMD和ST506驱动器接口使用圆柱体,头部和扇区(又名CHS)寻址。这种驱动器的磁盘控制器通常在主机端保持类似的接口,因此操作系统有义务知道驱动器(物理)几何体。操作系统会尝试通过将分区对齐到柱面来优化性能,并通过按柱面地址对请求进行排序来最小化查找/访问时间。

虽然磁盘控制器通常需要CHS寻址,但操作系统的高层将使用顺序的逻辑扇区地址。只要驱动器几何形状已知,逻辑扇区地址到圆柱体,头部,&扇区地址之间的转换就很简单。

磁盘控制器主机端的SCSI和IDE(ATA)接口提供逻辑块寻址(块=扇区)而不是CHS寻址。操作系统不再需要了解驱动器的物理几何结构,并且磁盘控制器能够使用逻辑寻址的抽象来使用区位记录来实现每个扇区更一致的面密度。

因此,操作系统应该只发出一个逻辑块地址的读或写块操作,而不要过于关心驱动器的几何形状。
例如,通过ATA接口不再可以使用低级格式,并且由于区位记录,驱动器的几何体是可变的(主机未知)。坏扇区管理通常由集成控制器单独控制。 但是,您仍然可以在各种操作系统中找到一些CHS优化的残留(例如,驱动器分区与“柱面”对齐)。

  • 是否内核安排磁盘的磁头移动,或者是它的固件?
  • 这是可能的搜索操作,但更可能的操作系统使用R/W操作与自动搜索或LBA R/W操作。
    但是,对于LBA和具有大容量缓存和区位记录的现代HDD而言,这种查找操作不是必需的,并且可能适得其反。

    最终磁盘控制器执行实际寻道。

    1. 是否有硬盘设备暴露的apis的标准规格?

    ATA/ATAPI是公开发布的说明(虽然它似乎是一个“工作草案”状态20年)。
    参见http://www.t13.org/Documents/UploadedDocuments/docs2013/d2161r5-ATAATAPI_Command_Set_-_3.pdf

    摘要 该标准规定了用于主机系统和 存储设备之间进行通信的AT附件命令集。这为系统制造商,系统集成商,软件供应商和存储设备供应商提供了一套通用的命令组。 AT附件命令集包括由通常称为ATAPI设备的设备实现的PACKET功能集 。该标准保持与ATA/ATAPI命令集-2(ACS-2)的高度兼容性。

    +0

    感谢您的全面回答。是否可以查询硬盘驱动器的位置?我想知道如何自动寻找移动头 –

    +0

    *“是否有可能查询硬盘的头部的位置?” - 对于典型的控制器,没有。此外,由于真实的驱动几何形状也是未知的,所以气缸数量效用不大。 *“我想知道自动寻找如何移动头部”* - 我正在考虑使用SMD控制器(为此我执行了固件)。 WD控制器芯片和ATA接口不使用该术语:读/写命令将始终执行任何必要的查找。仅供参考,较新的ATA规格(如上所述)已弃用“seek”命令并使用CHS寻址;两者都比较旧(例如1995年)规格。 – sawdust