PCI卡可以有一些与之关联的内存(映射到内存空间或映射到IO空间)。
现在假设我们有一个PCI以太网卡(它使用内存映射IO),以太网卡将有一些内存作为缓冲区,将数据放入线路中,无论何时以太网驱动程序想要通过线路发送数据,它都可以请求以太网卡这样做。
现在,我假设以太网卡的映射内存的一部分是“命令寄存器”,当您将字符串"send it"写入此命令寄存器时,以太网卡将沿线路发送缓冲区。
现在我的问题是,以太网卡如何知道控制寄存器的内存已被写入?以太网卡是否轮询控制寄存器的内存内容,或者是否有某种机制用于在控制寄存器的内存地址被写入时自动向以太网卡发送信号(所以有点像中断,但方向相反)?
发布于 2017-10-09 23:19:38
PCI卡的内存映射IO的地址范围由PCI设备的基址寄存器(BAR)控制。当CPU访问BAR范围内的存储器地址时,存储器访问被直接路由到设备(如果是写操作,则与数据一起),而不是被路由到存储器。当PCI设备接收到存储器访问时,它立即更新指定的控制寄存器。如果MMIO访问是读操作,则设备使用适当的值响应CPU。
发布于 2017-10-10 02:31:43
MMIO允许您使用加载和存储指令,而不是IN和OUT指令,但设备仍然可以看到命令,而不仅仅是内存访问。
这就是为什么它是MMIO,而不仅仅是内存映射设备内存的原因。
https://stackoverflow.com/questions/46645468
复制相似问题