ARM的MMU内存管理工作原理

文章目录

  • 1.虚拟地址 物理地址 逻辑地址 线性地址 运行地址之间的联系?
  • 2.MMU是什么?以及有mmu有什么作用?
  • 3.MMU、RAM与arm core之间的关系?
  • 4.MMU的TLB与配置
  • 5.MMU的地址映射
    • 5.1 1M的section映射方式
    • 5.2 二级映射4k的页映射

旨在系统理解mmu,带着问题来理解原理,本文以armv7进行说明。

1.虚拟地址 物理地址 逻辑地址 线性地址 运行地址之间的联系?

逻辑地址是由编译器所产生的符号表里面的地址(可以使用binutils工具查看可执行文件的符号表);
(逻辑地址通过段映射为线性地址(虚拟地址为中间层),如果未开启二级映射,其实就是物理地址。这个是x86中的说法)因为arm将最开始的地址称为VA即virtual address,即虚拟地址,然后有一个中间层的地址,最后到物理地址。
不要被这些地址的名字所蒙蔽,先看原理再回过头看看就是有清晰的认知。
物理地址、运行地址是一样的,比如符号表产生的汇编代码的地址为0x12345678,在没有mmu的情况下,运行地址也必须是0x1234567才能保证指令的正确运行,否则有可能会出错。mmu的出现便是一种较好的解决方法。

2.MMU是什么?以及有mmu有什么作用?

MMU即memory management unit内存管理单元,提供了关于内存的重要功能,使得多任务变得可能,可以使得内核任务的所访问地址是独立的,然后通过mmu转换为实际的物理地址,而无需人为的重定位。

3.MMU、RAM与arm core之间的关系?

ARM的MMU内存管理工作原理_第1张图片
arm核访问虚拟地址,通过mmu转换为实际的物理地址,可以简单认为mmu就是一个转换表,实现虚拟地址到物理地址之间的转换。

4.MMU的TLB与配置

何为TLB,缩写为Translation Lookaside Buffe,其实还是个表格,只不过这个表格的查找速率远远大于RAM内部的表格,转换虚拟地址至物理地址的时候,是先从TLB进查找,如果找不到在尝试RAM中的,当然如果再找不到,那就是缺页异常了。
MMU的配置
MMU的配置管理主要通过arm的CP15协处理器进行操作配置的,可参考Arm的协处理器的介绍(在arm专栏中)。对于内核来讲,其实就是作为mmu的使用者,主要是页表的填充,和打开以及关闭mmu等操作。

5.MMU的地址映射

armv7的映射一共有两级映射,分为:
一级映射,16M 、1M大小的section
二级映射,64K 、4K大小的page size

5.1 1M的section映射方式

ARM的MMU内存管理工作原理_第2张图片
第一步:其中Translation Table base address为一级页表的基地址,存储在CP15协处理器的TTBR0或者TTBR1当中;
第二步:找到第一级页表的基地址后,通过虚拟地址找到页表里面的页表项,因为是 1M的映射方式,需要映射4G的内存大小,所以一共有4096个页表项;
第三步:找到对应的页表项后,通过一级页表项的bits[31:20]与虚拟地址的bits[19:0]之后便可以计算出物理地址。
对于一级页表,需要明确两个概念,页表是一个表,其中包含了4096个页表项。在一级页表项中页表项一共有4中格式,1M的页表项只是其中的一种
一级页表对应的4096个页表项:
ARM的MMU内存管理工作原理_第3张图片

一级页表项的格式:
ARM的MMU内存管理工作原理_第4张图片
在armv7中,一级页表项的格式一共有其中,分别代表为缺页即无映射、二级映射、1M的section映射、16M的section的映射。其中bits[1:0]用来区分是否为缺页映射,bit18用来区分section与supersection的映射方式。

5.2 二级映射4k的页映射

ARM的MMU内存管理工作原理_第5张图片
第一步:首先先取页表的基地址,此其实与上面的section映射是一样的,然后通过虚拟地址的bits[31:20]来找到页表里面的页表项;
第二步:上面已经介绍过,页表项的格式一共有四种,其中bits[1:0]用来代表为二级的页映射;
第三步:同理来取二级页表存储的基地址,然后通过虚拟地址的bits[19:12]字段来找到二级页表里面的页表项;
第四步:找到对应的二级页表项后,通过二级页表项的bits[31:12]与虚拟地址的bits[11:0]之后便可以计算出物理地址。
二级页表项的格式:
ARM的MMU内存管理工作原理_第6张图片
其中armv7的二级页表项的格式一共有三种:缺页异常、4K的小页、64K的大页映。
二级页表的大小为256个页表项(对应为4K映射),页表大小为16个页表项(对应64K映射)。
二级页表对应的二级页表项(以4K说明):
ARM的MMU内存管理工作原理_第7张图片
在此需要搞清楚页表、页表项、页表基地址、页表项描述符之间联系:
页表:就是一个表,里面装的就是页表项;
页表项:对应的一级页表项描述符有4种格式,二级页表项描述符有3种格式;
页表基地址:一级页表基地址是存储在ttbr0或者ttbr1中,二级页表是通过一级页表项与虚拟地址计算得出,需要说明的是页表基地址指的是物理地址,而不是虚拟地址。

你可能感兴趣的:(ARM技术专栏,arm)