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

标签 architecture hardware hardware-interface

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

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

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

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

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

最佳答案

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

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

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

关于architecture - 指令如何发送到计算机中的设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2115749/

相关文章:

ios - 如何避免 bool 标志?

c++ - 如何编写一个灵活的模块化程序,模块之间具有良好的交互可能性?

java - 从java监控笔记本电脑的电池或电源

通过串行接口(interface)用c++连接到cisco路由器

c - 当USB端口检测到特定麦克风时启动语音识别程序(以避免不小心使用)

performance - 如何使用关系查询/类似 Tinder 的后端系统来扩展地理空间

javascript - AngularJS:理解设计模式

hardware - 需要带有 'c' 编译器的 8051 模拟器吗?

c# - .NET 与西门子 PLC S7 200 的接口(interface)

embedded - SSDP用于设备发现