据说在ARM11中,缓存是物理处理的,解决了许多缓存混叠问题,并减少了上下文切换开销
如何理解物理地址为?它如何帮助解决缓存混叠问题和减少上下文切换开销?
发布于 2012-07-05 15:19:28
有三种常见的缓存类型。
还有
PIPT通常用于第二层和更深层次的缓存,因为物理地址必须在此时知道,但是armv7也引入了PIPT L1 DCaches。PIVT并不是很实用,所以在现实世界中也没有使用。
不同之处在于缓存行如何连接到底层内存。
虚拟索引意味着纯缓存行查找是使用虚拟地址完成的,因此可以在任何虚拟地址到物理地址转换之前完成。然后,标记将决定缓存行是否真正映射到基础内存,还是包含其他内存位置的数据,这些数据恰好映射到同一缓存行。
如果标记是使用虚拟地址完成的,那么两个碰巧使用相同虚拟地址的进程可能会绊倒对方,因为一个进程可能访问另一个进程放入缓存中的数据。因此,对于VIVT缓存的cpu,内核必须在上下文开关上刷新整个缓存。因此,新的进程不会意外地访问不正确的数据,这意味着一般来说,在VIVT缓存的CPU上,上下文切换是一项非常昂贵的操作。在ARMv5和上面支持所谓的快速上下文切换扩展,它用标记修改虚拟地址。但这涉及到很多限制。
相反,VIPT仍将使用虚拟地址来查找缓存行,但随后将根据物理地址检查标记,因此MMU查找可以与缓存行查找并行进行。
别名是VIVT缓存的另一个大问题。因为两个虚拟地址可能指向相同的物理内存位置(这可能发生在用户和内核空间之间共享内存时)。因此,您可以使用不同的数据在缓存中有两个位置,这些数据很难正确地管理(显式地按正确的顺序刷新和使缓存无效)。
https://stackoverflow.com/questions/11345290
复制相似问题