我知道在x86架构中,我可以在内核上下文中读取CR3寄存器
跟踪内核的页面目录。
现在,我尝试从Linux与SPARC架构做同样的工作。
如何访问SPARC内核的页面目录?
在SPARC中对应的寄存器是x86 CR3?
它们的分页机制是否相同??
另外,手臂呢?,我有一些关于这些的文件,但我需要更多。。。
提前谢谢你。

最佳答案

SPARC规范本身并不强制使用MMU,也不要求MMU的具体实现;它只定义CPU和MMU之间的接口(主要关注需要通过MMU活动生成的陷阱)。
我不得不说,我只知道Sun公司/富士通的SPARC CPU,而不是关于嵌入式的东西(列昂和前任)--SPARC CPU,早在sun4工作站CPU的1990已经拥有了MMUs。
与许多非授权的SPARC CPU特性一样,MMU的控制通过所谓的地址空间标识符(ASIS)进行。
这些ASIS是SPARC体系结构的一个特征,可以最好地描述为X86分割和内存映射寄存器之间的混合。它们的使用改变了一个“地址”意味着一个SPARC CPU(就像在x86中使用段[Reg ]改变了“地址”的含义)——除了在ASI地址范围后面没有可配置的“描述符表”,但通常是硬件特定的控制寄存器。也就是说,它们不是“映射”到普通物理地址空间,而是“映射”到备用地址范围。
首先,在sun4sun4csun4dsun4m架构(32位SPARCV7)中,MMU被称为srmmu(SPARC参考MMU),并实现了两级硬件表走。这是不赞成的,我不记得在我的脑海中是什么样的控制规则。
当Sun创建sun4u体系结构时,硬件实现的翻译表遍历被认为开销太大,而且内存太密集;因此,表遍历MMU实现完全被拖拽,转而在软件中实现大部分(但不是全部)MMU功能。特别是,可编程到硬件中的唯一东西是TLB的内容,即translation lookaside buffer—这意味着如果映射不容易缓存在TLB中,则会发生MMU未命中陷阱,陷阱处理程序将执行表查找,并在最后重新编程TLB(以便随后重新发出指令将成功)。这就是名字,sfmmu(软件MMU)的来源。MMU通过ASI_MMU控制,而实际的上下文寄存器是CPU特定的。。。
请参阅,以供参考:
pg. 351ff of the 2007 UltraSPARC architecture reference manual-列出了与MMU控制相关的ASI编号。
OpenSolaris源代码,use of ASI_MMU_CTX
OpenSolaris源代码,sfmmu_asm.s(小心眼睛流血和大脑变得模糊)
OpenSolaris源代码,hat_sfmmu.c
这是软件端的散列链/转换表遍历;它可能有幸成为Solaris内核中最大的源文件。。。
我建议你再问一次这个问题,作为一个单独的帖子。在ARM多个(既有MMU更少,也有MMU)的存在下,已经实现了(例如,基于ARMV7指令集的CORTEX-A8/M3与/OUT MMU)。ARM本身的MMU规范通常称为VMSA(virtualmemorysystemsarchitecture,虚拟存储系统体系结构),有几个版本。此发布已太长,无法包含更多详细信息;-)

07-24 09:45