Linux内核:内存管理——页表

寄存器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个省,再保留下面的县,那么需要保存的数据量将会变得非常小(类似于填写快递收货地址)。页表的分页机制就是类似这种原理。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值