我知道在x86架构中,我可以在内核上下文中读取CR3寄存器 跟随内核的页面目录。
现在我正在尝试使用SPARC架构从linux做同样的工作。 如何在SPARC中访问内核的页面目录?
SPARC中的对应寄存器x86 CR3是什么?
他们的分页机制是一样的吗?
PS。关于ARM呢?我有一些关于这些的文件,但我需要更多...... 提前谢谢你。
答案 0 :(得分:2)
在SPARC上,TLB-faulting是用软件处理的,所以没有像CR3那样的东西。您必须检查当前的流程数据结构以找到所需的信息。
另一方面,ARM使用硬件转换,MMU作为协处理器使用MRC / MCR处理,用于访问转换表基址寄存器。有关详细信息,请参阅ARM网站:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0056d/BABIDADG.html答案 1 :(得分:1)
SPARC规范本身并不强制要求使用MMU,也不要求MMU的具体实施;它只定义了CPU和MMU之间的接口(主要关注需要通过MMU活动生成的陷阱)。
那就是说 - 我必须在此声明我只知道Sun的/ Fujitsu的SPARC CPU,而不是嵌入式的东西(LEON和前辈) - 早在1990年sun4
工作站CPU的SPARC CPU就已经知道了有MMU。
与许多非强制性SPARC CPU功能一样,MMU的控制通过所谓的 A ddress S pace < / em> 我 dentifiers (ASIs) 这些ASI是SPARC体系结构的一个特性,可以最好地描述为x86分段和内存映射寄存器之间的混合。它们的使用改变了“地址”对SPARC CPU的意义(就像在x86中使用段[reg]一样改变了“地址”的含义) - 除了ASI地址范围后面没有可配置的“描述符表” ,但通常是硬件专用控制寄存器。即它们不会“映射”到普通的物理地址空间,而是映射到备用地址范围。
首先 - 在sun4
,sun4c
,sun4d
和sun4m
架构(32位sparcv7)中,MMU被称为srmmu
(SPARC参考MMU)和实现了两级硬件表走。这是不推荐使用的,我不记得控制注册的内容了。
当Sun创建sun4u
架构时,硬件实现的转换表行走被认为是过高的开销以及过于内存密集型;因此,表格行走的MMU实现完全被拉扯,有利于在软件中实现大多数(但不是全部)MMU功能。特别是,可编程到硬件中的唯一事情是TLB的内容,转换后备缓冲区 - 意味着如果映射不容易在TLB中缓存,则发生MMU未命中陷阱并且陷阱处理程序将执行表查找,重新编程最后的TLB(以便之后重新发布指令将成功)。这就是名称sfmmu
(软件 MMU)的来源。 MMU通过ASI_MMU
控制,而实际的上下文寄存器是CPU特定的......
参见:
ASI_MMU_CTX
。sfmmu_asm.s
(提防眼睛流血,大脑变得糊状)hat_sfmmu.c
Re,ARM:我建议你再次提出这个问题,作为一个单独的帖子。在ARM的存在下,多个(mmu-less和with-mmu)实现已经发展(例如,基于ARMv7指令集的Cortex-A8 / M3带有/出MMU)。 ARM自身的MMU规范通常称为 VMSA (虚拟内存系统架构),并且有几个版本。此帖子已经太长,无法包含更多详细信息; - )