Arm架构中的域指什么?

7
当我在Cortex-A9 MPCore中调试MMU时,经常会看到“Domain Access Control Register”,但是,“domain”是什么意思?最多可以有16个域吗? 有人可以给我一个解释链接吗?

这是如何防止程序A践踏程序B的方法,您可以为它们分配不同的域,当一个程序正在运行时,它只能访问它被授权访问的内容。在切换任务时,您不必更改太多内容,也不必扫描整个MMU表并更改下一个任务可以访问的内容。 - old_timer
至少在旧的ARM MMU中,大致上是这样的。有些地方您直接指定权限,有些地方您索引到一个包含16个定义的寄存器中。 - old_timer
1个回答

5
TL;DR DACR不仅可以减少上下文切换的代码路径,还能加速上下文切换后的执行。

有几个链接可以解释 Domain Access Control Register 或者 DACR 的具体细节。例如 ARM的内存访问权限和域. 然而这些页面以及其他很多页面没有解释为什么你可能需要这个特性;特别是对于嵌入式应用程序的用户来说。

之前的 ARM 特性(ARM 架构 V5) 是 PID. 这个特性的原因和 DACR 和域相同。MMU 用于什么?

  • 特权分离,或者将某些实体(任务、线程等)的访问权限限制为只读或无访问权限。
  • 内存重映射 - 虚拟到物理地址转换允许稀疏/分散的内存变得连续。
  • 分页 - 错误处理程序可以在不太优先的代码访问时交换进出存储器。
  • 访问行为 - MMU 可以指定内存是否可缓存、读/写、应该缓冲等等。
DACR(以及PID)仅涉及第一项(特权分离)。在上下文切换时,操作系统必须管理此分离。对于大多数MMU(历史上的ARM),只有用户和超级管理员两种权限。为了容纳多个任务,超级MMU代码必须更改MMU表。这很复杂,因为ARM具有TLBcache,两者都具有虚拟地址并依赖于MMU表。 DACR(以及PID)允许通过单个寄存器写入更改MMU映射。此外,TLBcache还具有domain信息(以及PID的modified address)。这意味着这些条目不需要在上下文切换时刷新(和重新填充)。domains对于PID非常有利,因为可以存在多个访问配置文件。例如,在上下文切换时,共享库代码可能仍然可访问,而主任务/线程二进制文件则被切换出去。
比较使用DACR与更新MMU表时的工作。
  1. 至少更改L1页表以映射正确的配置文件。
  2. 在页面表更新中清除/使无效L1表和其他表(请参见下文)。
  3. 使TLB条目无效(很可能是整个条目为简单起见)。
  4. 使MMU表中的缓存条目无效;很可能再次是整个表。

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

音频/视频的解码非常消耗CPU和内存。偶尔,电子邮件客户端会轮询网络服务器以获取信息。通常没有什么。在这个简短的转换期间,只需要少量(1-4k)的检查电子邮件代码;单个TLB条目。缓存通常是32k+,因此许多音频/视频缓存和TLB条目可以保持有效。

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

1
对于自定义(仅限ARM)的嵌入式实时操作系统,您可以使用静态域来构建结构。为了支持>16个任务,大多数操作系统仍将回退到传统的页表更新方法。但是,在运行系统中的大多数任务切换中,使用DACR写入。这优化了常见情况,但有最坏情况路径(可能不是实时人员想要听到的)。 - artless noise

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接