码迷,mamicode.com
首页 > 其他好文 > 详细

MMU

时间:2020-11-18 12:24:09      阅读:5      评论:0      收藏:0      [点我收藏+]

标签:gen   roo   col   color   page   tip   物理地址   pad   support   

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

图1. 获取下一级页表的基地址的过程
PGT_L1_BASE
PGT_L1_BASE
...
...
PGT_L0_BASE
PGT_L0_BASE
OFFSET_0
OFFSET_0
PGT_L0
PGT_L0
...
...
PGT_L1
PGT_L1
PGT, Page Table
L0, Level-0
PGT, Page Table...
Viewer does not support full SVG 1.1

图2. 获取最终物理地址的过程
PA
PA
...
...
PA_BASE
PA_BASE
OFFSET
OFFSET
PA, Pysical Addr
PA, Pysical Addr
Viewer does not support full SVG 1.1

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

标签:gen   roo   col   color   page   tip   物理地址   pad   support   

原文地址:https://www.cnblogs.com/cngpus/p/13963182.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!