MMU学习笔记

MMU内存管理单元,负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查。

一个程序运行时没有必要全部装入内存,而仅需将那些当前要运行的部分先装入内存,其余部分在用到时再从磁盘调入,而当内存耗光时再将暂时不用的部分调出到磁盘。

1 虚拟地址:对于32为的cpu其虚拟内存地址范围为0~0xFFFFFFFF,虚拟地址最终要转换为物理地址才能读写世界的数据。

ARM CPU上的地址转换过程涉及三个概念:虚拟地址(VA)(CPU内核对外发出VA),变换后的虚拟地址(MVA)(VA被转换为MVA供cache和MMU使用,在此将MVA转换为PA),物理地址(PA)(最后使用PA读写实际设备)。

(1)CPU看到的用到的只是VA,CPU不管VA最终是怎样到PA的;

(2)而cache、MMU也是看不到VA的,它们使用的是MVA(VA到MVA的转换是由硬件自动完成的);

(3)实际设备看不到VA、MVA,读写设备使用的是PA物理地址。

2 段映射和页映射:

段只用到一级页表大小为1MB,以页的方式进行转换时会用到二级页表,页的大小:大页:64KB,小页:4KB,极小页:1KB;

段描述符、大页描述符、小页描述符、极小页描述符——它们保存段、大页、小页或极小页的起始物理地址;

粗页表描述符、细页表描述符——它们保存二级页表的物理地址;

转换表基址:只有31:14位有效,13:0应该为零(SBZ),转换表基址寄存器(CP15的寄存器2),转换表基址寄存器的31:14位与虚拟地址的bits[31:20]和两个0位链接形成32位的物理地址;

image

修改后的虚拟地址(MVA):首先合体的是bits[31:20],下面在根据情况依次合体;

3 一级描述符的最低两位:

(1)0b00:无效;

(2)0b01:粗页表(Coarse page table),共有256个条目,每个条目大小为4KB的物理地址空间,也就是总的大小为1MB;

条目的个数是由虚拟地址的第二级表索引位数决定的;

粗页表描述符各个字段的意义如下:

Bits[1:0] 描述符类型标识(0b01 表示粗糙页表描述符)
Bits[4:2] 由具体实现定义
Bits[8:5] 这个描述符控制的页的16 种域之一
Bits[9] 现在没有使用,应该为零
Bits[31:10] 页表基地址是一个指向第二极粗糙页表的指针,它给出第二级表访问的基地址。而第二级粗糙页表必须在1KB 边界对齐。

MVA到PA的转换过程:

A:页表基址(转换表基址)寄存器的bits[31:14]和MVA的bits[31:20](第一级表索引)组成一个低两位为0的32位地址,MMU利用这个地址(第一级页表地址)找到第一级描述符,当然是粗页表描述符,也就是首先要获得第一级描述符的地址;

B:此时粗页表描述符(第一级描述符)的bits[31:10]为页表基址,与虚拟地址(MVA)的bits[19:12](第二级表索引)合体,最后两位补0,构成了第二级描述符的地址,可以根据此地址找到第二级描述符,通过第二级描述符的最后两位bits[1:0]的数值再来分门别类;

(3)0b10:段(section)

段描述符各个字段的意义:

Bits[1:0] 描述符类型标识(0b10 表示节描述符)
Bits[3:2] 高速缓存和缓冲位
Bits[4] 由具体实现定义
Bits[8:5] 这个描述符控制的节的16 种域之一
Bits[9] 现在没有使用,应该为零
Bits[11:10] 访问控制,AP
Bits[19:12] 现在没有使用,应该为零
Bits[31:20] 节基址,形成物理地址的高12 位

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

A:页表基址(转换表基址)寄存器的bits[31:14]和MVA的bits[31:20]组成一个低两位为0的32位地址,MMU利用这个地址(第一级页表地址)找到段描述符(第一级描述符);

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

(4)0b11:细页表(Fine page table),共有条目1024个,每个条目大小为1KB的物理地址空间

细页表的各个字段的意义:

Bits[1:0] 描述符类型标识(0b11 表示精细页表描述符)
Bits[4:2] 由具体实现定义
Bits[8:5] 这个描述符控制的页的16 种域之一
Bits[11:9] 现在没有使用,应该为零
Bits[31:10] 页表基地址是一个指向第二级精细页表的指针,它给出第二级表访问的基地址。而第二级精细页表必须在4KB 边界对齐。

MVA到PA的转换过程:

A:页表基址(转换表基址)寄存器的bits[31:14]和MVA的bits[31:20](第一级表索引)组成一个低两位为0的32位地址,MMU利用这个地址(第一级页表地址)找到细页表描述符(第一级描述符);

B:根据获得的细页表描述符,取出bits[31:12](页表基址),与MVA的bits[19:10](第二级表索引)合体,bits[1:0]补0,获取第二级描述符的地址。

4 二级描述符

根据二级描述符最低两位,可分为以下几种情况:

(1)0b00:无效

(2)0b01:大页描述符

大页描述符的字段有如下意义:
bits[1:0] 表示描述符的类型
bits[3:2] 高速缓促和缓冲位
bits[11:4] 访问权限位。这些为控制对页的访问。

大页被分成4 各子页。
AP0 编码对第一个子页的访问权限。
AP1 编码对第二个子页的访问权限。
AP2 编码对第三个子页的访问权限。
AP3 编码对第四个子页的访问权限。
bits[15:12] 现在没有使用,应该为零。
bits[31:16] 用来形成物理地址的对应位。

以保存在粗页表描述符中的大页描述符为例,说明地址转换的过程:(接着上面的粗页表转换)

C:此时第二级描述符为大页描述符,取出大页描述符中的bits[31:16]——大页基址,它和MVA的bits[15:0]组成一个32位的物理地址,这就是MVA对应的PA。

可见B和C两步,MVA的位有重合,bits[15:12],当这四位由0000——1111变化时,B返回的大页描述符相同,所以粗页表中连续16个条目都保存同一个大页描述符,因为大页大小为64K。

(3)0b10:小页描述符

小页描述符的字段有如下意义:
bits[1:0] 表示描述符的类型
bits[3:2] 高速缓促和缓冲位
bits[11:4] 访问权限位。这些为控制对页的访问。

小页被分成4 各子页。
AP0 编码对第一个子页的访问权限。
AP1 编码对第二个子页的访问权限。
AP2 编码对第三个子页的访问权限。
AP3 编码对第四个子页的访问权限。
bits[31:12] 用来形成物理地址的对应位。

转换过程:以粗页表中保存小页描述符为例说明:

C:获得第二级描述符,是小页描述符,取出bits[31:12]与MVA的bits[11:0]组成一个32位的地址,这就是MVA对应的PA。

可以发现使用MVA是没有重合的位,这是因为粗页表中每个条目的大小是4KB,而小页的大小也刚好是4KB,保存小页描述符只需一个条目就够了,如果是用细页描述符保存小页,这是需要4个连续的条目,也就是要重复MVA的2两位bits[11:10].

(4)0b11:极小页描述符

微页描述符的字段有如下意义:
bits[1:0] 表示描述符的类型
bits[3:2] 高速缓促和缓冲位
bits[5:4] 访问权限位。这些为控制对页的访问。
bits[9:6] 现在没有使用,应该为零。
bits[31:10] 用来形成物理地址的对应位。

5 总

可见,真正对应物理地址的是:

段:大小1MB,使用MVA的bits[19:0];

大页:大小64KB,使用MVA的bits[15:0];

小页:大小4KB,使用MVA的bits[11:0];

极小页:大小1KB,使用MVA的bits[9:0]。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值