美文网首页
MMU之获取物理地址

MMU之获取物理地址

作者: 陈成_Adam | 来源:发表于2021-02-27 22:14 被阅读0次

MMU,Memory Management Unit,存储管理单元。输入一个虚拟地址和一个地址映射表的基地址,输出一个物理地址。

image.png

获取物理地址的详细过程如下图:

image.png

图中VA代表虚拟地址(virtual address),PA代表物理地址(physical address)。

什么是虚拟地址?为什么使用虚拟地址?本文不做介绍,请自行了解。

地址映射表是一张记录着虚拟地址和物理地址的映射关系的表格,它存储在DRAM中。查找到的物理地址需要加上一个偏移量才是最终的物理地址,该偏移量通过取虚拟地址的若干位得到。地址映射表可以有多级。一级页表需要查表一次即可得到一个物理地址,二级页表需要查表两次,以此类推。通常多级页表结构的MMU会通过加入高速缓存来减少查表次数,从而加快访存速度。

拿GPU中的MMU举例,

image
  • 图中#1过程传输的数据一般有:顶点数据、纹理数据、页表数据等;地址为物理地址
  • 图中#2过程一般包含:寄存器读写和中断;地址为寄存器地址
  • 图中#3过程除了#1中所述数据之外,还有GPU产生的中间数据,比如:染色后的顶点、片段数据等;地址为虚拟地址

GPU若要正确的读写DDR,必须通过MMU获取到正确的物理地址。

地址映射表的基地址通过配置寄存器告诉GPU。地址映射表的基地址是一个物理地址。 地址映射表由驱动程序产生。

伪代码表示MMU获取物理地址过程如下(没有高速缓存的情况):

uint8_t mem[SIZE]; // 显存

uint64_t va = 0x89ab1234567; // 输入的虚拟地址
uint32_t pgt_l0_base = 0x0;  // 第一层级地址映射表的基地址

uint32_t offset_0 = va[47:39] * 8; // 从va的第39到47位得到在第一层级地址映射表的偏移量
uint32_t pgt_l1_base = mem[pgt_l0_base + offset_0];  // 第二层级地址映射表的基地址,参看图1

uint32_t offset_1 = va[38:30] * 8; // 从va的第30到38位得到在第二层级地址映射表的偏移量
uint32_t pgt_l2_base = mem[pgt_l1_base + offset_1];  // 第三层级地址映射表的基地址

uint32_t offset_2 = va[29:21] * 8; // 从va的第21到29位得到在第三层级地址映射表的偏移量
uint32_t pgt_l3_base = mem[pgt_l2_base + offset_2];  // 第四层级地址映射表的基地址

uint32_t offset_3 = va[20:12] * 8; // 从va的第12到20位得到在第四层级地址映射表的偏移量
uint32_t pa_base = mem[pgt_l3_base + offset_3];  // 物理地址的基地址

uint32_t offset = va[11:0]; // 从va的第0到11位得到物理地址的偏移量
uint32_t pa = pa_base + offset; // 得到最终的物理地址,参看图2

相关文章

  • MMU之获取物理地址

    MMU,Memory Management Unit,存储管理单元。输入一个虚拟地址和一个地址映射表的基地址,输出...

  • 操作系统支持

    存储管理 CPU-MMU-MemoryCPU把虚拟地址发给MMU,转换成物理地址到内存中寻找内容 虚拟内存管理的作...

  • 浅尝辄止75-MMU

    CPU如何访问内存? MMU(Memory Managemant Unit) 很容易想象,CPU可以用物理地址对内...

  • kernel 内存 I/O

    内存 I/O# 内存管理单元## MMU辅助操作系统进行内存管理,提供虚拟地址和物理地址的映射、内存访问权限保护和...

  • Linux kernel之一内存寻址之分页

    1.硬件中的分页 1.1 页实现原理 MMU的分页管理单元将线性地址转换成物理地址 page 将线性地址空间划分成...

  • Essay

    内存控制单元(MMU)通过分段单元硬件电路将逻辑地址转换为线性地址。通过分页单元硬件电路将线性地址转换为物理地址。...

  • uboot-step5 关闭MMU与cache

    uboot-step5 关闭MMU与cache MMU是什么 MMU 的概念参考百度百科的内容:MMU是Memor...

  • PowerPC E500 MMU详解

    1. 什么是MMU? MMU是Memory Management Unit的缩写,中文名称为内存管理单元。MMU是...

  • uboot step 11 内存一下子变大了 ----MMU的配

    uboot step 11 内存一下子变大了 ----MMU的配置与使用 本文结构如下: MMU 介绍 MMU 相...

  • MMU

    现代操作系统普遍采用虚拟内存管理( Virtual Memory Management) 机制,这需要MMU( M...

网友评论

      本文标题:MMU之获取物理地址

      本文链接:https://www.haomeiwen.com/subject/ibqwfltx.html