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

arm linux中MMU页表中的缓存属性,linux,arm,mmu,Linux,Arm,Mmu,我想知道操作系统如何决定ARMV7和armv8中MMU页面表中页面的回写和直写属性。 谢谢首先,您可能想了解每一个是什么 直写-数据立即写入RAM 回写-在驱逐上写入的数据 进行直写缓存(在硬件中)比进行回写更容易。由于这个原因,一些较旧的ARM CPU可能会出现问题。ARMv4/5已经完成。到ARMv7/8出现时,写回的逻辑与其他逻辑相比非常小,因此CPU/MMU同时支持这两种逻辑 还有一些内核命令行选项,如中的cachepolicy、nocache和nowb;这些仅适用于旧的ARM CP

我想知道操作系统如何决定ARMV7和armv8中MMU页面表中页面的回写和直写属性。
谢谢

首先,您可能想了解每一个是什么

  • 直写-数据立即写入RAM
  • 回写-在驱逐上写入的数据
进行直写缓存(在硬件中)比进行回写更容易。由于这个原因,一些较旧的ARM CPU可能会出现问题。ARMv4/5已经完成。到ARMv7/8出现时,写回的逻辑与其他逻辑相比非常小,因此CPU/MMU同时支持这两种逻辑

还有一些内核命令行选项,如中的cachepolicynocachenowb;这些仅适用于旧的ARM CPU,并且主要用于旧的ARM CPU,但是您仍然可以将它们用于ARMv7/8

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

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

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

我想知道操作系统[linux]如何决定ARMV7和armv8中MMU页面表中页面的回写和直写属性


决定取决于内存的使用。最常见的情况是在用户空间中使用写回模式,但少数情况下可能会暴露驱动程序内存。也就是说,对于系统中仅由CPU使用的内存,写回总是最好的。只有当内存中有其他东西(如LCD DMA)时,写入路径才会更好。对于LCD DMA,您希望写入内存的内容立即显示在屏幕上。

奇怪的是,写入SDRAM通常比读取(对于CPU)快。如果整个缓存都是直写的,那么缓存线永远不会变脏,缓存也会简单得多。所以在某个时候,人们确实制造了只支持一种模式的ARM硬件。无论如何,我都不是ARM64的专家。然而,这个版本似乎遵循普通的手臂版本;您的ARMv8可以在两种模式下使用。