arm架构中的域意味着什么
Domain in arm architecture means what
当我在 Cortex-A9 MPCore 中调试 MMU 时,我总是看到 域访问控制寄存器,但是,域是什么意思?最多 16 个域?
任何人都可以给我一个 link 来解释这个吗?
TL;DR DACR不仅减少了上下文切换代码路径,还可以在上下文切换发生后加快执行速度。
有几个链接可以解释 域访问控制寄存器 或 DACR 的细节。例如 ARM's Memory access permissions and domains。但是,此页面和许多其他页面并未解释 为什么 您可能需要此功能;特别适合使用嵌入式应用程序的人。
先前的 ARM 功能(ARM 体系结构 V5)是 PID。此功能的原因与 DACR 和域相同。 MMU 有什么用?
- 权限分离 - 或给予某些实体(任务、线程等)访问内存和其他有限(只读)或none。
- 内存重新映射 - 虚拟到物理的转换允许 sparse/separated 内存变得连续。
- 分页 - 故障处理程序可以在访问权限较低的代码时交换 in/out 内存。
- 访问行为 - MMU 可以指定内存是否可缓存、read/write、是否应缓冲等
DACR(和PID)只关心第一个(权限分离)。在上下文切换中,OS 必须管理这种分离。对于大多数 MMU(以前在 ARM 上),只有两种权限,即用户和超级用户。为了容纳多个任务,超级MMU代码必须alter the MMU table。这很复杂,因为 ARM 有一个 TLB 和 cache,它们都有虚拟地址并依赖于 MMU table。
DACR(和PID)允许 MMU 映射通过单个寄存器写入更改。此外,TLB和缓存也有域信息(和修改地址 用于 PID)。这意味着这些条目不需要在上下文切换时刷新(和重新填充)。 域 有利于 PID,因为可以存在多个访问配置文件。例如,在主 task/thread 二进制文件被切换出时,共享库代码可以在上下文切换时保持可访问性。
比较使用 DACR 与更新 MMU tables 的工作。
- 至少更改 L1 页面 table 以映射正确的配置文件。
- clean/invalidate L1 table 和其他页面 table 更新(见下文)。
- 使 TLB 条目无效(为简单起见,很可能是整个事情)。
- 使MMU中的缓存条目失效table;可能又是整件事。
这与更改单个寄存器相对。此外,您可能会使整个缓存和 TLB 失效。通过 DACR 和一个简短的上下文切换,code/data 可以保留在 TLB 中的缓存和 MMU 页面 table 条目中。例如,具有检查电子邮件任务和电影播放器的系统。
audio/video 的解码是高度 CPU 和内存密集型的。有时,电子邮件客户端会轮询网络服务器以获取信息。通常什么都没有。在这个短暂的过渡期间,可能只需要一小部分 (1-4k) check email 代码;单个 TLB 条目。缓存通常为 32k+,因此大部分 audio/video 缓存和 TLB 条目可以保持有效。
所以DACR不仅减少了上下文切换的代码路径,还可以在上下文切换发生后加快执行速度。
当我在 Cortex-A9 MPCore 中调试 MMU 时,我总是看到 域访问控制寄存器,但是,域是什么意思?最多 16 个域? 任何人都可以给我一个 link 来解释这个吗?
TL;DR DACR不仅减少了上下文切换代码路径,还可以在上下文切换发生后加快执行速度。
有几个链接可以解释 域访问控制寄存器 或 DACR 的细节。例如 ARM's Memory access permissions and domains。但是,此页面和许多其他页面并未解释 为什么 您可能需要此功能;特别适合使用嵌入式应用程序的人。
先前的 ARM 功能(ARM 体系结构 V5)是 PID。此功能的原因与 DACR 和域相同。 MMU 有什么用?
- 权限分离 - 或给予某些实体(任务、线程等)访问内存和其他有限(只读)或none。
- 内存重新映射 - 虚拟到物理的转换允许 sparse/separated 内存变得连续。
- 分页 - 故障处理程序可以在访问权限较低的代码时交换 in/out 内存。
- 访问行为 - MMU 可以指定内存是否可缓存、read/write、是否应缓冲等
DACR(和PID)只关心第一个(权限分离)。在上下文切换中,OS 必须管理这种分离。对于大多数 MMU(以前在 ARM 上),只有两种权限,即用户和超级用户。为了容纳多个任务,超级MMU代码必须alter the MMU table。这很复杂,因为 ARM 有一个 TLB 和 cache,它们都有虚拟地址并依赖于 MMU table。
DACR(和PID)允许 MMU 映射通过单个寄存器写入更改。此外,TLB和缓存也有域信息(和修改地址 用于 PID)。这意味着这些条目不需要在上下文切换时刷新(和重新填充)。 域 有利于 PID,因为可以存在多个访问配置文件。例如,在主 task/thread 二进制文件被切换出时,共享库代码可以在上下文切换时保持可访问性。
比较使用 DACR 与更新 MMU tables 的工作。
- 至少更改 L1 页面 table 以映射正确的配置文件。
- clean/invalidate L1 table 和其他页面 table 更新(见下文)。
- 使 TLB 条目无效(为简单起见,很可能是整个事情)。
- 使MMU中的缓存条目失效table;可能又是整件事。
这与更改单个寄存器相对。此外,您可能会使整个缓存和 TLB 失效。通过 DACR 和一个简短的上下文切换,code/data 可以保留在 TLB 中的缓存和 MMU 页面 table 条目中。例如,具有检查电子邮件任务和电影播放器的系统。
audio/video 的解码是高度 CPU 和内存密集型的。有时,电子邮件客户端会轮询网络服务器以获取信息。通常什么都没有。在这个短暂的过渡期间,可能只需要一小部分 (1-4k) check email 代码;单个 TLB 条目。缓存通常为 32k+,因此大部分 audio/video 缓存和 TLB 条目可以保持有效。
所以DACR不仅减少了上下文切换的代码路径,还可以在上下文切换发生后加快执行速度。