ARMv8 核内部寄存器组详解
通常,靠近PE(Process Element)的内存具有非常低的延迟,但在大小上受到限制,并且实现成本昂贵,除了PE之外,通常实现更大的内存块,但这会增加延迟,为了优化整体性能,Armv8内存系统可以在层次化内存系统中包含多个缓存级别,从而利用大小和延迟之间的权衡。
下图体现了一个典型的ARMv8架构处理器的多级存储系统:
而寄存器组是离PE最近的存储单元,其能够相助提高cpu效率,体现在以下几个方面:
- 高速访问:寄存器是CPU内部最快的存储单元,比主存(RAM)和缓存(Cache)访问速度更快,通常在一个时钟周期内完成读写操作。
- 减少等待时间:频繁使用寄存器进行数据存储和操作,减少了对主存的访问,避免了长时间的等待,从而提高了处理速度。
- 简化指令执行:寄存器直接存储操作数和计算结果,使指令执行更简便,不需要频繁从内存读取数据,简化了指令的执行流程。
- 并行处理:寄存器支持多条指令的并行执行,通过寄存器重命名技术,避免数据相关性问题,提高指令级并行性和处理器的整体吞吐量。
- 减少总线冲突:使用寄存器操作数据可以减少总线访问频率,降低总线冲突,提高系统的整体性能和响应速度。
寄存器概述
ARMv8架构中的寄存器组设计更加复杂和多样化,包括以下几类主要寄存器:
- 通用寄存器(General-purpose Registers)
- 状态寄存器(Status Registers)
- 专用寄存器(Special-purpose Registers)
- 系统寄存器(System Registers)
通用寄存器
ARMv8架构定义了31个64位的通用寄存器,编号为X0到X30。其中,X0到X28是常规数据操作寄存器,X29是帧指针寄存器(FP,Frame Pointer),X30是链接寄存器(LR,Link Register)。此外,XZR寄存器用于表示零寄存器,当作为目标寄存器时,结果被丢弃。
在32位兼容模式下,这些寄存器也可以作为32位寄存器使用,编号为W0到W30。
状态寄存器
ARMv8处理器有多个状态寄存器,用于存储处理器的状态信息。主要的状态寄存器包括:
- PSTATE(Processor State Register):处理器状态寄存器,包含条件标志、控制位和当前处理模式。
- NZCV(Negative, Zero, Carry, Overflow)标志位:这些标志位存储在PSTATE寄存器中,用于反映算术和逻辑操作的结果。
PSTATE的主要字段
- N(Negative):负数标志位,结果为负数时置1。
- Z(Zero):零标志位,结果为零时置1。
- C(Carry):进位标志位,算术运算发生进位时置1。
- V(Overflow):溢出标志位,算术运算发生溢出时置1。
- EL(Exception Level):异常级别,指示当前的异常处理级别。
- SP(Stack Pointer Select):栈指针选择,指示当前使用的栈指针(SP_EL0或SP_ELx)。
专用寄存器
ARMv8架构中还有一些专用寄存器,用于特定功能和操作。主要的专用寄存器包括:
- SP_ELx(Stack Pointer Registers for Exception Levels):每个异常级别都有独立的栈指针寄存器(SP_EL0, SP_EL1, SP_EL2, SP_EL3)。
- ELR_ELx(Exception Link Registers for Exception Levels):每个异常级别都有独立的异常链接寄存器(ELR_EL1, ELR_EL2, ELR_EL3),用于存储异常返回地址。
- SPSR_ELx(Saved Program Status Registers for Exception Levels):每个异常级别都有独立的保存程序状态寄存器(SPSR_EL1, SPSR_EL2, SPSR_EL3),用于保存异常发生时的PSTATE值。
系统寄存器
系统寄存器用于控制和管理CPU的操作模式、特权级别、内存管理、中断处理等关键系统功能。主要的系统寄存器包括:
- SCTLR_ELx(System Control Register):系统控制寄存器,用于控制和配置处理器的系统级特性,如内存保护、缓存策略等。
- TTBR0_ELx(Translation Table Base Register):转换表基地址寄存器,用于定义页表的基地址,支持内存地址转换和虚拟内存管理。
- MAIR_ELx(Memory Attribute Indirection Register):内存属性指示寄存器,用于定义不同内存区域的属性,如缓存策略、访问权限等。
- TCR_ELx(Translation Control Register):转换控制寄存器,用于控制地址转换的行为和特性,如地址范围、页大小等。
- ESR_ELx(Exception Syndrome Register):异常综合症寄存器,用于存储异常发生时的状态信息,帮助调试和错误处理。
这些系统寄存器根据不同的异常级别(EL0, EL1, EL2, EL3)有不同的实例,如SCTLR_EL1, SCTLR_EL2等,分别对应用户态、内核态、虚拟化和安全态的控制。