在软件层面,如何与 PCIe 卡通信?
(我意识到只有操作系统才需要关心这些细节,但我太好奇了……)
我可以想象两种可能的方式可以工作:
卡插入总线。要向卡发送消息,您必须在软件中明确构建消息包,告诉总线控制器将其放在何处,然后总线控制器将使用 DMA 读取消息包并将其发送到总线上。消息发送完成后,总线控制器会触发中断。总线控制器使用 DMA 将传入消息存储到主内存中,并在接收完消息后触发中断。现在 CPU 必须在软件中解析消息,以确定是谁发送的以及消息的内容。
卡插入总线。每张卡直接映射到 CPU 的地址空间。总线控制器生成必要的消息包(无论是硬件还是固件),使卡上内存看起来就像任何其他内存一样。CPU 只需访问内存地址即可。
问题是,这些模型中的哪一个描述了 PCIe 如何实际上作品?