有没有办法读取CPU缓存内容?架构是ARM。
我正在使一段地址范围无效,然后想确认是否已经无效。 虽然我可以在使地址范围无效时进行读写,并且可以在不使其无效和检查无效性的情况下进行读写, 但我想知道是否可能读取缓存内容。
谢谢!
根据定义,读取缓存内容所需的全部操作就是加载被缓存存储的内存位置。如果缓存正常工作,它会从缓存中提取内容。
然而,如果您尝试读取I-cache的内容,则这取决于架构。此外,您还需要考虑竞争条件。读取缓存内容的指令可能会意外地覆盖缓存内容本身。
如this thread所述,简单地使用CPU可能会导致缓存的内容发生变化。由于(大多数)缓存实现故意完全对CPU透明,因此您将无法直接从在传统CPU上运行的软件中查看缓存的内容。
要做到这样的事情,需要具有特殊指令以控制缓存的缓存感知CPU(我不知道这些是否真实存在),或者您需要安装单独的硬件模块来查看缓存。以下是我提供的两个想法:
用具有附加控制功能并可连接到系统总线以读取数据的缓存控制器替换原始缓存控制器。该控制器位于CPU和缓存之间。
放置一个与原始缓存并行的辅助模块,只能读取缓存。使用特殊中断线(或类似的硬件-而不是软件信号),CPU可以触发将缓存转储到此模块的内存中,然后稍后(通过总线)将其读回来。此控制器不会影响缓存的操作;它只允许您在任何给定时间拍摄快照。