arm linux中的MMU页表中的缓存属性

时间:2015-01-12 18:08:12

标签: linux arm mmu

我想知道os如何在Arm v7和armv8中的MMU页面表中的页面的写回和写入属性之间做出决定。 感谢

1 个答案:

答案 0 :(得分:1)

首先,您可能想了解每个是什么。 Ref1 Ref2

  • 直写 - 立即写入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。

通常, WRITEBACK 非常有价值,因为大多数系统都有SDRAM,这为一次写入多个条目提供了额外的好处。通常代码执行读 - 修改 - 写循环;也许在同一个内存或结构上多次。典型的高速缓存线与SDRAM突发长度(非重合)很好地对应。

在某些情况下,例如带有DMA的LCD,您可能希望使用 WRITETHROUGH ,因此通常这些选项由内核分配器选择。它将为非架构API选择正确的属性。

用户空间总是需要并获得 WRITEBACK 内存。某些mmap LCD帧缓冲区可能 WRITETHROUGH ,但它更可能是未缓存的。

  

我想知道os [linux]如何在Arm v7和armv8中的MMU页面表中的页面的写回和写入属性之间做出决定。

决定取决于内存的使用。最常见的是, WRITEBACK 模式将用于用户空间,除了可能会暴露驱动程序内存的一些罕见情况。即,对于仅供系统中的CPU使用的内存, WRITEBACK 始终是最佳选择。只有当有其他东西看着内存(如LCD DMA)时, WRITETHROUGH 才会更好。对于LCD DMA,您希望立即在屏幕上显示您写入内存的内容。