MMU(内存管理)
1:将程序中的虚拟地址映射到具体的物理地址,所谓虚拟地址,即为程序中的地址,对于不同的程序所使用的虚拟地址可能相同,但是通过mmu,可以将其映射到不同的物理地址,防止访问上的冲突。
2:控制访问的权限管理。
深入剖析地址转换
对于一个地址,假设为32位的虚拟地址:
31-20位索引符 |
根据高31-20位描述符表数据,在translation table中找到一个32位的表项。
1-0位 |
这个表项的最后两位决定寻址方式:
00:表示无效的转化方式
01:表示粗页转化方式,较少用
10:表示段转化方式
11:表示细页转化方式
注意四几个问题:
1:表象是由工程师自己建立的
2:表项的存储在内存中
3:表项的基地址TTB(translation table base),这个地址由工程师自己决定,定义好后,将地址存储到cp15中的c2寄存器中。
段转换方式
表项:
基地址31-20 |
10 |
虚拟地址:
31-20位索引符 |
表项的最后两位为10,则表示使用段转化方式,相应的虚拟地址中19-0位则作为偏移地址。
段式一阶表项结构:
cache和buffer:
上图是CPU读取数据需要经过哪些部分缓冲区
ARM 中将存储空间分为了16个域,具体使用哪个域由一级表项中的“damain()”决定
细页转换方式:
虚拟地址:
31-20位索引符(实际上是一级也表的偏移) |
19-11二级页表偏移地址 |
10-0位物理页偏移地址 |
一级页表项:
31-20位二级页表基地址 |
11 |
二级页表项:
物理页基地址 |
注意:一级表项和二级页表是需要工程师自己定义的。