【发布时间】:2015-01-31 20:25:13
【问题描述】:
想象一个具有一个 SATA 控制器的系统。如果控制器在 IDE 模式下运行,它将显示在设备管理器中,如下所示:
Windows XP:
IDE controller's name
Primary IDE Channel
Secondary IDE Channel
Windows >= Vista:
IDE controller's name
ATA Channel 0
ATA Channel 1
如果控制器在 AHCI 模式下运行,它将在 XP 和 >= Vista 上显示为“SATA AHCI 控制器”。
AHCI 模式下的 SATA 控制器最多支持 32 个设备(32 位掩码表示设备连接)。我认为这只是软件限制,因为每个设备都需要单独的通道,因此不太可能存在这样的系统,其中 SATA 控制器与所有 32 个通道“连接”。但我认为 32 是一个数字,意味着控制器可以处理两个以上的设备,因此具有两个以上的通道。所以,我想问一下SATA控制器在实践中通常有多少通道。 ATA控制器有两个通道,那么是不是说SATA控制器在IDE模式下为了软件兼容有相同的通道数呢?或者它有两个以上的通道,但在 IDE 模式下只有前两个通道可用? (至少在 XP 上,因为“主要”渠道和“次要”渠道大大降低了“第三”渠道的可能性,而“0”渠道、“1”渠道、“2”渠道等情况并非如此)
【问题讨论】:
-
你没有提到你需要知道这个的任何与编程相关的原因。
-
我想弄清楚特定硬盘驱动器使用哪些端口并尝试发出一些 ATA 命令(没有任何 ioctls)。我们可以通过枚举磁盘控制器来获取资源信息。为了正确编写一些代码,我需要知道控制器是否仅限于两个通道,例如 ATA 通道 0 和 ATA 通道 1,或者在 IDE 模式下运行时它可以有更多通道。
-
我看不出在这种情况下实际的物理 SATA 端口数量有什么影响。您如何在没有 ioctls 的情况下发出 ATA 命令?在任何情况下,您似乎都假设只能连接 0 或 1 个驱动器,但实际上 SATA 端口倍增器可用于将多达 15 个驱动器连接到一个物理端口。此外,您似乎在 Windows 中为 SATA 控制器驱动程序假设了标准化的设备层次结构,但事实并非如此。我的 Marvel AHCI 控制器具有“ATA 通道 0”子节点,但我的英特尔 AHCI 控制器将驱动器作为直接子节点。
-
感谢有关 Marvel AHCI 控制器层次结构的信息,因此他们的控制器“报告”除自身之外的两个 ATA 通道,从而为 Windows 提供了更改启用/禁用 DMA 模式等选项的方法。因此,当您选中 DMA 框时,Windows 会将其报告给 Marvel 驱动程序,并且驱动程序让控制器知道它应该为某些特定设备使用什么模式,尽管驱动程序通过 AHCI 定义的接口与控制器一起工作(这意味着只有 DMA 模式),所以它是显然这里发生了一些特定于供应商的非标准内容。
-
另外你能告诉我SATA控制器可以拥有的最大ATA通道数是多少吗?而我特别感兴趣的是SATA端口倍增器的寄存器集是否与SATA硬盘驱动器和cd-rom相同。