题记
一直认为,段页式存储是一个软件概念,将软件分为各个不同的段来进行管理,通过划分页面进行内存分配,使用实际的物理内存空间。
今天一个同事提到了硬件的段页式管理的概念,感觉这个角度很好,以前从来没考虑过还能从这个角度去想段页式管理的问题,所以将他的描述整理记录下来。
MIPS的段页式管理
从硬件实现上来看,MIPS的虚拟地址空间分成个几个不同的段,以MIPS32为例,包含useg,kseg0,kseg1,kseg2和kseg3。其中kseg0和kseg1是kernel umap,不需要经过TLB转换,其它几个段需要经过TLB转换。
因此,可以认为MIPS32从硬件设计上就为段页式管理提供了方便,当只想使用段的映射方式,不使用页面的时候,可以使用kseg0和kseg1,因为这两个段直接由硬件实现了虚拟地址到物理地址的转换,不需要再额外的划分页面。
当需要使用段页式(TLB映射)的方式使用内存空间时,可以使用useg和kseg2、kseg3,通过TLB映射来配置不同大小的也,将虚拟地址根据页大小,映射到不同的物理地址上进行使用。
结束语
不同的硬件架构在硬件实现上对段页式的实现可能有所不同。例如MIPS同时包含了段和段页式两种地址使用方式,而RISC-V则略有不同。RISC-V在M态时,是完全的段式管理,而在S态时,可以通过配置SATP寄存器的模式,在完全的段式管理和段页式(走TLB)两种形式间进行切换。