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

Mik*_*e G 3 linux driver firmware linux-device-driver linux-kernel

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

  1. 固件暴露了什么样的功能(即api)?例如,它是否只暴露内核管理的地址空间,或者是linux内核中是否有一些代码处理与硬盘驱动器相关的一些物理(即轨道/扇区/盘片上的数据布局等... )

  2. 内核是否安排磁盘的磁头移动,还是固件?

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

saw*_*ust 6

据我所知,linux内核使用驱动程序与硬盘设备进行通信

所有外围设备都是如此.

设备上有固件代码来处理驱动程序的请求

现代HDD(自IDE出现以来)具有集成磁盘控制器.
" 固件 "本身不会做任何事情,并且是一个含糊不清的描述.IE正在执行这个"固件"

  1. 固件暴露了什么样的功能(即api)?例如,它是否只暴露内核管理的地址空间,或者是linux内核中是否有一些代码处理与硬盘驱动器相关的一些物理(即轨道/扇区/盘片上的数据布局等... )

SATA驱动器使用ATA数据包接口ATAPI.

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

尽管磁盘控制器通常需要CHS寻址,但OS的较高层将使用顺序逻辑扇区地址.只要知道驱动器几何形状,逻辑扇区地址与柱面,磁头和扇区地址之间的转换就很简单.

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

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

  1. 内核是否安排磁盘的磁头移动,还是固件?

通过搜索操作可以实现,但OS更可能使用自动搜索或LBA R/W操作的R/W操作.
然而,对于具有相当大的高速缓存和区域位记录的LBA和现代HDD,不需要这样的搜索操作并且可能适得其反.

最终磁盘控制器执行实际搜索.

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

ATA/ATAPI是一个已发布的规范(虽然它似乎处于"工作草案"状态20年).
http://www.t13.org/Documents/UploadedDocuments/docs2013/d2161r5-ATAATAPI_Command_Set_-_3.pdf

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