MMU虚拟内存到物理内存
来源:互联网 发布:2016淘宝前期扶持 编辑:程序博客网 时间:2024/05/21 10:41
MMU的主要作用:虚拟地址到物理地址的转换;访问权限控制;设置虚拟存储空间的缓冲。 虚拟存储器:程序一般存于掉电不丢失的硬盘中,但是硬盘读写速度慢。所以系统上电后一般只在ROM中完成小部分硬件初始化程序,并把程序搬运到内存中。然后,从内存中开始执行程序。但是,内存有限,不能一次性把所有代码加载到内存中,所以只把当前用到的一部分代码加载过来,把没用到的搬回磁盘。此时的效果等同于把所有程序加载到内存中,用户看来系统具有的内存比实际内存大的多。对于32位的CPU系统中虚拟地址空间有4GB大小,而嵌入式系统中的实际物理地址空间可能远小于此。
把虚拟地址空间分成一个个固定大小的块,每一块为一页。物理地址空间也分为同样大小的页。MMU要实现虚拟地址到物理地址的映射,CPU核发出虚拟地址VA;VA被转换为变换后的虚拟地址MVA给MMU;MMU把MVA转换成物理地址PA。 页表:位于内存中,页表的基地址存于CP15的C2寄存器中,表中每一行(叫一个地址变换条目entry)对应于虚拟存储空间的一个页,这个entry包含虚拟内存块和物理块地址的对应关系、该页的权限、该页的缓冲特性。 TLB(快表):CPU和内存速度级别相差较大,每次到内存中查表代价较大。根据程序局部性原理,把当前访问需要的条目存放在一个和CPU中寄存器速度差不多16字左右的TLB中。MMU把存储空间分为16个域,PC15中C3每两位控制一个域的访问权限。 ARM支持的存储块:段1MB;大页64KB(可分为16KB子页);小页4KB(可分为1KB子页);极小页1KB(只能保存在细页表中)。 大致过程: 1)根据VA和C2找到一级页表条目 2)若是段描述符,返回物理地址 3)若该条目是二级页表描述符,继续根据虚拟地址找下一个条目 4)找到第二个页描述符,返回物理地址 一级页表描述符
[1:0]=01粗页表:256行,占内存1KB,每个条目表示4KB空间;[31:10]是二级页表地址。如:粗页表+大页,因为指向物理空间只能为1MB,所以256/16*64K或64/4;连续16个条目保存同一大页描述符。 C2[31:14]+MVA[31:20]+0b00->粗页描述符; 粗页描述符[31:10]+MVA[19:12]+0b00->大页描述符; 大页描述符[31:16]+MVA[15:0]->PA [1:0]=10段,[31:20]一块1MB物理地址空间的起始地址。MVA[19:0]在这块中寻址。 P15的C2[31:14]+MVA[31:20]+0b00——>段描述符。 段描述符[31:20]+MVA[19:0]-->PA。 [1:0]=11细页表,1024行,每个条目表示1KB空间;[31:12]是二级页表地址;细页表+大页,1024/64*64K或64/1,每个条目表示1KB,连续64个条目保存同一大页描述符 二级页表描述符
阅读全文
0 0
- MMU虚拟内存到物理内存
- 虚拟内存到物理内存(32位)
- 虚拟内存和物理内存
- 虚拟内存和物理内存
- 物理内存和虚拟内存
- 虚拟内存和物理内存
- 虚拟内存和物理内存
- 虚拟内存VS物理内存
- 虚拟内存、物理内存
- 虚拟内存 物理内存
- 物理内存、虚拟内存
- 物理内存与虚拟内存
- 虚拟内存与物理内存
- 虚拟内存、物理内存
- 虚拟内存与物理内存
- 虚拟内存vs物理内存
- 物理内存和虚拟内存
- 物理内存 虚拟内存
- BZOJ 1190 梦幻岛宝珠 [01背包][二进制优化]
- PHP中include()与require()的区别说明
- Tomcat安装及启停
- 在cmd中运行.py文件: python
- exception
- MMU虚拟内存到物理内存
- iOS程序员泪崩的一天
- 优酷UE4教程
- android版本过高导致下载软件后无法自动安装
- 'module' object has no attribute 'fork'
- SpringMVC使用AbstractExcelView导出Excel
- pat-a1076. Forwards on Weibo (30)
- 统计文件内的字符数,单词数,行数
- IO库