当我在Cortex-A9 MPCore中调试MMU时,总是看到域访问控制寄存器,但是域是什么意思?最多16个域?
任何人都可以给我一个链接来解释这个吗?

最佳答案

TL; DR DACR 不仅减少了上下文切换代码路径,而且还可以在上下文切换发生后加快执行速度。

有几个链接说明了域访问控制寄存器或 DACR 的详细信息。例如ARM's Memory access permissions and domains。但是,此页面和许多其他页面并未解释为什么您可能需要此功能;特别是供嵌入式应用程序使用的人们使用。

先前的ARM功能(ARM体系结构V5)是PID。使用此功能的原因与 DACR 和域相同。 MMU的作用是什么?

  • 特权分离-或为某些实体(任务,线程等)提供对内存的访问权限,而其他权限(只读)或无访问权限。
  • 内存重新映射-虚拟到物理的转换使稀疏/分离的内存变得连续。
  • 分页-故障处理程序可以在访问时通过特权较低的代码交换内存。
  • 访问行为-MMU可以指定内存是否可缓存,读/写,是否应该缓冲等。

  • DACR (和PID)仅与第一个(特权分离)有关。在上下文切换中,操作系统必须管理这种分离。对于大多数MMU(历史上在ARM上),只有两个特权:用户特权和 super 特权。为了容纳多个任务, super MMU代码必须为alter the MMU table。这很复杂,因为ARM具有TLB和缓存,这两者都有虚拟地址并取决于MMU表。

    DACR (和PID)允许MMU映射通过一次寄存器写入来更改。此外,TLB和缓存还具有域信息(以及PID的修改地址)。这意味着不需要在上下文切换中刷新(并重新填充)这些条目。这些域对PID有利,因为可以存在多个访问配置文件。例如,在切换主任务/线程二进制文件时,共享库代码可以在上下文切换器上保持可访问性。

    DACR 与更新MMU表的工作进行比较。
  • 至少更改L1页表以映射正确的配置文件。
  • 清除/使L1表和页面表更新中的其他表无效(请参见下文)。
  • 使TLB条目无效(为简单起见,很可能是整件事)。
  • 使MMU表中的缓存条目无效;可能整个事情又发生了。

  • 这与更改单个寄存器相对。此外,您可能会使整个缓存和TLB失效。使用 DACR 和简短的上下文切换,代码/数据可以保留在TLB的高速缓存和MMU页表条目中。例如,具有支票电子邮件任务和电影播放器​​的系统。

    音频/视频的解码需要占用大量CPU和内存。有时,电子邮件客户端会轮询网络服务器以获取信息。通常没有任何东西。在此短暂过渡期间,可能只需要一小部分(1-4k)支票电子邮件代码;一个TLB条目。缓存通常为32k +,因此许多音频/视频缓存和TLB条目可以保持有效。

    因此, DACR 不仅减少了上下文切换代码路径,而且还可以在上下文切换发生后加快执行速度。

    关于arm - ARM 架构领域意味着什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36613000/

    10-12 17:45