【问题标题】:How are instructions dispatched to devices in a computer?如何将指令发送到计算机中的设备?
【发布时间】:2011-01-08 02:45:28
【问题描述】:

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

基本上,当计算机开机时,BIOS 会加载 PCI 总线上的所有设备,并使它们在某个预定地址可用。 PCI-express 总线也是如此。

所以每个设备都可以接收命令,因为驱动程序知道在总线地址上的何处寻找它们?

假设如果您想向声卡发送指令,驱动程序告诉 CPU 在适当的总线上广播指令,并且指定地址的正确设备将接收指令,我是否进一步正确并做它的事?

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

【问题讨论】:

  • 不,这是系统编程问题,不是系统管理员问题。

标签: architecture hardware hardware-interface


【解决方案1】:

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

当然,如果您深入了解细节,您会发现它有点复杂,因为其中涉及多种技术,并且理论上每种设备的工作方式都会有所不同。准备好面对 IRQ、DMA、不同的内存映射等......

【讨论】:

    【解决方案2】:

    显卡连接到北桥处理的AGP总线,PCI设备以及ATA设备连接到南桥。一个不错的介绍是here

    【讨论】:

      【解决方案3】:

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

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

      如果你想真正理解这些东西,阅读 Linux 内核是非常有启发性的,尤其是关于 PC 和其他系统的区别。

      【讨论】:

        猜你喜欢
        • 2011-09-23
        • 1970-01-01
        • 2018-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多