我理解linux内核使用驱动程序与硬盘设备通信,并且设备上有固件代码来满足驱动程序的请求。我的问题是:
发布于 2016-07-26 00:58:26
我知道linux内核使用驱动程序与硬盘设备进行通信。
所有外围设备都是如此。
设备上有固件代码以满足驱动程序的请求
现代HDD(自从IDE出现以来)有一个集成的磁盘控制器。
“固件”本身是不会做任何事情的,而且是一个模糊的描述。即执行这个“固件”的是什么?
萨塔驱动器使用ATA数据包接口。
旧的SMD和ST506驱动接口使用气缸、磁头和扇区(又称CHS)寻址。这类驱动器的磁盘控制器通常在主机端保持一个类似的接口,因此操作系统有义务知道驱动器(物理)的几何形状。OSes将尝试通过将分区对齐到柱面来优化性能,并通过按柱面地址排序请求来最小化查找/访问时间。
虽然磁盘控制器通常需要CHS寻址,但操作系统的较高层将使用顺序逻辑扇区地址。只要知道驱动几何,逻辑扇区地址到柱面、封头和扇区地址之间的转换就很简单。
磁盘控制器主机端的SCSI和IDE (ATA)接口提供逻辑块寻址(block =扇区),而不是CHS寻址。操作系统不再需要知道驱动器的物理几何学,磁盘控制器能够使用逻辑寻址的抽象来使用区域位记录来实现每个扇区更一致的区域密度。
因此,操作系统只应发出具有逻辑块地址的读或写块操作,而不应过于关注驱动器的几何形状。
例如,通过ATA接口不再可能使用低级别格式,而且由于区域位记录,驱动器的几何形状是可变的(主机也不知道)。坏部门管理通常由集成控制器单独控制。但是,您可能仍然可以在各种OSes中找到CHS优化的一些残留物(例如,与“圆柱体”对齐的驱动器分区)。
这是可能的寻求操作,但更有可能的是,操作系统使用R/W操作与自动寻找或LBA R/W操作。
然而,对于具有较大缓存和区域位记录的LBA和现代HDD,这样的搜索操作是不需要的,而且可能适得其反。
最终,磁盘控制器执行实际的查找。
ATA/ATAPI是一种已发布的规范(尽管它在20年中似乎处于“工作草案”状态)。
请参阅3.pdf
抽象本标准指定用于主机系统和存储设备之间通信的AT附件命令集。这为系统制造商、系统集成商、软件供应商和存储设备供应商提供了通用的命令集。AT附件命令集包括由通常称为ATAPI设备的设备实现的分组特征集。该标准与ATA/ATAPI命令集-2 (ACS-2)保持了高度的兼容性。
https://stackoverflow.com/questions/38578259
复制相似问题