x86 CR3在SPARC架构中对应的寄存器是什么?

问题描述 投票:0回答:3

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

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

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

他们的分页机制一样吗?

ps。 ARM 怎么样?,我有一些关于这些的文档,但我需要更多...... 提前谢谢你。

linux assembly x86 paging sparc
3个回答
2
投票

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

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


1
投票

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

也就是说 - 我必须在这里声明,我只了解 Sun / Fujitsu 的 SPARC CPU,而不了解嵌入式产品(LEON 和前身) - SPARC CPU 早在 1990 年的

sun4
工作站 CPU 就有 MMU。

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

首先 - 在

sun4
sun4c
sun4d
sun4m
架构(32 位 sparcv7)中,MMU 称为
srmmu
(SPARC 参考 MMU)并实现了两级硬件表遍历。这已被弃用,我不记得这方面的控制规则是什么。

当 Sun 创建

sun4u
架构时,硬件实现的转换表遍历被认为开销过高且占用内存过多;因此,走表 MMU 实现被完全抛弃,转而支持在软件中实现“大多数”(但不是全部)MMU 功能。特别是,硬件中唯一可编程的是 TLB、转换后备缓冲区的内容 - 这意味着如果映射不容易缓存在 TLB 中,则会发生 MMU 未命中陷阱,并且陷阱处理程序将执行表查找、重新编程TLB 放在最后(这样之后重新发出指令就会成功)。这就是 sfmmu
Software
MMU)这个名字的由来。 MMU 通过 ASI_MMU 进行控制,而实际的上下文寄存器是 CPU 特定的...

参见,供参考:

sun4 和 sun4c 架构(sparcv7 架构 CPU)使用外部“Sun4 MMU”,也称为“PMEG MMU”。这在架构上与下面的后来的 srmmu

非常

0
投票

sun4m 和 sun4d 架构(SuperSPARC、HyperSPARC、microSPARC、TurboSPARC CPU)具有片上“SPARC 参考 MMU”(srmmu)。反过来,这也与后来的 sfmmu 有很大不同(srmmu:硬件表遍历;sfmmu:软件表遍历,带有预先遍历的内存中二级 TLB 缓存,称为翻译存储缓冲区 -“TSB”) . sun4u(UltraSPARC-I/II/III/IV 系列 CPU、SPARC64-GP、SPARC64-V/VI/VII)具有片上“Spitfire MMU”(sfmmu),以原始 UltraSPARC-I CPU 命名,代号喷火式战斗机。

请注意,HAL 中的原始 SPARC64-I/-II/-III CPU 使用与上述所有 CPU 不同的 MMU 架构。

© www.soinside.com 2019 - 2024. All rights reserved.