arm体系结构中的域意味着什么

arm体系结构中的域意味着什么,arm,mmu,cortex-a,Arm,Mmu,Cortex A,当我在Cortex-A9 MPCore中调试MMU时,我总是看到域访问控制寄存器,但是,域意味着什么?最多16个域? 谁能给我一个链接来解释这个 TL;DRDACR不仅可以减少上下文切换代码路径,还可以在上下文切换发生后加快执行 有几个链接解释域访问控制寄存器或DACR的细节。例如然而,本页面和其他许多页面没有解释为什么您可能需要此功能;特别是对于使用嵌入式应用程序的人 以前的ARM特性(ARM架构V5)是PID。此功能的原因与DACR和域相同。MMU的用途是什么 特权分离-或允许某些实体(

当我在Cortex-A9 MPCore中调试MMU时,我总是看到域访问控制寄存器,但是,域意味着什么?最多16个域?
谁能给我一个链接来解释这个

TL;DRDACR不仅可以减少上下文切换代码路径,还可以在上下文切换发生后加快执行


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

以前的ARM特性(ARM架构V5)是PID。此功能的原因与DACR和域相同。MMU的用途是什么

  • 特权分离-或允许某些实体(任务、线程等)访问内存和其他受限(只读)或无
  • 内存重新映射-虚拟到物理的转换允许稀疏/分离的内存成为连续的
  • 分页-故障处理程序可以在权限较低的代码访问时交换内存
  • 访问行为-MMU可以指定内存是否可缓存、读/写、是否应缓冲等
DACR(和PID)只与第一个(特权分离)有关。在上下文切换上,操作系统必须管理这种分离。对于大多数MMU(历史上在ARM上),只有两种权限,即用户权限和超级权限。为了适应多个任务,必须使用超级MMU代码。这很复杂,因为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不仅减少了上下文切换代码路径,还可以在上下文切换发生后加快执行速度。

    这就是如何防止程序A践踏程序B,您可以为它们分配不同的域,当一个程序运行时,它只能访问它有权限访问的内容。在切换任务时,您不必更改太多的内容,您也不必扫描整个mmu表并更改下一个任务可以访问的内容。至少在较旧的arm mmu中是这样的。有些地方直接指定了权限,有些地方索引到包含16个定义的寄存器中。对于自定义(仅限ARM)RT嵌入式操作系统,可以使用静态域构造内容。为了支持>16个任务,大多数OSs仍然会回到传统的页表更新方法。但是,对于正在运行的系统中的大多数任务开关,使用DACR写入。这优化了常见情况,但有一个最坏的情况路径(可能不是实时用户想要听到的)。