早期的ARM处理器使用虚拟地址(virtual addresses)来提供cache index和cache tag。 VIVT优点 这样做的好处是处理器内核可以使用虚拟地址进行cache look up,而无需进行虚拟地址到物理地址的转换。 VIVT缺点 缺点是当修改系统中虚拟地址到物理地址的映射时必须要clean和invalidate cache,这会对性能产生重大影响。 VIPT 后续的处理器使用不同的cache tag方案,index依然来自虚拟地址,但是tag来自物理地址(VIPT)。 使用物理地址作为tag的方案的优点是虚拟地址到物理地址映射关系的更改不需要再clean和invalidate cache。 这对于那些需要频繁修改页表映射的多任务系统具有显著优势。 使用虚拟地址作为index也有一些硬件优势,这意味着cache硬件在进行cache look up时不需要进行虚拟地址到物理地址的转换,从而提高cache look up的性能。这种cache tag方案称为Virtually Indexed, Physically Tagged (VIPT)。 VIPT缺点 VIPT 方案有一个缺点,对于4 way组相联 32KB cache(cacheline为1Byte),需要地址的比特[12:0]作为index。如果在 MMU 中使用4KB页,则虚拟地址的比特[12]可能不等于物理地址的比特[12]。 因此,如果多个虚拟地址映射指向同一个物理地址,则存在潜在的cache一致性问题。 可以通过对页表相关的操作系统软件增加某些约束来解决这个问题 。 PIPT 通过使用Physically Indexed, Physically Tagged (PIPT) cache可以避免这个问题,但是代价就是cache look up的性能比较低。
原作者:验证哥布林
|