- 论坛徽章:
- 7
|
回复 14# duanius
可写的cache一般就2种write-through-WT和write-back-WB
但是不管哪种都保持对本处理器角度看和物理内存是一致的。即当你读写数据时处理器指令感受不到cache存在。这也是一般cache实现的原则
。
然后在就上面说的逻辑cache 物理cache和我可以误解出来的"虚拟cache"-书已经归还无法查证--以及mmu 物理寻址来次大分类。
先看ARMV5手册B4.6最后一句:
Caches can be implemented with virtual or physical addressing, including indexing, provided these behaviors are met.
我对这句话的理解是:处理器可以先直接用虚拟地址寻址cache-估计这个就是你
说的逻辑cache.
也可以通过mmu得到物理地址再在cache上寻址。这个就是统一的物理cache的说法。
但是对于第一个,cache关联的虚拟内存还是物理内存?我想arm是物理内存。
即当WB-cache想把数据写入物理内存的时候,他知道自己对的哪块物理内存,而不是再通过mmu去找一次物理内存--而这个正是我之前所理解的
"虚拟cache",我想应该没有这样实现的,因为效率很低,各个cache块之间如果对的同一物理内存要同步很麻烦,没有自动同步人工同步也很麻
烦。而且过分依赖MMU和页表。一般不实现。
对于刷tlb和cache。假设是物理cache,我们切换进程有必要去刷新cache吗?我觉得有没有MMU都不必要。而对于逻辑cache,因为直接通过虚拟
地址去查找cache.换了tlb,这个cache大致也失效了,你可能在cache中由本进程的虚拟地址找的是上一个进程的物理地址的值。所以先写回
cache很正常。
再回到正题上,对于如上的逻辑cache,2个虚拟地址是不是能同时对应2个cache数据块-而这2个数据块对应同一个物理内存块?或者根本只有
一个cache内存块?
手册B1.3开头。v6之前一个物理地址只能对应一个虚拟地址。也就是说如果是2个虚拟地址,应该就是直接卸掉第一个。用第2个.
v6之后应该也是一个数据块。---这个真没看出来。待验证。 |
|