1.MMU简介
MMU(Memory Management Unit),内存管理单元,主要职责:将虚拟地址映射为物理地址,提供硬件机制的内存访问权限检查。
2.基本概念
虚拟地址(Virtual Address,VA),修改后的虚拟地址(Modified VA),物理地址(Phisical Address)
VA是CPU使用的地址,MVA是MMU、Caches使用的,他们的映射关系:
(1)cpu看到的是VA
(2)caches和MMU使用的是MVA,
(3)实际物理设设备使用的是PA。
3.地址转换中的基本概念
地址的转换就像是数学中映射,利用函数公式,多对1,就是多个虚拟地址对应同一个物理地址。
这里地址转换用的是页表的方式。
(1)页表
页表是由一个个表项(Entry,又称作描述符)组成的物理表,每个页表项或是一个物理页(一块物理内存,大小为1k,4k不等)的起始地址,或是一个二级页表的地址(当是一个二级页表的地址时,又可以称该页表为页描述符)。所有的页表都用物理地址访问。
(2)表项(描述符)的分类
依据描述符保存的内容,可以分为两类。
一类保存的是直接的物理页或段的起始地址,如段描述符、大页、小页、极小页描述符。
另一类保存的是二级页表的物理地址,如粗页表描述符,细页表描述符。
(3)一级映射与二级映射
一级映射,是指以段(Section,大小1MB)的方式进行转换。
二级映射,是以页的方式进行转换。ARM页大小由三种:1k,4k,64k。
4.地址转换的过程
(1)CPU发出一个VA,是怎么转换为MVA的
这在上图可以看到,是通过一个硬件电路转换的。
在ARM9里面,如果VA<32M,利用进程标识号PID转换得到MVA
过程如下:
if(VA < 32M)
MVA = VA | ( PID<<25 )
else
MVA = VA
只是上面的过程是由硬件实现的。
这样为VA进行了一级映射,为什么呢?在linux系统里,每个进程的地址空间0-4G,0-3G是进程独有的,称为用户空间,3G-4G是系统的,称为内核空间,所有进程共享。如果两个进程所用的VA有重叠,在切换进程时,为了把重叠的VA映射到不同的PA上,需要重建页表、使无效caches和TLBS。使用了MVA,使进程在VA相同的情况下,使用不同的MVA,进而PA也不同。这就是在VA与PA之间加上一次到MVA的映射的意义。
(2)MVA到PA的转换
上面说了,虚拟地址到物理地址的转换有两种方式:公式映射+页表转换。
概念上面也介绍过了。
这里就进行实际的转换说明。
首先,给定一个MVA,要进行转换,先要找到一级页表,怎么找?
有一个寄存器,TTB寄存器,页表基地址寄存器,负责保存一级页表的基地址,当然是物理地址。
TTB寄存器是集成在CP15协处理器中的,
TTB的格式:
因此,一级页表的地址是16k对齐的,因为[14:0]要求为0.
一级页表的描述符格式:
一级页表的表项,可以是个段描述符,粗页表描述符或细页表描述符。
共同点是,每个描述符都代表1MB的物理地址空间。
不同点:段描述符直接指向一个1MB地址空间,可以直接访问;而页表描述符,顾名思义,就是指向一个二级页表,还需要另一次映射。
二级页表的描述符格式:
二级页表有两种:粗页表(Coarse Page Table )+细页表( Fine Page Table)
粗页表与细页表的异同:粗页表有最多256个表项,每个表项可表示4kb空间,如果表项是个大页页表描述符,则连续16个表项都表示同一个大页描述符。
细页表中每个表项代表1kb,指向一个极小页;也可扩展成4k的小页,64k的大页。
页表的结构与格式就是这些了。。下面看转换的具体过程
段地址转换
大页地址转换
小页的地址转换
极小页的地址转换
阅读(4799) | 评论(1) | 转发(2) |