搜索
您的当前位置:首页正文

虚拟地址转物理地址

来源:独旅网

1. 物理地址到虚拟地址的转换?

开启虚拟内存。CSR中有个satp(Supervisor Address Translation and Protection Register)寄存器,它的结构如下:

最高4位表示寻址模式:

  • 0000表示不适用页表,直接用物理地址,用于简单的嵌入式系统。
  • 1000表示Sv39页表,也是接下来要说明的,虚拟内存空间为512GB。
  • 1001表示Sv48,比Sv39多一级,虚拟内存空间为256TB。

2. 虚拟地址如何转换为物理地址?

第一级页表项位置:0x80205<<12 + 111111111<<3 = 0x80205ff8,页表项的结构图如下:

  • V为Valid位,D位Dirty位,A为Accessed位
  • RWX表示可读,可写,可执行位
  • RWX如果全0,那么该页表项需要指向下一级页表

3. 小结

  • 分配页表内存空间,初始化页表;
  • 设置页基址寄存器satp;
  • 刷新TLB
  • 第一级页表项PTE1 = satp.PPN<<12 + VA.VPN2<<3 ;如果可RWX,物理地址PA=PTE1.PPN<<12+VA[29:0],如果RWX全0,进入下一级。
  • 第二级页表项PTE2 = PTE1.PPN<<12 + VA.VPN1<<3;如果可RWX,物理地址PA=PTE2.PPN<<12+VA[20:0],如果RWX全0,进入下一级。
  • 第三级页表项PTE3 = PTE2.PPN<<12 + VA.VPN0<<3;如果可RWX,物理地址PA=PTE3.PPN<<12+VA[11:0]

因篇幅问题不能全部显示,请点此查看更多更全内容

Top