我想知道操作系统是如何决定arm v7和armv8中mmu page表中页面的write-back和write-through属性的。
谢谢
最佳答案
首先你可能想知道每一个是什么。Ref1Ref2
直写-立即写入RAM的数据。
写回-收回时写入的数据。
直接写缓存(在硬件中)比回写更容易。因此,一些较老的ARM CPU可能有a hard coded write through only cache。ARMV4/5具有this as an option。到armv7/8出现时,与其他逻辑相比,写回的逻辑非常小,因此cpu/mmu同时支持这两种逻辑。
mmu.c中还有一些内核命令行选项,如cachepolicy、nocache和nowb;这些选项仅适用于early boot,主要用于较旧的arm cpu,但您仍然可以将它们用于armv7/8。
一般来说,写回是非常有价值的,因为大多数系统都有sdram,这样可以在同一时间写入多个条目。代码通常执行读-修改-写循环;可能在同一内存或结构上执行多次。典型的高速缓存线与sdram突发长度(非一致)很好地对应。
在某些情况下,例如带有dma的lcd,您可能希望使用writethrough,因此通常这些选项由内核分配器选择。它将选择非体系结构api的正确属性。
用户空间总是需要并获得写回内存。可能有些mmap
LCD帧缓冲区被写得很粗糙,但更有可能它被取消缓存。
我想知道os[linux]是如何决定arm v7和armv8中mmu page表中页面的write-back和write-through属性的。
这个决定取决于记忆的使用。最常见的是写回模式将在用户空间中使用,除了一些可能会公开驱动程序内存的罕见实例。也就是说,对于系统中只有CPU使用的内存,写回总是最好的。只有当内存中有其他东西(比如lcd dma)时,writethrough才会更好。对于lcd-dma,您希望写入内存的内容立即显示在屏幕上。
关于linux - 在ARM Linux中的MMU页表中缓存属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27908172/