OK6410,MMU,内存管理 杂谈

OK6410,MMU,内存管理 杂谈

  MMU其实就是一个页表。将虚拟地址通过查表的方式,对应到物理地址去他由一个或一组芯片组成,一般存在与协处理器中。

  1.将虚拟地址转化为物理地址

  2.访问权限管理

1.1得出mmu功能

OK6410,MMU,内存管理 杂谈

  这个图就说明了MMU的作用:

  有三个任务在运行,运行的地址都是0x400000,如果不进行处理,肯定是不行的。所以加入了MMU,MMU其实就是一个页表。将虚拟地址通过查表的方式,对应到物理地址去。虽然三个任务的运行地址都是0x400000,但是这个地址是虚拟地址,在页表中,将每个任务的虚拟地址对应到不同的物理地址,这样,就实现了各个任务虽然是同一个虚拟地址,但是在不同的物理地址中运行。

1.2映射方式(ARM920T_TRM1_S    57页)

  映射方式:映射方式有两种,段映射和页映射。段映射只用到一级页表,页映射用到一级页表和二级页表。

  映射粒度:段映射的映射粒度有两种,1M section和16M supersection;页映射的映射粒度也有两种,4K small page和64K large page。

OK6410,MMU,内存管理 杂谈

1.3页表

  MMU要自动进行虚拟地址到物理地址的转化,首先要找到一级页表,而一级页表的基地址(TTB:translation table base)则是保存在CP15的C2寄存器中。因此,当程序员创建好相应的页表后,需要将页表基地址写入该寄存器。

MMU有一级转换和二级转换,其实就是查几次表。对于一级转换,就是只查一次页表,就确定了物理地址。这个在S3C6410中,方式是段映射。对于二级转换,就要查两次页表或者三次,才能确定物理地址,这个在S3C6410中。有两种方式,一种细页方式,一种粗页方式。这两种的区别就是每一页对应的大小不一样而已。

OK6410,MMU,内存管理 杂谈

  通过虚拟地址的[31:20],找到对应的转换描述符,这个转换描述符其实就是一个存在ram中的32位的一个数据。通过判断这个描述符的最后两位,判断是什么转换。

1.3.1一级页表描述符

OK6410,MMU,内存管理 杂谈

  一级页表描述符后两位如果是10则表示为段转换。

  如果是段转换,就按照段转换的格式去转化物理地址

  如果是页转换,就在去找第二级的页表,然后再按照二级页表的格式去转化物理地址。

  B:表示是否使能write buffer(使用buffer可以提高cpu运行效率-à当CPU访问内存数据时但是内存没准备此时cpu可以将数据暂时存放于buffer)

  C: 表示是否开启cache(cahce用来保存cpu可能要经常访问内存区域的数据,以便于快速访问)

 XN:

  Domain:用来说明该段属于哪一个域,ARM11共有16个域(由CP15的C3来设置),每个域可以设定不同的权限。将段分配到某个域,就使这段的权限和设定的域权限一样。   (手册arm11 P195)   

  P:表示段区间有ECC,ARM11不支持,所以这一位为0.

  AP:访问权限,这个配合域,说明该段地址的访问权限。(手册arm11 P329)

  APX: 提供额外的访问权限。

 S:表示区域是否共享。0不共享,1共享。这个手册上说,是为了多核使用的。目前用不到,设置为0.

   nG:

  Section base address:这个就是段的物理地址的高12位。

1.4段转换

  ARM11是32位的,对于段转换,每一个段代表物理的1MB地址,一级页表总共有4096个转换符,所以够表示的空间是4G。页表的首地址就是TTB,这个地址是很重要的,因为有了这个地址才能知道页表是存在什么地方的,才能通过偏移找到对应的描述符。所以,是有一个寄存器来保存这个地址的,这个寄存器就在CP15的c2寄存器。

  通过虚拟地址的高12位偏移,找到页表中的对应描述符,判断描述符的最后两位,确定是什么转换。10的话就表示是段转换。

  判断是段转换后,将描述符的高12位取出,这个就是物理的基地址,在和虚拟地址的后20位拼接,就得到对应的物理地址。

  对于段转换,每一个段代表物理的1MB地址。为什么是1MB了。因为总共是有4096个描述符,而ARM11是32位的,所以能够表示的空间是4G。

以段的方式进行映射时,虚拟地址MVA到物理地址PA的转换过程如下:

  ①页表基址寄存器位[31:14]和MVA[31:20]组成一个低两位为0的32位地址,MMU利用这个地址找到描述符

  ②取出段描述符的位[31:20](段基址),它和MVA[19:0]组成一个32位的物理地址(这就是MVA对应的PA)

OK6410,MMU,内存管理 杂谈

OK6410,MMU,内存管理 杂谈

1.5页转换(ARM11  360页

  二级转换

OK6410,MMU,内存管理 杂谈

1.6程序设计

1.6.1建立页表

  使用段映射的方式,那么就要将段映射的描述符写入到相应的内存中去。

  首先将页表放在ddr的第一个位置,也就是0x50000000。所以需要将这个地址写入到TTB中。 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/109bca50bc84383c6504a9d7ada4791f.html