内存及系统架构 (partB)
内存及系统架构介绍
ARMv6是第一个标准化内存模型和许多系统级特性的体系结构变体。
它是第一个要求提供系统控制协处理器的体系结构变体,也是系统级硬件和软件设计的一致性级别。
因此,ARMv6被认为是B部分中材料呈现方式的分水岭。
1. 内存顺序模型
ARMv6之前
体系结构没有试图定义显式内存事务的可接受内存顺序
ARMv6
定义了 显式内存事务的可接受内存顺序(没有定义隐式内存事务的可接受内存顺序)
为了解释 (显式内存事务的可接受内存顺序)
1.ARMv6引入了一组内存类型(普通内存、设备内存和强顺序内存),定义了内存访问属性,以便以基本上向后兼容的方式适应原始内存区域的实际含义。
2.还引入了一个共享内存属性,用于指示内存区域是否在多个处理器之间共享
显式内存事务的可接受内存顺序 是什么意思
1. 显示?
指令里面有明显操作内存的痕迹.???
2. 隐式?
cache 被 自动刷写到 内存里面???
4. 内存事务
对内存的一次读或写就叫做一个内存事务
5. 内存顺序
3.1 执行顺序
3.2 完成顺序
为了 人为的改变 (显示内存事务的可接受内存顺序)
可以使用 内存屏障
因为 SMP 和 cache,write buffer 等带来的 内存一致性问题 需要解决
2. 内存管理
系统控制协处理器
所有的标准存储器和系统设施都由协处理器15(CP15)控制,即所谓的系统控制协处理器
系统控制协处理器最多可包含16个主寄存器,每个主寄存器的长度为32位。注意,不是物理寄存器,有个别主寄存器对应多个物理寄存器
MCR instructions to write an ARM ® register to a CP15 register
MRC instructions to read the value of a CP15 register into an ARM register
MCR{<cond>} p15, 0, <Rd>, <CRn>, <CRm>{, <opcode2>} (L = 0)
MRC{<cond>} p15, 0, <Rd>, <CRn>, <CRm>{, <opcode2>} (L = 1)
虚拟内存系统架构
为什么要有虚拟内存系统?
复杂的操作系统通常使用虚拟内存系统为不同的进程提供单独的受保护的地址空间。
其他的进程访问不了该进程的地址空间
该进程访问不了其他进程的地址空间
虚拟内存系统的组件
MMU MMU中的TLB 内存中的一级页表 内存中的二级页表 异常 异常相关寄存器(IFSR DFSR FAR WFAR IFAR)
虚拟内存系统怎么通过这些组件怎么工作的?
简而言之就是 MVA->VA->PA 的 一个过程
虚拟内存系统工作中涉及的MMU的配置
虚拟内存系统工作中涉及的内存的属性
虚拟内存系统工作中涉及的异常及异常如何捕获及异常捕获相关寄存器
内存保护系统架构
...
3. 内存金字塔(Memory Hierarchy) 及 高速内存(high-speed memory) 及 共享内存正确性
内存金字塔
良好的系统设计是实现系统总体性能和成本目标的许多权衡的结果。
一般来说,内存访问时间越快,可用资源量就越受限制,因为它需要与处理器核心紧密耦合,即在同一个芯片上。
系统在分层模型中设计了不同类型的内存,这称为内存层次结构。
分层系统通常对层进行编号-L1,L2...Ln-随着数字的增加,表示离核心更远的层的访问时间增加。
系统可以在多个级别使用缓存,IO也可以在不同的层上提供
高速内存
cache
缓存是一块高速内存位置,包含地址信息(通常称为标记位)和相关数据。
目的是提高内存访问的平均速度。
数据加载方法 基于 空间位置 和 时间位置.
当数据加载到缓存中时,后续加载和存储的访问时间将显著减少,从而带来总体性能优势。
arm 核心之前 读 内存,100ns,现在读 cache ,5ns.
虚拟寻址
write buffer
写缓冲区是一块高速存储器,包含 数据、地址和其他详细信息(例如数据大小)
目的是优化对主存储器的存储。
当存储发生时,其数据、地址和其他详细信息(例如数据大小)将高速写入写缓冲区。
写入缓冲区以主存速度将数据写到主存中,过程中不用arm核心参与.
arm核心之前是写内存,100ns.现在变为了写write buffer , 变成了 5ns.
虚拟寻址
紧致内存(TCM)
紧密耦合的内存相对于内存的相对成本仍然很高,因此紧密耦合的内存非常适合共享使用的内存模型缓存和写缓冲区提供.
TCM的设计目的是提供低延迟内存,处理器可以使用这些内存,TCM内存可编程(对每个BANK进行编程,使其位于物理内存映射中的不同位置)
这样的内存可以用来保存关键的例程,例如中断处理例程或实时任务,其中缓存的不确定性是非常不可取的。
它还可以用来保存草稿行数据、其局部性属性不太适合缓存的数据类型以及诸如中断堆栈之类的关键数据结构。
arm 核心之前 读 内存,100ns,现在读 TCM ,5ns.
物理寻址
共享内存正确性
写缓冲区和缓存带来的问题:
•内存访问发生在程序员通常期望的时间以外的时间
•有多个物理位置可以保存数据项。
memory consistency
一致性定义 提供有关加载和存储(或内存读写)以及它们如何作用于内存的规则。
一致性模型根据加载和存储(内存读写)定义正确的共享内存行为,而不 考虑 caches or coherence。
我们需要定义共享内存的正确性,也就是说,哪些共享内存行为是允许的,这样
1.程序员就知道应该期望什么
2.芯片实现者就知道他们可以提供什么的限制
cache coherence
coherence 旨在使共享内存系统的缓存在功能上与单个核心系统中的缓存一样不可见。
使用COHERENCE协议防止对过时数据(非一致性)的访问
COHERENCE协议是由系统内的分布式参与者集实现的一组规则。