手臂架构领域意味着什么

kav*_*ang 6 arm mmu cortex-a

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

art*_*ise 5

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


有几个链接解释了域访问控制寄存器DACR的细节。例如ARM的内存访问权限和域。但是,此页面和许多其他页面没有解释为什么您可能需要此功能;特别是对于使用嵌入式应用程序的人来说。

之前的 ARM 功能(ARM 架构 V5)是PID此功能的原因与DACR和域相同。MMU 有何用途?

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

DACR PID)只关心第一个(权限分离)。在上下文切换中,操作系统必须管理这种分离。对于大多数 MMU(历史上在 ARM 上),只有两种权限:用户和超级。为了适应多个任务,超级MMU代码必须改变MMU表。这很复杂,因为 ARM 有TLB缓存,两者都有虚拟地址并依赖于 MMU 表。

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

比较使用DACR和更新 MMU 表的工作。

  1. 至少更改L1页表以映射正确的配置文件。
  2. 清理/无效L1表和页表更新中的其他表(见下文)。
  3. 使 TLB 条目无效(为了简单起见,很可能使整个事情无效)。
  4. 使MMU表中的缓存条目无效;也许整个事情又发生了。

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

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

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