1. 内存系统架构
1.1 系统级存储系统体系结构的形式
??Armv8的a -profile体系结构包括一个虚拟内存系统体系结构(Virtual Memory System Architecture - VMSA),参见----。
1.2 系统级可见 内存属性
类型 | 说明 |
---|---|
Normal | 这通常用于大容量内存操作,包括读/写和只读操作。系统中大部分内存都是这种类型 |
Device | 对该种类型的内存进行读写可能具有连带效应(side-effects,指对一个内存位置的读写操作会影响其它内存位置)或者从该种内存中的一个位置装载的值可能随着装载的次数而变化。通常内存映射外设(指使用访问内存的方法来访问的外设)会采用这种内存类型 |
(1) 上表中Shareability是与一致性有关的内存属性, 用来指示一个内存位置对于一些处理器是否是可共享的。共享意味着需要硬件保证一个内存位置中的内容对一定范围内可访问该位置的多个处理器是一致。参见:Cache的相关知识(一) - 9. 共享域
(2) cacheability是指cache的回写策略。参见:Cache的相关知识(一) - 8.2 cache的回写策略
2. 对混合字节序的支持
如果在AArch32异常级别上实现了混合字节序支持,则字节序由PSTATE.E控制。 对于异常返回AArch32状态,将从SPSR_ELx.E复制PSTATE.E。 如果目标异常级别仅支持小端访问,则SPSR_ELx.E为RES0。 如果目标异常级别仅支持大端访问,则SPSR_ELx.E为RES1。
1. AArch64 显式数据访问和转换表遍历的endianness
2. AArch32 显式数据访问和转换表遍历的endianness
注意:
(1) 如果使用AArch32为异常级别实现了混合字节序支持,则字节序由PSTATE.E控制。 当异常从AArch64状态返回到AArch32状态,将从SPSR_ELx.E复制PSTATE.E。
(2) 如果目标异常级别仅支持小端访问,则SPSR_ELx.E为RES0。 如果目标异常级别仅支持大端访问,则SPSR_ELx.E为RES1。 PSTATE.E在AArch64状态下被忽略。
3. 对缓存的支持
3.1 缓存标识
Armv8缓存标识由一组寄存器组成,这些寄存器描述了缓存操作指令将如何影响在PE上的应用的缓存。包括
类型 | AArch64 | AArch32 |
---|---|---|
影响整个缓存 | 例如:IC IALLU(Instruction Cache Invalidate All to PoU) | 例如:ICIALLUIS(Instruction Cache Invalidate All to PoU, Inner Shareable) |
VA操作 | 例如: IC IVAU (Instruction Cache line Invalidate by VA to PoU) | 例如:ICIALLUIS (Instruction Cache line Invalidate by VA to PoU) |
way(路)/set(组)操作 | 例如: DC ISW (Data or unified Cache line Invalidate by Set/Way) | 例如:ICIALLUIS (Data Cache line Invalidate by Set/Way) |
缓存标识寄存器有:
寄存器类型 | AArch64寄存器名称 | AArch32寄存器名称 | 说明 |
---|---|---|---|
Cache Type Register) | CTR_EL0 | CTR | 该寄存器定义了 (1) 受指令缓存操作指令影响的任何指令缓存的最小行长度; (2) 受数据缓存操作指令的影响的任何数据或统一性缓存的最小行长度; (3) 一级指令缓存的缓存索引和标记策略。 |
Cache Level ID Register | CLIDR_EL1 | CLIDR | 该寄存器定义了 (1) 缓存类型; (2) Level of Unification Inner Shareable (LoUIS), Level of Coherence (LoC) and the Level of Unification (LoU) ; (3) 一个可选的ICB字段,用于指示内部缓存可缓存内存区域与外部缓存可缓存区域之间的边界 |
Cache Size Selection Register | CSSELR_EL1 | CSSELR | 该寄存器定义了 (1) 选择当前缓存的缓存级别(Level 1 ~ Level 7); |
Cache Size Identification Register | CCSIDR_EL1 | 当应用FEAT_CCIDX时: CCSIDR/ CCSIDR2 当未应用FEAT_CCIDX时: CCSIDR |
该寄存器主要提供有关当前选定缓存的体系结构的信息,比如NumSets, Associativity, and LineSize; |
3.2 Cacheability, cache allocation hints, and cache transient hints
可缓存性 仅适用于normall类型的内存,并为内部和外部缓存位置单独定义。所有device类型的设备内存总是被视为不可缓存的。内存属性Cacheability表示一个内存位置是否可以被分配到缓存中。
内存属性包括一个可缓存属性,参见:8.2 cache的回写策略
3.3 启用和禁用内存访问的缓存
在Armv8中,可缓存性控制字段可以强制所有具有Normal内存类型的内存位置被视为不可缓存,而不管它们的可缓存性属性是什么。每一阶段的地址转换都有独立的控制:
- 数据访问。这些控件也适用于对 translation tables 的访问。
- 指令访问。
3.3.1在AArch64状态下,可缓存性控制字段及其效果如下
translation regime | Non-secure/secure | 寄存器 | 说明 |
---|---|---|---|
EL1&0 | - | SCTLR_EL1.C == 0 | (1) 访问的内存数据在所有stage1转换都是 Non-cacheable (2) 对stage1转换表的访问是 Non-cacheable |
EL1&0 | - | SCTLR_EL1.I == 0 | (1) 访问内存时的指令在所有stage1转换都是 Non-cacheable |
EL1&0 | - | HCR_EL2.CD == 1 | (1) 访问的内存数据在stage2转换都是 Non-cacheable (2) 对stage2转换表的访问是 Non-cacheable |
EL1&0 | - | HCR_EL2.ID == 1 | (1) 访问内存时的指令在所有stage2转换都是 Non-cacheable |
EL1&0 | - | HCR_EL2.DC == 1 | (1) 所有 stage1转换和对stage1转换表的所有访问都被视为对 Non-shareable Inner Write-Back Cacheable Read-Allocate Write-Allocate, Outer Write-Back Cacheable Read-Allocate Write-Allocate memory的内存进行访问,无论 SCTLR_EL1.{I, C}的值如何,这适用于数据和指令访问的转换 |
EL1&0 | - | SCTLR_EL1.M == 0 | 禁用了stage1 的translations ,并且HCR_E |
首页 上一页 1 2 3 下一页 尾页 1/3/3 | |
【大 中 小】【打印】 【繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部】 | |
上一篇:AArch32/AArch64应用程序级内存模.. | 下一篇:ARMv8之memory model和Observabil.. |