1 Linux中sv39 mmu介绍-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux中sv39 mmu介绍

麦辣鸡腿堡 来源:嵌入式Linux充电站 作者:Vincent 2023-10-08 11:07 次阅读

RISC-V Linux支持sv32、sv39、sv48等虚拟地址格式,分别代表32为虚拟地址、38位虚拟地址和48位虚拟地址。RISC-VLinux默认也是使用sv39格式,sv39的虚拟地址、物理地址、PTE格式如下:

虚拟地址格式:

图片

物理地址格式:

图片

PTE格式:

图片

虚拟地址使用39位表示,其中低12位代表pageoffset,高位划分为了三部分:VPN[0]、VPN[1]和VPN[2],分别代表虚拟地址VA在PTE、PMD和PGD中的索引

物理地址使用56位表示,低12位代表page offset,高位是物理页PPN[0]、PPN[1]和PPN[2]

PTE保存了物理页PPN[0]、PPN[1]和PPN[2],和物理地址中的PPN相对应;PTE的低10位代表物理地址的访问权限,当RWX全为0时,则代表该PTE存储的地址是下一级页表的物理地址,否则代表当前页表是最后一级页表。

再看看sv39 的页表格式,sv39使用的是三级页表,PGD、PMD和PTE,每一个级页表使用9bit表示,即每一级页表都有512个页表项。

在代码中,创建一个有512个元素的数组即代表一个页表。一个PTE有512个页表项,每一个页表项占用8字节,5128=4096字节,所以一个PTE代表4K。一个PMD也是512个页表项,每一项可代表一个PTE,5124 K=2M,所以一个PMD就代表2M。以此类推,一个PGD代表512 * 2M=1G。

重要结论:PGD代表1G、PMD代表2M、PTE代表4K。sv39默认的页大小是4K。

三级页表虚拟地址转为物理地址过程示意图:图片

sv39三级页表虚拟地址转为物理地址过程:

MMU通过satp寄存器得到PGD的物理地址,结合PGD index(即VPN[2])找到PMD;找到PMD后,再结合PMDindex(即VPN[1])找到PTE,然后结合PTE index(即VPN[0])得到VA在PTE索引中的值,从而得到物理地址。

最后在PTE中取出PPN[2]、PPN[1]和PPN[0],再和虚拟地址的低12位offset相加,得到最终的物理地址。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11292

    浏览量

    209318
  • RISC
    +关注

    关注

    6

    文章

    462

    浏览量

    83707
  • 地址表
    +关注

    关注

    0

    文章

    4

    浏览量

    810
收藏 人收藏

    评论

    相关推荐

    为什么没有MMU就无法运行Linux系统呢?

    MMU(Memory Management Unit,内存管理单元)是一种硬件模块,用于在CPU和内存之间实现虚拟内存管理。
    发表于 08-03 10:05 933次阅读
    为什么没有<b class='flag-5'>MMU</b>就无法运行<b class='flag-5'>Linux</b>系统呢?

    【RVBoards-哪吒】T-Head C906的规格书

    in-order pipeline. The C906 supports the Sv39 virtual address system with custom page attribute
    发表于 05-20 14:52

    无第三方库不到5000行C语言 risc-v虚拟机juicevm

    /run-mbedtls.md) **编写**。- [运行SV39 MMU测试](./doc/run-mmu_sv39.md) **编写
    发表于 06-01 15:22

    juicevm-无第三方库不到5000行C语言 risc-v虚拟机

    world 编写。运行Free rtos 编写。运行mbedtls 编写。运行SV39 MMU测试 编写
    发表于 06-01 16:15

    DY-SV5W模块介绍

    以下为DY-SV5W介绍摘抄模块应用手册1.产品概述DY-SV5W是本司自主研发的一款智能语音模块,集成IO分段触发,UART串口控制,ONE_line单总线串口控制,标准MP3等7种工作模式,简单
    发表于 02-10 06:25

    无第三方库不到5000行C语言 risc-v虚拟机JuiceVm

    mbedtls编写 。运行SV39 MMU测试 编写 。运行mtime测试编写 。运行mtime测试 编写
    发表于 08-22 16:36

    有RISC-V跑uCLinux或者NO MMULinux的项目吗?

    有RISC-V跑uCLinux或者NO MMULinux的项目吗?
    发表于 04-03 17:54

    【昉·星光 2 高性能RISC-V单板计算机体验】与星光 2的第一次邂逅

    processor : 0 hart: 1 isa : rv64imafdc mmu : sv39 uarch: sifive,u74-mc mvendorid : 0x489 marchid
    发表于 08-03 23:12

    uClinux和Linux的具体异同

    uCLinux是针对控制领域的嵌入式linux操作系统,它从Linux 2.0/2.4内核派生而来,沿袭了主流Linux的绝大部分特性。适合不具备内存管理单元(MMU)的微处理器/微控
    发表于 11-04 10:42 2次下载

    ARM920T的MMU与Cache介绍

    CPU通过地址来访问内存的单元,地址有虚拟地址和物理地址之分,如果CPU没有MMU(Memory Management Unit,内存管理单元),或者有MMU但没有启用,CPU核在取指令或访问内存
    发表于 03-28 11:05 14次下载
    ARM920T的<b class='flag-5'>MMU</b>与Cache<b class='flag-5'>介绍</b>

    Linux内核虚拟内存管理mmu_gather操作

    本文讲解Linux内核虚拟内存管理mmu_gather操作,看看它是如何保证刷tlb和释放物理页的顺序的,又是如何将更多的页面聚集起来统一释放的。
    的头像 发表于 05-20 14:37 1963次阅读

    为什么没有MMU就无法运行Linux系统

    MMU(Memory Management Unit,内存管理单元)是一种硬件模块,用于在CPU和内存之间实现虚拟内存管理。
    的头像 发表于 04-23 10:48 910次阅读
    为什么没有<b class='flag-5'>MMU</b>就无法运行<b class='flag-5'>Linux</b>系统

    什么是MMUlinux为什么需要MMU

    在内存管理方面,MMU可以通过页面表(Page Table)实现虚拟内存管理。页面表是一种数据结构,记录了每个虚拟页面和其对应的物理页面之间的映射关系。
    发表于 10-09 11:27 1383次阅读
    什么是<b class='flag-5'>MMU</b>?<b class='flag-5'>linux</b>为什么需要<b class='flag-5'>MMU</b>?

    嵌入式Linux运行一定需要MMU吗?为什么需要MMU

    嵌入式Linux运行一定需要MMU吗?为什么需要MMU?  嵌入式Linux运行需要MMU,这是因为MM
    的头像 发表于 10-29 16:28 834次阅读

    MMU的页命中、缺页介绍

    页命中、缺页 (1)页命中 • a) 处理器要对虚拟地址VA进行访问。 • b) MMU的TLB没有命中,通过TWU遍历主存页表的PTEA(PTE地址)。 • c) 主存向MMU返回PTE
    的头像 发表于 11-26 16:19 1108次阅读
    <b class='flag-5'>MMU</b><b class='flag-5'>中</b>的页命中、缺页<b class='flag-5'>介绍</b>