0

我知道在 x86 架构中,我可以在内核上下文中读取 CR3 寄存器以跟踪内核的页面目录。

现在我正在尝试在具有 SPARC 架构的 linux 上做同样的工作。如何在 SPARC 中访问内核的页面目录?

SPARC 中与 x86 CR3 对应的寄存器是什么?

他们的分页机制是否相同?

附言。ARM 呢?,我有一些关于这些的文件,但我需要更多……提前谢谢你。

4

2 回答 2

2

在 SPARC 上,TLB 故障是在软件中处理的,所以没有像 CR3 这样的东西。您必须检查当前的流程数据结构才能找到所需的信息。

另一方面,ARM 使用硬件转换,MMU 作为协处理器处理,使用 MRC/MCR 访问转换表基址寄存器。有关更多信息,请参见 ARM 网站:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0056d/ BABIDADG.html

于 2012-07-31T15:51:32.653 回答
1

SPARC 规范本身不强制使用 MMU,也不要求 MMU 的特定实现;它只定义了 CPU 和 MMU 之间的接口(主要关注需要通过 MMU 活动生成的陷阱)。

话虽如此 - 我必须在这里声明,我只知道 Sun / Fujitsu 的 SPARC CPU,而不是嵌入式产品(LEON 和前辈) - SPARC CPU 早sun4在 1990 年的工作站 CPU 就有 MMU。

与许多非强制 SPARC CPU 功能一样,MMU 的控制通过所谓地址 S速度 I标识符(ASI) 进行。
这些 ASI 是 SPARC 体系结构的一个特性,最好将其描述为 x86 分段和内存映射寄存器之间的混合。它们的使用改变了“地址”对 SPARC CPU 的含义(就像 x86 中使用段 [reg] 改变了“地址”的含义)——除了 ASI 地址范围后面没有可配置的“描述符表” ,但通常是特定于硬件的控制寄存器。即,它们没有“映射”到普通的物理地址空间,而是“映射”到备用地址范围。

首先,在、sun4和架构(32 位 sparcv7)中,MMU 被称为(SPARC 参考 MMU)并实现了两级硬件表遍历。这已被弃用,我不记得对此的控制规则是什么。sun4csun4dsun4msrmmu

当 Sun 创建该sun4u架构时,硬件实现的转换表遍历被认为开销太高而且内存太密集。因此,table-walking MMU 实现完全被支持在软件中实现大多数(但不是全部)MMU 功能。特别是,唯一可编程到硬件中的是 TLB 的内容,转换后备缓冲区 - 这意味着如果映射没有容易地缓存在 TLB 中,则会发生 MMU 未命中陷阱,并且陷阱处理程序将执行表查找,重新编程最后的TLB(以便之后重新发出指令将成功)。这就是名称sfmmuSoftware MMU)的由来。MMU 通过控制ASI_MMU,而实际的上下文寄存器是特定于 CPU 的......

见,供参考:

回复,ARM:我建议您再次提出这个问题,作为一个单独的帖子。随着 ARM 多个(无 mmu 和带 mmu)实现的存在,已经发展(例如,有基于 ARMv7 指令集的带/不带 MMU 的 Cortex-A8/M3)。ARM 自己的 MMU 规范通常称为VMSA(虚拟内存系统架构),并且有几个修订版。这篇文章已经太长了,无法包含更多细节;-)

于 2012-07-31T22:32:17.497 回答