早在一年之前,ARM 就早早公布了支持 64 位虚拟寻址的新型 ARMv8 架构的初步细节。由于消息公布地相对较早,该架构成为人们公开讨论的焦点,更重要的是,开源社区已针对该架构开始着手相关工作。这一策略行之有效,近期 Linux 内核已从版本3.7开始支持 AArch64 ,并从版本4.7 开始支持 GCC 工具.
慢慢的讨论的焦点转移到了具体实施情况以及各种面市的设备上,我想利用这个机会,和诸位探讨一下为什么会发生这种功能上的飞跃,以及这种进步在今后几年内将对使用该技术的数十亿设备产生何种影响。您也许已经知道,ARM 公司发布的新款 Cortex-A50 系列处理器也支持这种崭新 ARMv8 架构。
首先,我们要概括一下什么是 ARMv8 架构,以及它与当前 Cortex-A 系列处理器中的架构有何区别。当前这些处理器能够支持 ARMv7 架构并不惊奇,但最重要的是,Cortex-A50 系列处理器所支持的 ARMv8 架构还包括 AArch32 状态,这种执行状态完全向后兼容 ARMv7 架构,因而 Cortex-A50 系列处理器仍然支持为 ARMv7 架构编写的所有软件。
正是 AArch32 和 AArch64 这两种处理器执行状态的融合,使得 ARMv8 成为倍受业界关注的架构。从以往来看,当处理器架构要支持64位处理时,通常在以下两种演进方式中二选其一:创造一个全新架构,摒弃所有高效传统模式;或在现有 32 位架构的基础上添加 64 位处理功能,导致复杂性提高而且低效。而 ARMv8 既可支持性能出众的传统模式,又采用全新 64 位设计,可以最大程度地提高两种状态的功效,同时还为软件提供渐进式路标图,从而按市场要求的步调采用新功能。
ARMv8 通过 AArch64 以及相应的 64 位处理,对软件路标图提供的渐进式支持,为基于 ARM 架构的解决方案开辟了新的市场,同时还使其他市场能够满怀信心地制定长远路标图,并随着特定市场的发展而支持新的特性和功能。例如,在很多网络和企业市场,用户运行的应用要求具有 2GB 或 3GB 以上的 RAM ,这些市场将会直接采用特定架构的 AArch64 状态。在某些合作伙伴的具体实施中,没有需要在处理器的特定模式下工作的传统软件,因此他们可以决定放弃架构对 AArch32 状态的支持,而只提供 64 位的支持。
其他市场例如平板电脑和智能电话,很可能采取渐进式演进路径,最终向仅支持 64 位处理过渡。虽然过去曾经多次有人宣称“计算永远不会超过 < x > 位”[ 请在这里输入你认为适当的数字 ],但没有人可以断言移动设备永远不会需要 64 位计算。显而易见,Cortex-A15 和 Cortex-A7 支持大物理地址扩展 (LPAE),还能够支持最高 40 位的物理内存,这使移动设备能够支持的范围超出当前设备的 4GB 限制,让每个应用都拥有自身的 4GB 内存。但是,我们通常会忽略一点:操作系统仍然受到 4GB 地址空间限制,当内存增加时,随着设备的物理内存继续增加,或者运行的应用的数量增加,操作系统的地址空间也会不足。
操作系统“内存不足”可能发生在应用之前,这很可能是移动设备在 64 位支持方面遇到的第一个问题。ARMv8 架构采用了简易合理的方法,允许操作系统在 AArch64 的 64 位虚拟地址模式下运行,而用户应用仍可在 AArch32 状态下运行。这使解决方案能够做到两全其美; 既可运行无限数量的完全性能 32 位用户应用,同时又能使操作系统在 ARMv8 设备上的 AArch64 位模式下高效运行。例如,正如我们所演示的,当前 Android™ 版本未经修改即可在完全 AArch64 状态下的 64 位 Linux 内核上运行。对于需要逐渐向 64 位计算迁移的任何市场而言,上述两种独立状态功能提供了它们需要的低风险路标图。
若要阅读有关 ARMv8 架构功能的更多内容,请查看我的白皮书或技术简介视频。