我知道linux内核使用驱动程序与硬盘设备通信,并且设备上有固件代码来为驱动程序的请求提供服务。我的问题是:
固件暴露了哪种功能(即api)?例如,它是否只公开内核管理的地址空间,或者是linux内核中是否有一些代码处理与硬盘驱动器相关的一些物理(即轨道/扇区/盘片上的数据布局等... )
内核是否安排了磁盘的磁头移动,还是固件?
硬盘设备暴露的apis是否有标准规范?
答案 0 :(得分:6)
据我所知,linux内核使用驱动程序与硬盘设备进行通信
所有外围设备都是如此。
设备上有固件代码来处理驱动程序的请求
现代硬盘驱动器(自IDE出现以来)具有集成磁盘控制器 “固件”本身不会做任何事情,并且是一个含糊不清的描述。 I.E.是什么执行这个“固件”?
- 固件暴露了哪种功能(即api)?例如,它是否只公开内核管理的地址空间,或者是linux内核中是否有一些代码处理与硬盘驱动器相关的一些物理(即轨道/扇区/盘片上的数据布局等... )
醇>
SATA驱动器使用ATA Packet Interface, ATAPI。
旧的SMD和ST506驱动器接口使用气缸,磁头和扇区(也称为CHS)寻址。这种驱动器的磁盘控制器通常在主机端保持类似的接口,因此操作系统有义务了解驱动器(物理)几何结构。操作系统会尝试通过将分区与柱面对齐来优化性能,并通过按柱面地址排序请求来最小化搜索/访问时间。
虽然磁盘控制器通常需要CHS寻址,但OS的较高层将使用顺序逻辑扇区地址。逻辑扇区地址与柱面,磁头和磁带之间的转换。只要知道驱动器几何形状,扇区地址就很简单。
磁盘控制器主机端的SCSI和IDE(ATA)接口提供逻辑块寻址(块=扇区)而不是CHS寻址。操作系统不再需要了解驱动器的物理几何结构,并且磁盘控制器能够使用逻辑寻址的抽象来使用区域位记录实现每个扇区更加一致的面密度。
因此操作系统应该只发出一个带有逻辑块地址的读或写块操作,而不是太关心驱动器的几何形状。
例如,通过ATA接口不再可能使用低级格式,并且由于区域位记录,驱动器的几何结构是可变的(并且主机未知)。坏扇区管理通常由集成控制器单独控制。
但是,您可能仍然可以在各种操作系统中找到一些CHS优化的残余物(例如,驱动器分区与“圆柱体”对齐)。
- 内核是否安排磁盘的磁头移动,还是固件?
醇>
通过搜索操作可以实现,但操作系统更可能使用自动搜索或LBA R / W操作的R / W操作。
然而,对于具有相当大的高速缓存和区域位记录的LBA和现代HDD,不需要这样的搜索操作并且可能适得其反。
最终磁盘控制器执行实际搜索。
- 硬盘设备暴露的apis是否有标准规范?
醇>
ATA / ATAPI是已发布的规范(虽然它似乎处于“工作草案”状态20年)。
见http://www.t13.org/Documents/UploadedDocuments/docs2013/d2161r5-ATAATAPI_Command_Set_-_3.pdf
<强>摘要强> 此标准指定用于在主机系统之间进行通信的AT Attachment命令集 存储设备。这为系统制造商,系统集成商,软件提供了通用命令集 供应商和存储设备供应商。 AT附件命令集包括PACKET功能集 由通常称为ATAPI设备的设备实现。该标准保持高度 兼容ATA / ATAPI命令集-2(ACS-2)。