【问题标题】:Domain in arm architecture means whatArm架构中的域意味着什么
【发布时间】:2016-08-05 09:51:48
【问题描述】:

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

【问题讨论】:

  • 这是防止程序 A 踩踏程序 B 的方法,您可以为它们分配不同的域,并且当一个域运行时,它只能访问它有权访问的东西。切换任务时不必更改太多东西,不必扫描整个 mmu 表并更改下一个任务可以访问的内容。
  • 至少在较旧的手臂 mmus 中大致是这样的。有些地方您直接指定了权限,有些地方您索引到包含 16 个定义的寄存器中。

标签: arm mmu cortex-a


【解决方案1】:

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


有几个链接解释了域访问控制寄存器DACR的细节。例如ARM's Memory access permissions and domains。但是,此页面和许多其他页面并没有解释为什么您可能需要此功能;尤其适合使用嵌入式应用程序的人。

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

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

DACR(和PID)只关心第一个(权限分离)。在上下文切换中,操作系统必须管理这种分离。对于大多数 MMU(历史上在 ARM 上),只有两个特权是用户和超级用户。为了容纳多个任务,超级MMU代码必须alter the MMU table。这很复杂,因为 ARM 有一个 TLBcache,它们都有虚拟地址并依赖于 MMU 表。

DACR(和 PID)允许 MMU 映射随着单个寄存器写入而改变。此外,TLBcache也有domain信息(和修改地址为PID)。这意味着不需要在上下文切换时刷新(和重新填充)这些条目。 对 PID 有利,因为可以存在多个访问配置文件。例如,在切换主任务/线程二进制文件时,共享库代码可能在上下文切换时仍可访问。

比较使用 DACR 与更新 MMU 表。

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

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

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

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

【讨论】:

  • 对于自定义(仅限 ARM)RT 嵌入式操作系统,您可以使用 静态域 构建事物。为了支持 >16 个任务,大多数操作系统仍会回退到传统的页表更新方法。但是,对于正在运行的系统中的大多数任务切换,都使用 DACR 写入。这优化了常见情况,但有一条最坏的情况路径(可能不是人们想要听到的实时)。
猜你喜欢
  • 2011-11-08
  • 1970-01-01
  • 1970-01-01
  • 2012-12-11
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 2017-09-07
  • 1970-01-01
相关资源
最近更新 更多