寄存器satp
操作系统分为用户模式和内核模式,riscv架构也分为特权架构和非特权架构。特权架构指的是因为定时器中断,异常和系统调用等情况,进程从用户模式切换到内核模式时,对一些特权架构的寄存器进行一系列的操作,也是用户态和内核态可以进行分离的实现原理。Satp(Supervisor Address Translation and Protection Register)
寄存器是虚拟地址转换的一个非常重要的寄存器,下图展示了stap寄存器的内容。
32位操作系统时satp寄存器
64位操作系统时satp寄存器
当MODE位为0时,虚拟地址不会进行转化,此刻的虚拟地址就是物理地址。软件会将satp寄存器的其他字段清0。MODE为不同值时,会根据MODE位选择不同结构的页表,如下图所示。在32位的操作系统下,页表只有sv32一种结构。在64位操作系统下,有sv39,sv48等多种页表结构。
PPN存放的是最高级页表的起始页号(页目录),根据相应的page大小进行可以得到最高级页表(页目录)的物理地址。这样cpu就可以告诉虚拟内存地址从哪里翻译成物理内存地址。(页表的地址必须为物理地址,因为内容本身只能存放在真正的物理地址中,页表是虚拟地址指向物理地址的媒介)每一个应用程序都有属于自己的页表,当cpu从一个应用程序切换到另一个应用程序的时候,也需要切换satp寄存器中的内容。每个进程都有自己的进程描述符,在进程描述符中会定义页目录的地址并将该地址写入到stap寄存器中。
页表和多级页表
如果直接将虚拟地址一一对应映射到物理地址,那么对于页表机制的空间需求太大了。
比如全中国14亿人,如果每个人的信息都是中国浙江嘉兴海宁奕斯伟xxx,那么14亿人占据的信息大小就会非常大。而如果对信息进行分类,比如同属中国,保留34个省,再保留下面的县,那么需要保存的数据量将会变得非常小(类似于填写快递收货地址)。页表的分页机制就是类似这种原理。