ARM64虚拟内存

名词解释

转换粒度(translation granule) 执行物理页和虚拟页之间转换的最小粒度(物理页大小)

内存页(Page) 内存页一般指转换粒度

内存块(block) 内存块一般指多个连续的内存页组成的一块内存,当然把一个内存页也称为内存块也是可以的

页表

目前64位架构的MMU通常使用4级页表(level 0,1,2,3),支持最大48位有效地址。页表项可以指向下一级页表(table descriptor)或者指向内存块/页(block descriptor, 下图中page descriptor也是block descriptor的一种,区别在于Page Descritpor仅表示最后一级页表的页表项),其中leve3页表只能指向内存页,level0级页表只能指向下一级页表,页表项基本结构如下图所示。

arm64可以通过配置TCR_ELx.DS支持5级页表来支持52bit物理内存

在这里插入图片描述
页表项各字段长度和说明如下,我们这里暂时只考虑以4KB为转换粒度并且使用48bit物理地址的情况
在这里插入图片描述

upper attributes占用高14位(对于table descriptor占用高12位),其和address字段之间的部分保留用于支持52bit的物理地址。

address字段占用中间36位(bit[47:12], 以4kb为粒度则地址的低12bit均为0,无需存放,因此address为实际48位物理地址的高36位),如果我们使用大内存页(即转换使用的最后一级页表<3),则address字段的低位字节将被忽略,具体来说,如果使用level 2级别页表作为最后一级,其一个页表项指向2MB的内存页,因此address字段中低9bit被忽略;如果使用level 1级别页表最为最后一级页表,其一个页表项指向1GB内存,,因此address字段低18bit将被忽略。

lower attribute占用bit[11:2],bit[1]表示该页表项的类型(0表示block descriptor,指向最终内存块;1表示table descriptor,指向下一级页表),bit[0]表示该表项是否有效(0表示该表项无效,1表示该表项有效),关于upper attributes和lower attribute,见页表项属性小节。

参考Arm® Architecture Reference Manual for Armv8(G.a) 2717页

页表项属性

Block descriptor

在这里插入图片描述

Lower attributes
字段名称说明
bit[11]nG (not Global)表示该页表项是全局的还是进程特定的,用于TLB刷新管理
bit[10]AF (Access Flag)表示该页表项是否访问,如果设置为0,则在试图加载该页表项到TLB时会触发异常,需要将其设置为1才能正常加载到TLB中,可以使用该位来管理正在使用的内存页以便于在内存不足时换出未使用的内存页。
bit[7:6]AP (Access Permission)表示数据访问权限(指令访问权限(即执行权限)位于upper attributes中)
bit[4:2]AttrIndx内存属性索引,代表MAIR寄存器中存储的第AttrIndx个内存属性

下表为AP字段的值以及对应的权限说明

AP[2:1]Access from higher Exception levelAccess from EL0
0b00Read/writeNone
0b01Read/writeRead/write
0b10Read-onlyNone
0b11Read-onlyRead-only

参考Arm® Architecture Reference Manual for Armv8(G.a) 2727页

MAIR寄存器
在这里插入图片描述
Attr

Attr说明
0b0000dd00外设内存(MMIO),dd的值以及对应的含义见下表
0b0000dd01与FEAT_XS有关,暂不讨论
0b0000dd1x无效值
0bqqqqiiii (qqqq != 0000并且iiii != 0000)普通内存,qqqqiiii的值以及对应的含义见下表
0b01000000与FEAT_XS有关,暂不讨论
0b10100000与FEAT_XS有关,暂不讨论
0b11110000与FEAT_MTE2有关,暂不讨论
0bxxxx0000 (xxxx != 0000,0100,1010,1111)无效值

外设内存MMIO

dd说明
0b00Device-nGnRnE memory
0b01Device-nGnRE memory
0b10Device-nGRE memory
0b11Device-GRE memory

关于G、R、E的说明如下

(1)Gathering 或者non Gathering (G or nG)。这个特性表示对多个memory的访问是否可以合并,如果是nG,表示处理器必须严格按照代码中内存访问来进行,不能把两次访问合并成一次。例如:代码中有2次对同样的一个地址的读访问,那么处理器必须严格进行两次read transaction。

(2)Re-ordering (R or nR)。这个特性用来表示是否允许处理器对内存访问指令进行重排。nR表示必须严格执行program order。

(3)Early Write Acknowledgement (E or nE)。PE访问memory是有问有答的(更专业的术语叫做transaction),对于write而言,PE需要write ack操作以便确定完成一个write transaction。为了加快写的速度,系统的中间环节可能会设定一些write buffer。nE表示写操作的ack必须来自最终的目的地而不是中间的write buffer。

普通内存

qqqq说明
0b00RWOuter Write-Through Transient
0b0100Outer Non-cacheable
0b01RWOuter Write-Back Transient
0b10RWOuter Write-Through Non-transient
0b11RWOuter Write-Back Non-transient
iiii说明
0b00RWInner Write-Through Transient
0b0100Inner Non-cacheable
0b01RWInner Write-Back Transient
0b10RWInner Write-Through Non-transient
0b11RWInner Write-Back Non-transient

R表示Read-Allocate policy, W表示Write-Allocate policy

R or W说明
0b0Not allocate,进行读或者写操作时不分配cache内的空间,即不将数据载入cache
0b1Allocate,进行读或者写操作时分配cache内的空间,即将数据载入cache

Transient表示该块内存使用时间很短,特定的架构实现可以利用该属性来优化cache管理

Inner和Outer是用于维护一致性时定义的共享域,具体共享域的划分和特定的架构实现有关

在这里插入图片描述
关于cache策略等详细内容参考Arm® Architecture Reference Manual for Armv8(G.a) D4.4.3节 2620页

参考Arm® Architecture Reference Manual for Armv8(G.a) D13.2.95节 3512页

Upper attributes
字段名称说明
bit[54]UXN/XN (Unprivileged eXecution Never)该bit为1表示禁止非特权级运行模式执行该内存页的代码(用户态代码执行控制)
为0表示允许非特权级运行模式执行该内存页的代码
bit[10]PXN (Privileged eXecution Never)该bit为1表示禁止特权级运行模式执行该内存页代码(内核态代码执行控制)
为0表示允许非特权级运行模式执行该内存页的代码

Table Descriptor

在这里插入图片描述

字段名称说明
bit[62:61]AP Table设置对应的下级页表映射的所有内存页的数据访问权限(AP)
bit[60]UXN Table/XN Table设置下级页表映射的所有内存页的用户非特权级执行权限(UXN/XN)
bit[59]PXN Table设置下级页表映射的所有内存页的特权级执行权限(PXN)

配置虚拟内存地址长度

通过设置TCR_ELx.T0SZ可以配置TTBR0_ELx使用的虚拟内存地址最大长度,最大长度为64 - TCR_ELx.T0SZ,设置TCR_ELx.T1SZ则可以用相同的方式配置TTBR1_ELx使用的虚拟内存最大长度。通过配置虚拟内存的最大长度可以减少使用的页表级别(调整转换起始页表级别),例如配置虚拟地址最大长度为<=39bits时从level 1页表开始执行地址转换(即TTBR寄存器中设置level 1级别的页表),当虚拟地址最大长度<=30bits时,从level 2页表开始执行地址转换。下图描述了设置不同的地址长度对有效地址的影响。

通常有效的48bit用户空间地址(TTBR0)从00x0000_FFFF_FFFF_FFFF,有效的的内核空间地址(TTBR1)从0xFFFF_0000_0000_0000,当地址小于48bit时,以39bit为例,用户空间地址高25bit必须为0,而内核空间的高25bit必须为1采用有效的地址。
在这里插入图片描述

参考Arm® Architecture Reference Manual for Armv8(G.a) 2701页

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值