PCI卡可以有一些与之关联的内存(映射到内存空间或映射到IO空间)。
现在说我们有一个PCI以太网卡(它使用内存映射IO),以太网卡将有一些内存作为缓冲区,用于将数据发送到线路中,以及以太网驱动程序何时发送在线下的数据,它可以要求以太网卡这样做。
现在我假设以太网卡的映射内存的一部分是“命令寄存器”,当您向该命令寄存器写入字符串"send it"
时,以太网卡将向下发送缓冲区电线。
现在我的问题是,以太网卡如何知道控制寄存器的内存已被写入?以太网卡是否会轮询控制寄存器的内存内容,或者是否有某种机制用于在写入控制寄存器的内存地址时自动向以太网卡发送信号(这类似于中断,但是在相反的方向)?
答案 0 :(得分:2)
PCI卡的内存映射IO的地址范围由PCI设备的基地址寄存器(BAR)控制。当CPU访问BAR范围内的存储器地址时,存储器访问将直接路由到设备(如果是写操作,则连同数据),而不是路由到存储器。当PCI设备接收到存储器访问时,它立即更新指定的控制寄存器。如果MMIO访问是读操作,则设备以适当的值响应CPU。
答案 1 :(得分:0)
MMIO允许您使用加载和存储指令而不是ClassB
和for (String handle1 : driver1.getWindowHandles()) {
System.out.println(handle1);
driver1.switchTo().window(handle1);
}
指令,但设备仍然可以看到命令,而不仅仅是内存访问。
这就是MM IO 的原因,而不仅仅是内存映射设备内存。