阅读ARM arch时。 REF。手册v7,我发现了两个概念;一致性点(PoC)和统一点(PoU)。
对于PoC,看起来所有代理(即CPU核心)都可以看到相同的内存副本。
对于PoU,看起来所有代理(在本例中为CPU内核和MMU)都可以看到相同的内存副本。
我有几个跟进问题:
我的理解是否正确?
如果是这样,如果我发出DCCMVAC(数据缓存清理MVA到PoC),将MVA提供给0x40000000,(并且假设PoC恰好是0x70000000),
VA的0x40000000和0x70000000之间的所有缓存条目都被清除了吗?
然后,如果我发出带有MVA 0x0的DCCMVAC,那么所有数据缓存条目都会被清除吗?
PoU听起来像MMU本身有自己的数据缓存(不是TLB)用于主内存中的页表行走。这是对的吗?
答案 0 :(得分:1)
根据ARM培训材料:
处理器的PoU(统一点)是点(硬件内的物理位置),其中指令和数据高速缓存以及处理器的转换表行走保证看到存储器位置的相同副本。例如,统一的2级缓存将是具有Harvard 1级缓存和TLB(缓存页表条目)的系统中的统一点。如果没有外部缓存,主内存将成为统一点。
PoC([系统]一致性点)是可以访问内存的所有块(例如,CPU,DSP或DMA引擎)保证特定地址可以查看相同副本的点。记忆位置。通常,这将是主要的外部系统内存。
答案 1 :(得分:0)
有一点是,在ARM V8处理器的实现下,Iside可以窥探Dside,例如,如果有一个Icache未命中,它将检查Dcache,因此您可以将PoU视为L1缓存的级别。而其他ARMv8处理器可能没有这种行为。
回到原来的问题: 2)DCCMVAC 0x40000000,它将对此地址(主要是一个缓存线)的PoC进行缓存清理 PoC由SoC实现定义,而不是由地址定义。
3)考虑到Q2,DCCMVAC 0x0仅适用于一个缓存行。 如果要清理整个缓存并使其无效,则需要使用set / way来遍历整个缓存。
4)PoU与MMU无关。 MMU硬件块拥有一些用于保存TLB条目的缓冲区,这是一种常见的做法,就像pagetable一样,它是由软件构建的,就像在内存中一样,通常它被定义为普通的内存类型,所以它可能是在CPU指令设置期间在缓存中,或者通过MMU硬件步进单元行走。