代码之家  ›  专栏  ›  技术社区  ›  Matt

如何将指令发送到计算机中的设备?

  •  2
  • Matt  · 技术社区  · 14 年前

    这是我对所发生的事情的心理印象,我希望能得到一些纠正、澄清,甚至更多的细节。

    基本上,当计算机通电时,BIOS将加载PCI总线上的所有设备,并使它们在某个预先确定的地址可用。PCI Express总线也会发生同样的情况。

    所以每个设备都可以接收命令,因为驱动程序知道在总线地址上从哪里查找它们?

    如果你想向你的声卡发送指令,驱动程序会告诉CPU在适当的总线上广播指令,而位于指定地址的正确设备会接收指令并执行它的操作,我是否进一步正确?

    这个可视化是否正确? 视频是否因涉及的数据量不同而有所不同?

    3 回复  |  直到 14 年前
        1
  •  2
  •   Andrew McGregor    14 年前

    大多数新的总线系统都有一个探测机制,在这个机制中,系统可以要求所有设备识别它们自己和它们在总线上的位置,然后操作系统可以将这些识别映射到设备驱动程序,然后这些驱动程序可以指定它们需要的其他资源。USB、PCI、PCI Express、AGP、FireWire、SATA、Infiniband和Lightport都能做到这一点。它不一定通过“地址”精确工作,但它可以通过不同的总线控制器模式,甚至通过完全独立的总线。例如,RAM芯片有一个SPI接口来配置它们,而实际的数据在其他一些互连上移动。我在工作中有一个嵌入式系统,它使用SPI来配置对存储操作系统的闪存磁盘的总线访问…那是一个很烦人的开机设备。

    虽然PC中的BIOS实际上设置了所有的PCI设备,但大多数更新的操作系统将立即从头开始重新执行该过程。因此,基于Intel的Macs(和许多服务器)中的EFI固件只设置加载操作系统内核所需的实际内容,而将其余部分留给操作系统。这就是为什么Windows需要bootcamp或HAL磁盘才能在Mac或高端服务器上真正启动。Windows在普通PC上很晚才进行PCI探测,并且需要一段时间的BIOS设置,但是在Mac和一些服务器系统上,它需要加载不同的HAL来立即进行硬件扫描。

    如果你想真正理解这些东西,阅读Linux内核是非常有启发性的,特别是在PC和其他系统之间的区别方面。

        2
  •  1
  •   stacker    14 年前

    图形卡连接到北桥旁的AGP总线,PCI设备和ATA设备连接到南桥。一个不错的介绍是 here

        3
  •  0
  •   Kosi2801    14 年前

    是的,您可以使用这种简化来粗略地想象它是如何工作的。它也同样适用于视频。

    当然,如果你深入了解细节,你会发现它有点复杂,因为涉及到几种技术,而且理论上每个设备的工作原理都有所不同。准备好面对IRQ、DMA、不同的内存映射等。