单片机 > 单片机程序设计 > 详情

ARMv8 内存管理架构.学习笔记

发布时间:2020-08-26 发布时间:
|

第1章 分级存储架构

1.1基础认识

通常为了保证计算机的整体性能,内存和CPU之间的通信需保证很高的传输速率,然而这受限制于内存的大小和昂贵的硬件实现,传输速率和内存容量大小的关系遵循“Smaller is faster”原则,使用更大容量的内存势必会增加传输延迟降低性能。为优化计算机整体性能,ARMv8存储系统中提供了多级Cache用于达到内存容量大小和传输延迟之间的平衡。可以从以下两个方面来描述典型的分级存储架构 。

1.1.1 从数据通路描述

。PE发出虚拟地址VA转换需求

。虚拟地址VA经过Address translation的TTW机制试图得到物理地址PA.

。物理地址PA有可能在Level1 Cache、Level2 Cache或者Main Memroy中.

。若PA既不在Cache 也不在Main Memroy,将出现Page fault,然后由OS实现重新加载.

。若顺利找到PA,则给回PE继续执行.

 

寄存器 <=> Cache

程序猿/编译器

Cache <=> Main Memroy

Cache 控制器,由HW实现

Main Memroy <=> Disk

OS 操作系统

Disk <=> Tape

用户

 

PoU

指当前CPU的指令Cache、数据Cache、TTW所共享一个存储点,每个CPU在Cache L1都有独立的IC和DC,Cache L2对于同一个CPU集群是共享的,POU一般值的是L2范围内的内存.

PoC

指所有CPU的指令Cache、数据Cache、TTW所共享一个存储点,不同的CPU集群有对于不同的Cache L2,所以对于不同的CPU集群而言,他们共同的存储点是内存,这就是POC拓扑结构.

 

1.2 系统层内存模型

1.2.1 内存属性

属性

Note

Normal

(普通)

。读写经过Cache

。支持乱序,内存访问顺序同编程顺序可能不一致

。支持预读取?

。支持内存非对齐访问

Device

(设备)

。读写不经过Cache

。不支持乱序内存访问

。不支持预读取

。不支持内存非对齐访问

Shareability

(可共享性)

指当前内存页表项的数据是否可以同步到其它CPU上,多核CPU调用带有该属性页表项的数据,一旦某个CPU修改了数据,那么系统将自动更新到其它CPU的数据拷贝,实现内存数据一致性.

Cacheability

(可缓存性)

指当前内存页表项对于的数据是否可以加载到Cache当中.

 

1.2.2 地址空间

地址类型

最大支持位宽

寄存器配置

PA(Physical address)

48 bit

ID_AA64MMFR0_ELx.PARange

OA(Output address)

48 bit

TCR_ELx.IPS

IA(Input address)

48 bit

TCR_ELx.T0SZ、TCR_ELx.T0SZ

IPA(Intermediate Physical address)

48 bit

VTTBR_EL2.T0SZ

 

1.2.3 字节编码支持

• 两种存储类型

big-endianness

(大端存储)

指字数据或者半字数据的最高字节存放在内存最低字节地址上,而字数据或者半字数据低字节则存放在内存地址的最高地址中.

little-endianness

(小端存储)

指字数据或者半字数据的最高字节存放在内存最高字节地址上,而字数据或者半字数据低字节则存放在内存地址的最低地址中.和大端存储相反.

 

• 寄存器配置

异常等级

精确数据访问

Stage 1 TTW

Stage 2 TTW

EL0

SCTLR_EL1.E0E

SCTLR_EL1.EE

SCTLR_EL2.EE

EL1

SCTLR_EL1.EE

SCTLR_EL1.EE

SCTLR_EL2.EE

EL2

SCTLR_EL2EE

SCTLR_EL2.EE

N/A

EL3

SCTLR_EL3.EE

SCTLR_EL3.EE

N/A

 

第2章 虚拟内存系统架构(VMSA)

2.1 VMSAv8-64

• VMSA的基本思想是程序、数据、堆栈的总和内存大小可以超过物理存储器的大小,OS把当前使用的部分送入到内存中,而把其他未被使用的部分保存在磁盘上。例如,对一个16MB的程序和一个内存只有4MB的机器,OS通过调度,可以决定各个时刻将哪4M的内容送入内存中,并在需要时在内存和磁盘间交换程序片段,这样就可以把这个16M的程序运行在一个只具有4M内存机器上了。

• VMSA 提供MMU(Memory Management Unit)用于实现PE访问内存的VA->PA地址转换和控制、访问权限、内存属性决定和检查等。

 

• 相关命名解析

VMSA

描述ARMv8地址转换方案,包括Stage 1 和 Stage 2两个阶段.

VMSAv8-32

描述AArch32 地址转换方案,包括单一阶段的地址转换

VMSAv8-64

描述AArch64 地址转换方案,包括单一阶段的地址转换

 

2.1.1 地址转换系统

• 地址类型

VA(虚拟地址)

我们可看到的地址都是虚拟地址,最大宽度支持48bit,AArch64下VA地址空间分为顶部VA和底部VA两个子区域,每个VA子区域最大支持256TB.

。底部VA:0x0000_0000_0000_0000 =>0x0000_FFFF_FFFF_FFFF

。顶部VA:0xFFFF_0000_0000_0000 =>0xFFFF_FFFF_FFFF_FFFF

。VA[55]决定使用top VA还是bottom VA

IPA(中间物理地址)

如果不支持Stage 2转换,那么IPA == PA。如果支持Stage2,那么IPA:

。 Stage 1 的OA (Output address)

。 Stage 2 的IA (Input address)

。 最大支持48bit

PA(物理地址)

物理内存单元映射中的地址,可以看做是PE到内存系统的输出地址(OA),PA最大支持48bit

。Secure状态下只支持Stage 1地址转换

。Non-secure EL1/EL0既支持Stage 1 也支持Stage 2地址转换.

。只有EL2才支持Stage 2,所以Stage 2只为EL2服务的

 

。使用64bit descriptor entries(描述符实例)

。最高支持4个Level的地址查找

。Input address (IA)最高支持48bit

。Output address (OA)最高支持48bit

。转换颗粒尺寸支持三种大小:4KB16KB64KB (和Page size概念类似)

 

2.1.2 内存转换粒度

• 三种转换粒度解析

属性

4KB granule

16KB granule

64KB granule

转换表中有最大条目数 (项)

512

2048

8192

每级lookup最大可解析地址位

9-bit

11-bit

13-bit

Page Offset

VA[11,0]=PA[11,0]

VA[13,0]=PA[13,0]

VA[15,0]=PA[15,0]

寄存器配置 (x = 0,1,2,3)

TCR_ELx.TG0 =’00’

TCR_ELx.TG0 =’10’

TCR_ELx.TG0 =’01’

 

• 4KB转换粒度图解

。最大支持4个Level 的Lookup ,Level0~Level3每个层级的查找最大可以解析9-bit数据

。IA[38:30]对应Linux中的PGD,IA[29:20] =>PMD,IA[20:12] => PUD, IA[11:0] => PTE

。Page Offset IA[11:0] == OA[11:0]

。Translation Table 所需内存Size较大

 

。最大支持4个Level 的Lookup ,Level1~Level3每个层级的查找最大可以解析11-bit数据

。Level 0 是IA[47],只有1个bit宽,比较特殊.

。Page Offset IA[13:0] == OA[13:0]

。Translation Table 所需内存Size中等

 

。最大支持3个Level 的Lookup ,Level2~Level3每个层级的查找最大可以解析13-bit数据

。Level 1 是IA[47:42],只有6个bit宽,只能解析2^6 个条目

。Page Offset IA[15:0] == OA[15:0]

。Translation Table 所需内存Size最小

 

。TTBR 寄存器提供Level 0查找的基地址,通过此基地址和IA[n:39] => 查找到Level 1基地址

。Level 1基地址结合IA[38:30]=> 查找到Level2 的基地址

。Level 2基地址结合IA[29:21]=> 查找到Level3 的基地址

。Level 3基地址结合IA[20:12]=> 查找物理页框所在地址OA

。最后得到需要的物理地址PA[47:0] <= OA[47:12] + IA[11:0]

 

。Stage 2有级联table的概念,可以减少level的级数

。所谓级联就是假如有IA[40:0],而Level1解析地址段为IA[38:30],超过了2个bit,而2^40 = 2^2*2^38,所以相当于要2^2个这样的translation table来实现级联解析。ARMv8规定,Stage 2最多支持4-bit级联,也就是最大级联2^4 == 16个translation table级联解析.以达到减少查找level的目的.

。VTTBR_EL2寄存器提供初始Level查找基地址,Stage 2只为EL2服务

。同Stage 1,Level 1支持1GB的内存block,Level 2支持2MB的内存block

 

类型

Bit[1:0]

Note

Invalid

X0

表明无效描述符,出现Page fault

Block

01

表明是匹配到一块Block内存范围基地址

Table

11

表明是匹配到下一级Translation Table基地址

 

类型

Bit[1:0]

Note

Invalid

X0

表明无效描述符,出现Page fault

Reserved

01

保留

Page

11

表明是个Page基地址,给出内存页的输出地址.bit[47:12]

 

转换粒度

Note

4KB

。Level 0不支持block 转换

。Level 1 转换表block描述符映射关联1GB的IA范围

。Level 2 描述符映射关联2MB的IA范围

16KB

。Level 0/1不支持block 转换

。Level 2 转换表block描述符映射关联32MB的IA范围

64KB

。Level 1不支持block 转换

。Level 2 转换表block描述符映射关联512MB的IA范围

 

2.1.5 描述符内存属性

NSTable

 

Stage 2

不支持

安全模式标志位

APTable

下一级levellookup的access permission

XNTable

下一级level lookup的执行权限

PXNTable

限制XN的特权bit,P是指特权.

 

2.2 VMSAv8-32

2.2.1 地址转换系统

• 地址类型

VA(虚拟地址)

保存在PC,LR,SP中的看得到地址都是虚拟地址VA

。VA最大支持32bit宽,地址空间最大到4GB

。地址范围:0x00000000~0xFFFFFFFF

IPA(中间物理地址)

如果不支持Stage 2转换,那么IPA == PA。如果支持Stage2,那么IPA:

。 Stage 1 的OA (Output address)

。 Stage 2 的IA (Input address)

。 AArch32的IPA最大支持40bit宽(使用16MB转换颗粒)

PA(物理地址)

物理内存单元映射中的地址,可以看做是PE到内存系统的输出地址(OA),PA最大支持32bit宽

 

• 地址转换规


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C8051F020的UART