天天看点

3.3.3 PCI设备对可Cache的存储器空间进行DMA读写

pci设备向“可cache的存储器空间”进行读操作的过程相对简单。对于x86处理器或者powerpc处理器,如果访问的数据在cache中命中,cpu会通知fsb总线,pci设备所访问的数据在cache中。

如果cache行的状态为m时,response agent在response phase阶段,要求snoop agents将cache中数据回写到存储器,并将cache行状态更改为e。snoop agents在data phase,将cache中数据回写给存储器控制器,同时为host主桥提供数据。snoop agents也可以直接将数据提供给host主桥,不需要进行数据回写过程,也不更改cache行状态,但是采用这种方法会提高cache memory系统的设计难度。

如果pci设备访问的数据没有在cache中命中,snoop agents会通知fsb总线,pci设备所访问的数据不在cache中,此时存储器控制器(response agent)将在data phase向host主桥提供数据。

pci设备向“可cache的”存储器区域进行写操作,无论对于powerpc处理器还是x86处理器,都较为复杂。当host主桥通过fsb将数据发送给存储器控制器时,在这个系统总线上的所有cpu都需要对这个pci写操作进行监听,并根据监听结果,合理地改动cache行状态,并将数据写入存储器。

下文以图3?7所示的smp处理器系统为例,说明pci设备对“可cache的存储器空间”进行dma写的实现过程。

3.3.3 PCI设备对可Cache的存储器空间进行DMA读写

在图3?7所示的处理器系统中,存在4个cpu,这4个cpu通过一条fsb连接在一起,而cpu之间使用mesi协议进行cache一致性处理,而host主桥和存储器控制器与fsb直接相连。host主桥向存储器控制器传递数据时,需要处理cache的一致性。

在这个处理器系统中,当pci设备,如pci设备01,进行dma写操作时,数据将首先到达host主桥,而host主桥将首先接管该pci设备数据访问并将其转换为fsb总线事务,并在request phase中,提供本次fsb总线事务的地址。cpu将在snoop phase对这个地址进行监听,判断当前地址在cache中的命中情况。

当host主桥访问的地址不在cache中命中时,此时在处理器系统中,所有cpu都没有驱动hit#和hitm#信号,hit#和hitm#信号都为1,表示host主桥访问的地址没有在cpu的cache中命中,host主桥可以简单地将数据写入存储器。当host主桥访问的存储器地址在cache中命中时,cache行的状态可以为s、e或者为m,此时处理器系统的处理过程相对较为复杂,下一节将专门讨论这种情况。