MMU段式映射(VA -> PA)过程分析
MMU:内存管理单元。
CPU寻址的方式:
未使用MMU:CPU发出地址(PA) 直接内存寻址(SDRAM or DDRx)。
使用MMU :CPU发出地址(VA) MMU接收CPU发来的地址 经过某种转换
变成实际的物理地址去寻址。
那么是MMU是如何实现VA到PA的转化的呢?
建立VA与PA的对应关系:
MMU有段描述符(1M)(还有页描述符大页(64KB)小页(4KB)和极小页(1KB))
我们这里说段页表的建立。
比如32位CPU,4G的寻址空间可分为4094个段(4G/1MB)
所以可以建立4096个对应的关系而实际的内存肯定没到4G(VA-PA 可多对一)
所以首先要在内存中指定存放该对应表的其实位置(可通过CP15协处理器指定)
映射表的大概示意图如下
VA(0-4095) PA(高12位)
0 ---- 有效PA高12bit + AP + DOMAIN + cacheable + bufferable + 描述符
1 ---- 有效PA高12bit + AP + DOMAIN + cacheable + bufferable + 描述符
2 ---- 有效PA高12bit + AP + DOMAIN + cacheable + bufferable + 描述符
···
···
4094 ---- 有效PA高12bit + AP + DOMAIN + cacheable + bufferable + 描述符
4095 ---- 有效PA高12bit + AP + DOMAIN + cacheable + bufferable + 描述符
AP:AP权限为所有用户可读写 在多进程时使用 用来保护进程
DOMAIN:配合AP使用 权限管理
cacheable :C位 使能MMU缓存
bufferable :B位 使能MMU缓冲区
描述符:MMU使用段描述符(还有页描述符大页(64KB)小页(4KB)和极小页(1KB))
以下是建立1MB映射的C语言描述:
phyaddr = 0x30000000;
viraddr = 0xa0000000;
*(mmu_ttb_base + (viraddr >> 20)) = ((phyaddr & 0xfff00000) | 低20位的属性描述);
VA到PA转化过程:
CPU发出VA:比如0xa0000123,转化过程如下图:
OK,到此,便得到了实际的物理地址!
相关文章
- 将Linux服务器目录映射到Windows的方法
- 数据对象映射模式
- 安卓蓝牙键盘鼠标映射_蓝牙鼠标模拟器
- 内存映射文件原理_开源内存数据库
- Nature子刊重磅综述:人脑功能的因果映射
- 请求处理-【源码分析】-Rest映射及源码解析
- 客快物流大数据项目(七十九):Impala映射kudu表
- Liftoff:基因组注释映射工具
- 【Linux 内核 内存管理】内存映射相关数据结构 ② ( vm_area_struct 结构体成员分析 | vm_mm 成员 | vm_page_prot 成员 | vm_flags 成员 )
- 【Linux 内核 内存管理】内存映射相关数据结构 ④ ( vm_area_struct 结构体成员分析 | vm_ops 成员 | vm_operations_struct 结构体成员分析 )
- 【Linux 内核 内存管理】内存管理系统调用 ⑤ ( 代码示例 | 多进程共享 mmap 内存映射示例 )
- Hibernate关联关系映射—1对多详解编程语言
- Linux内网映射配置指南(内网映射linux)
- Hibernate Query接口 setInteger方法:绑定映射类型为int的参数
- 极速激励:Linux FTP 映射体验(linuxftp映射)
- 了解Linux MMIO——内存映射I/O技术(linuxmmio)
- Linux网络盘映射:实现文件共享的新方法(linux映射网络盘)
- Linux 内网映射:实现简单的远程访问(linux内网映射)
- linux下改变键盘映射解决方案