3.2 体系结构的历史与扩展
在本节中,我们首先通过以前的版本来简要地看看体系结构的发展。不熟悉ARM体系结构的读者如果碰到不明白的术语,请不要担心,因为我们将在后面的章节中加以详细描述。
从20世纪80年代中期的第一款测试硅片到20世纪90年代初的第一个ARM6和ARM7设备,ARM体系结构的变化相对较小。在第1版本的体系结构中,ARM1实现了大部分异常模式的加载、存储和算术运算,以及寄存器组。第2版本增加了乘法和乘法累加指令,以及对协处理器的支持,再加上一些进一步的创新。这些早期的处理器只支持26位的地址空间。第3版本的体系结构分离了程序指针寄存器和程序状态寄存器,并增加了一些新的模式来支持32位的地址空间。第4版本增加了对半字的加载和存储操作以及一个额外的内核级特权模式。
ARMv4T体系结构推出的Thumb(16位)指令集已经在ARM7TDMI®和ARM9TDMI®的处理器上应用,并已出货数十亿美元的产品。ARMv5TE体系结构添加改进了DSP类型操作和饱和算术和ARM/Thumb互相配合。ARMv6的提出了一些增强功能,如支持未对齐的内存访问,对存储器结构的重要改变和对多处理器的支持,再加上对32位寄存器内字节或半字的SIMD操作的支持,它还提供了许多可选的扩展,主要是Thumb-2和安全扩展(TrustZone)。Thumb-2将Thumb扩展到混合长度(16位和32位)的指令集。ARMv7-A体系结构对Thumb-2进行强制性扩展,并增加了高级SIMD扩展(NEON),这将在第9章和第21章中描述。
数年以来,ARM在ARM9中采用了连续编号处理器系统,ARM9是从ARM8发展来的,ARM8又是继ARM7而来的。在整个ARM家族中,用附加的各种数字和字母来表示不同的变种。例如,ARM7TDMI处理器用T来表示Thumb,用D表示Debug, M表示快速乘法器,I表示嵌入式ICE。
对于ARMv7体系结构,ARM公司采用商标Cortex,并补充表明处理器支持哪种配置系列(A、R还是M)。图3-1显示了不同版本的体系结构如何对应于不同的处理器实现。注意,这个图不全面,也不包括所有体系结构的版本或处理器实现。
图3-1 体系结构和处理器
图3-2中展示了体系结构随着时间的发展,阐述了在每一个新版本体系结构中的新增功能。几乎所有体系结构的改变都是向后兼容的,这意味着对ARMv4T体系结构编写的软件仍然可以用于ARMv7体系结构的处理器。
图3-2 体系结构历史
本书的各个章节将详细讨论体系结构的每个主题,但在这里,我们将简要地介绍了一些基本结构单元。
1.DSP乘累加和饱和算术指令
加入到ARMv5TE体系结构中的这些指令,改善了数字信号处理和多媒体软件的能力,并由字母E来表示。这些新的指令提供了许多不同种类的带符号乘累加、饱和加减、前导零计数,并且在更高版本的体系结构上保留下来。在许多情况下,这使得可以在系统中省掉一个简单的独立DSP。
2.Jazelle
当需要节省电量时,Jazelle DBX(直接字节码执行)被ARMv5TEJ用来改善执行Java代码的性能,增加内存的可用性和即时(JIT)编译器的改进,降低处理器的应用价值。因此,许多的ARMv7-A处理器不需要硬件加速。
在非常有限的内存中提供给系统高性能的Java性能时,Jazelle DBX是最适合的,例如,功能型手机或低成本的嵌入式应用。在当今的系统中,它主要是用于向后兼容。
3.Thumb执行环境(ThumbEE)
由于ARMv7-A的引进和要求,ThumbEE有时也被称为Jazelle-RCT(运行时编译目标)。它涉及对Thumb指令集微小改变,使它能更好地在受控环境中运行而生成代码(如管理语言中的Java、Dalvik、C#、Python或Perl)。
ThumbEE被用在实时(JIT)或提前(AOT)编译器中,它可以减少重新编译的代码大小。管理代码的编译不属于本书的讨论范围。
4.Thumb-2
在ARMv6T2中引进Thumb-2技术,此技术也是ARMv7所需。该技术将原来的16位Thumb指令集扩展到32位指令集。16位和32位Thumb指令集的组合实现了原始Thumb指令集的相似代码密度,但性能类似于32位ARM指令集。由此产生的Thumb指令集提供了几乎所有的ARM指令集的功能,以及额外的功能。
5.安全扩展(TrustZone)
ARMv6K引入的可选安全扩展TrustZone已经在所有ARM Cortex-A处理器中实现。TrustZone提供了一个独立的安全区域,可以将敏感代码和数据从包含操作系统和应用程序的普通区域分离出来。因此,安全区域中的软件旨在为普通(非安全区域)提供安全服务。在第27章中将更详细地描述TrustZone。
6.VFP
在ARMv7之前,VFP的扩展被称为矢量浮点结构,并用于矢量运算。VFP是一种实现单精度和可选双精度浮点运算的扩展,符合ANSI/IEEE标准的浮点运算。
7.高级SIMD(NEON)
ARM NEON技术使得高级单指令多数据(SIMD)指令集拥有独立的寄存器表(与VFP共享),一些具体实现有单独的NEON流水线后端,支持8位、16位、32位和64位整数,以及单精度(32位)浮点数据,并可以在64位和128位的寄存器上进行运算。
8.大物理地址扩展(LPAE)
LPAE是v7-A体系结构的可选部分,并且在Cortex-A7和Cortex-A15处理器上实现,它允许32位处理器由原来通常最大的4 GB访问空间扩展到1 TB的访问空间,这1 TB是通过把32位虚拟内存地址转换成40位物理内存地址得来的。这部分请查阅11.9节。
9.虚拟化
ARM处理器的虚拟化扩展也是ARMv7-A体系结构文件的可选扩展,此扩展可支持通过虚拟机监视器(称为虚拟机超级管理员)从一个操作系统切换到另一个。当在一个单处理器和多处理器系统中执行时,虚拟化扩展可支持在一个处理器上运行多个虚拟机,请参阅第28章。
10.big.LITTLE大小模式
big.LITTLE大小模式处理被引入到ARMv7体系结构中,可解决行业当前的的挑战,即如何创建既有高性能又有极佳节能效果的片上系统(SoC)以延长电池使用寿命。big.LITTLE采用了高性能的Cortex-A15处理器,再加上一个高效节能的Cortex-A7处理器,Cortex-A15处理器可被用于繁重的工作量,Cortex-A7处理器可以承担移动设备的大部分工作。第29章将详细描述big.LITTLE。