ATA 硬盘简介¶
导读¶
ATA / IDE(Advanced Technology Attachment / Integrated Drive Electronics)是一种计算机总线接口,用于连接存储设备,如硬盘驱动器和光盘驱动器。一般说来,ATA 是一个控制器技术,而 IDE 是一个匹配它的磁盘驱动器技术;但随着时间的推移,这两个术语已经被广泛地交替使用。
ATA 接口经历了多个版本的发展,包括 ATA、ATAPI(用于附加设备)以及更现代的 PATA(Parallel ATA)和 SATA(Serial ATA)。ATA 接口的设计旨在提供高速数据传输,同时保持与旧设备的兼容性。
常见的 ATA 设备¶
由上介绍,ATA 硬盘使用 IDE 接口,分为 PATA 和 SATA 两种类型。
- PATA 硬盘(Parallel ATA):即并行 ATA 硬盘接口规范,有着非常悠久的迭代历史,但已经不常见。
- SATA 硬盘(Serial ATA):即串行 ATA 硬盘接口规范,为常见类型,如今我们常说的外存设备 HDD 或 SSD 多数为 SATA 接口。
PATA 之所以被 SATA 取代,其中一个重要原因是 SATA 接口的传输速度更快。到目前为止,ATA-7 是 ATA 接口的最后一个版本,也叫 ATA133 。 ATA133 最大支持 133 MB/s 数据传输速度。但 SATA 接口的第一代就已经达到了 150 MB/s 的传输速度,第二代则达到了 300 MB/s,第三代则达到了 600 MB/s。从数据上可以直观发现,SATA 硬盘的最大传输速度远远超过了 PATA 硬盘。
SATA 与 PCIE
尽管 SATA 接口相较 ATA 接口有着明显速度优势,但其已经逐渐被 PCIE (Peripheral Component Interconnect Express) 接口所取代。
PCIE 接口是一种高速串行接口,它的速度远远超过了 SATA 接口。目前顶级的 SSD 硬盘大多使用 PCIE 4.0 x 4 接口,其传输速度可达 7000 MB/s,是 SATA 接口的数倍。
为什么 PATA 接口会比 SATA 接口慢呢?更进一步,为什么现在流行的高速接口都是串行接口呢?直观上感觉,相同情况下 ATA 的多通道应该比 SATA 的单通道应该更快才对。这里我们需要了解一些比特数据传输与速率限制的知识。相较 PATA 的多通道,SATA 的单数据通道速度频率限制:
- 由于多通道并行,PATA 必须在数据线中一次传输 16 个信号,如果信号没有及时到达,就会产生错误传输结果。因此,比特流传输的速度必须减缓以纠正错误。
- 而 SATA 一次只传输一个比特的数据,此时比特流的传递速度要快得多。
因此,SATA 传输线的传输速度比 PATA 要快了近 30 倍。此外,SATA 另一个进步在于它的数据连线,它的体积更小,散热也更好,与硬盘的连接相当方便。与 PATA 相比,SATA 的功耗更低,同时配备的 CRC 技术让数据传输也更为安全。
ATA 的 PIO 模式¶
本实验将使用 ATA 设备的 PIO 模式来完成磁盘读写操作。教程已在 串口输出简介 中介绍了 PIO 基本概念,本章将不再赘述,而是介绍 ATA 设备的 PIO 模式。
PIO (Programmed Input/Output) 是过 CPU 执行 I/O 端口指令来进行数据的读写的数据交换模式,是 ATA 设备数据传输的一种方式。PIO 模式通过 CPU 的 I/O 端口总线进行数据传输,而不是通过内存。
根据 ATA 规范,所有符合 ATA 标准的驱动器都必须支持 PIO 模式作为默认的数据传输机制。然而,PIO 模式在传输数据时会占用大量 CPU 时间,进而导致在多任务模式下其他进程无法获得 CPU 时间。尽管如此,在计算机启动初期,由于没有其他进程运行,PIO 模式是一个简单且有效的接口,可以用于启动期间支持系统完成初始化。
从硬件视角来说,在 PIO 模式下 ATA 的控制芯片将 CPU 的 I/O 总线直接接入到 IDE 接口,使 CPU 直接控制数据传输,不涉及 DMA(直接内存访问)。这意味着 CPU 必须积极参与每个数据字节的读写过程,这也是为什么 PIO 模式会占用大量 CPU 资源的直接原因。PIO 模式下的 ATA 设备硬件工作原理涉及多个方面,包括数据传输机制、主从驱动器配置、总线操作、命令发送与状态读取、以及错误处理等。以下是对这些方面的深入介绍:
-
主从驱动器配置
ATA 接口支持在一个总线上连接两个设备,分别称为主设备和从设备。通过单一的数据线选择,可以控制这两个设备。在 PIO 模式下,主从配置允许操作系统通过设置特定的 I/O 端口位来选择激活哪个设备。
-
总线操作
ATA 设备使用 16 位或更宽的并行数据总线进行数据传输。除了数据总线,还有多个控制端口用于发送命令和读取状态信息。例如,命令端口用于发送读写命令,而状态端口则用于读取设备的状态,如忙碌、就绪或错误状态。
-
命令发送与状态读取
在 PIO 模式下,发送命令到 ATA 设备是通过写入命令端口来完成的。命令可以是读取、写入数据或者初始化设备等。发送命令后,系统需要等待设备准备好进行数据传输。这通常通过轮询状态端口来实现,直到设备设置为就绪状态。
-
错误处理
在 PIO 模式下,如果发生错误,ATA 设备会通过状态端口报告错误。错误寄存器记录了最后一条执行命令的错误状态。例如,如果发生不可纠正的数据错误,设备会设置错误寄存器中的相应位。操作系统需要检查这些错误位,并根据需要采取相应的错误处理措施。
-
坏扇区处理
ATA 设备可能会遇到坏扇区的问题,这些是无法读取或写入的扇区。操作系统需要跟踪这些坏扇区,并在尝试访问它们时采取措施,例如跳过它们或尝试重新映射。
-
寻址模式
ATA 设备支持多种寻址模式,包括 28 位 LBA、48 位 LBA 和已过时的 CHS 模式。在 PIO 模式下,操作系统需要根据设备的能力和需求选择合适的寻址模式。
-
软件复位
如果 ATA 设备遇到严重错误,操作系统可以通过执行软件复位命令来重置设备。这通常通过设置控制寄存器中的特定位来完成。
-
中断请求(IRQ)
虽然 PIO 模式主要依赖于轮询,但 ATA 设备也可以通过 IRQ 通知操作系统数据已经准备好传输。在多任务环境下, IRQ 可以减少 CPU 的轮询时间,提高效率。
以上即 ATA 设备的 PIO 模式的基本介绍。总的来说,PIO 模式下的 ATA 设备硬件工作原理是一个涉及多个组件和步骤的复杂过程,它要求操作系统精确地控制数据传输、设备选择、命令发送、状态读取和错误处理等操作。随着技术的发展,更高效的 DMA 模式已经成为主流,但在某些情况下,如系统启动时,PIO 模式仍然发挥着重要作用。
最后,ATA - Wikipedia 提供了关于 ATA PIO 模式的全面而深入的技术资源,而实验所需的 28 bit 下 LBA 方式寻址规范将在 任务描述文档 中进行详细描述。