sata硬盘暴露出什么样的api?

What kind of api does a sata hard drive expose?

我知道 linux 内核使用驱动程序与硬盘设备通信,并且设备上有固件代码来处理驱动程序的请求。我的问题是:

  1. 固件公开了什么样的功能(即 api)?例如,它是否仅公开内核管理的地址 space,或者 linux 内核中是否有一些代码处理与硬盘驱动器相关的一些物理(即数据布局在 track/sector/platter 等等...)

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

  3. 是否有针对硬盘设备暴露的 api 的标准规范?

I understand that the linux kernel uses a driver to communicate with the hard disk device

所有外围设备都是如此。

there is firmware code on the device to service the driver's requests

现代 HDD(自 IDE 出现以来)具有集成磁盘控制器。
固件”本身不会做任何事情,而且是一个模棱两可的描述。 IE。什么在执行此 "firmware"?

  1. what kind of functionality (i.e. api) does the firmware expose? For example, does it only expose an address space that the kernel manages, or is there some code in the linux kernel that deals with some of the physics related to the hard drive (i.e. data layout on track/sector/platter etc...)

SATA 驱动器使用 ATA Packet Interface, ATAPI

旧的 SMD 和 ST506 驱动器接口使用柱面、磁头和扇区(也称为 CHS)寻址。此类驱动器的磁盘控制器通常在主机端保持类似的接口,因此操作系统有义务了解驱动器的(物理)几何结构。 OSes 将尝试通过将分区与柱面对齐来优化性能,并通过按柱面地址对请求进行排序来最小化 seek/access 时间。

虽然磁盘控制器通常需要 CHS 寻址,但 OS 的较高层将使用顺序逻辑扇区地址。只要驱动器的几何结构已知,逻辑扇区地址到柱面、磁头和扇区地址之间的转换就很简单。

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

所以OS应该只使用逻辑块地址发出读或写块操作,而不用太在意驱动器的几何形状。
例如,不再可能通过 ATA 接口进行低级格式化,并且由于区域位记录,驱动器的几何结构是可变的(主机不知道)。坏扇区管理通常由集成控制器单独控制。 然而,您可能仍然可以在各种 OSes 中找到 CHS 优化的一些残余(例如,驱动器分区与 "cylinder" 对齐)。

  1. Does the kernel schedule the disk's head movement, or is it the firmware?

使用查找操作是可能的,但更可能的是 OS 将 R/W 操作与自动查找或 LBA R/W 操作结合使用。
然而,对于具有大量缓存和区域位记录的 LBA 和现代 HDD,不需要此类寻道操作,而且可能会适得其反。

最终磁盘控制器执行实际查找。

  1. Is there a standard spec for the apis exposed by hard disk devices?

ATA/ATAPI 是已发布的规范(虽然它似乎处于 "working draft" 状态 20 年)。
参见 http://www.t13.org/Documents/UploadedDocuments/docs2013/d2161r5-ATAATAPI_Command_Set_-_3.pdf

ABSTRACT This standard specifies the AT Attachment command set used to communicate between host systems and storage devices. This provides a common command set for systems manufacturers, system integrators, software suppliers, and suppliers of storage devices. The AT Attachment command set includes the PACKET feature set implemented by devices commonly known as ATAPI devices. This standard maintains a high degree of compatibility with the ATA/ATAPI Command Set - 2 (ACS-2).