1

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

4

1 回答 1

1

首先,您可能想了解每个是什么。参考 1 参考 2

  • 直写- 数据立即写入 RAM。
  • 写回-逐出时写入的数据。

通过缓存(在硬件中)进行写入比回写更容易。出于这个原因,一些较旧的 ARM CPU 可能仅通过缓存进行硬编码写入。ARMv4/5 有这个选项。到 ARMv7/8 出现时,回写逻辑与其他逻辑相比非常小,因此 CPU/MMU 两者都支持。

mmu.c中还有一些内核命令行选项,如cachepolicynocachenowb;这些仅适用于早期启动,主要用于较旧的 ARM CPU,但您仍然可以将它们用于 ARMv7/8。

通常,WRITEBACK非常有价值,因为大多数系统都有 SDRAM,它可以为一次写入多个条目提供奖励。代码经常执行读-修改-写循环;可能在同一个内存或结构上多次。一个典型的高速缓存行很好地对应于一个 SDRAM 突发长度(并非巧合)。

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

用户空间总是想要并获得WRITEBACK内存。某些mmapLCD 帧缓冲区可能是WRITETHROUGH,但更有可能是未缓存。

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

该决定取决于内存的使用。大多数情况下, WRITEBACK模式将在用户空间中使用,除了一些极少数情况下可能会暴露驱动程序内存。即,对于仅由系统中的 CPU 使用的内存,WRITEBACK总是最好的。只有当内存中有其他东西(如 LCD DMA)时,WRITETHROUGH才会更好。对于 LCD DMA,您希望写入内存的内容立即显示在屏幕上。

于 2015-01-12T20:40:09.490 回答