站在2021年来看处理器的发展,x86_64体系结构与ARM64体系结构是目前市场上的主流处理器体系结构,而RISC-V有可能成为第三大体系结构。在手机芯片和嵌入式芯片领域,ARM64体系结构的处理器占了90%以上的市场份额,而在个人计算机和服务器领域,x86_64体系结构的处理器占了90%以上的市场份额。在这样的背景下,越来越多的芯片公司(例如海思、展讯、瑞芯微、全志等)基于ARM64体系结构来打造国产芯片。此外,苹果公司也切换到ARM64体系结构上,在2020年年底发布的基于ARM64体系结构的M1处理器芯片惊艳了全球。
基于ARM64体系结构处理器打造的产品越来越多,ARM64生态也越来越繁荣。面对几千页的英文原版ARM公司官方技术手册,不少开发者感到力不从心。有不少开发者希望有一本快速入门的ARM64体系结构编程图书,来帮助他们快速入门与提高。出于这个目的,奔跑吧Linux社区组织国内优秀的工程师,以社区合作的方式编写了本书,结合大学课程特色以及实际工程项目经验,精心制作了几十个有趣的实验,读者可以通过实验来深入学习和理解ARM64体系结构与编程。
本书有如下一些特色。
●突出动手实践。学习任何一门新技术,动手实践是非常有效的方法。本书基于树莓派4B开发板展示了几十个有趣的实验。从编写第一行代码开始,通过慢慢深入ARM64体系结构的学习,我们最终可以编写一个能在树莓派4B开发板上运行的简易的小型OS(具有MMU以及进程调度等功能)。
●以问题为导向。有不少读者面对8000多页的官方ARMv8体系结构手册感觉力不从心,问题导向式的学习方法有利于提高学习效率。本书在每章前面列举了一些思考题,用于激发读者探索未知知识的兴趣。这些思考题也是各大公司的高频面试题,相信仔细解答这些问题对读者的面试大有裨益。
●基于ARMv8.6体系结构。本书基于ARMv8.6体系结构,介绍了ARM64指令集、ARM64寄存器、页表、内存管理、TLB、内存屏障指令等方面的知识。本书把ARMv8.6体系结构中难理解的部分通过通俗易懂的语言呈现给读者,并通过有趣的案例分析加深读者的理解。
●总结常见陷阱与项目经验。本书总结了众多一线工程师在实际项目中遇到的陷阱,例如使用指令集时的陷阱等,这些宝贵的项目经验会对读者有所帮助。
本书主要介绍ARM64体系结构的相关内容。本书重点介绍ARM64指令集、GNU汇编器、链接器、ARM64内存管理、高速缓存管理等。在每章开始之前会先列出一些思考题,读者可以围绕这些题目进行深入学习。
本书一共有23章,包含如下内容。
第1章主要介绍ARMv8/ARMv9体系结构基础知识以及Cortex-A72处理器等内容。
第2章介绍树莓派4B开发板的情况,以及如何利用树莓派4B来搭建一个实验环境。
第3章讨论A64指令集中加载与存储指令的使用以及常见陷阱。
第4章介绍A64指令集中的算术与移位指令。
第5章介绍A64指令集中的比较与跳转指令。
第6章介绍A64指令集中其他重要指令,例如PC相对地址加载指令、内存独占访问指令、异常处理指令、系统寄存器访问指令、内存屏障指令等。
第7章总结A64指令集常见的陷阱。
第8章介绍GNU汇编器的语法、常见伪指令、AArch64依赖特性等内容。
第9章介绍链接器的使用、链接脚本以及重定位等内容。
第10章介绍GCC内嵌汇编代码的语法、内嵌汇编宏的使用以及常见错误等内容。
第11章介绍ARM64体系结构异常处理的触发与返回、异常向量表、异常现场、同步异常的解析等相关内容。
第12章介绍ARM64体系结构中断处理的基本概念和流程,包括树莓派4B上的传统中断控制器、保存和恢复中断现场的方法等。
第13章介绍GIC-V2的相关内容,包括中断源分配、中断路由、树莓派4B上的GIC-400等。
第14章介绍ARM64体系结构下的内存管理,包括ARM64的页表、页表项属性、页表遍历过程、内存属性以及恒等映射等相关内容。
第15章介绍高速缓存的基础知识,包括高速缓存的工作原理、映射方式,虚拟高速缓存与物理高速缓存,重名与同名问题,高速缓存的共享属性、维护指令等相关内容。
第16章介绍缓存一致性相关问题,包括缓存一致性的分类、MESI协议、CCI与CCN缓存一致性控制器、高速缓存伪共享等内容。
第17章介绍TLB基础知识、TLB重名与同名问题、ASID、TLB管理指令等相关内容。
第18章介绍内存屏障指令基础知识,包括内存屏障指令产生的原因、ARM64中的内存屏障指令等相关内容。
第19章介绍如何使用内存屏障指令。
第20章介绍原子操作,包括原子操作基本概念、原子内存访问指令、独占内存访问工作原理、原子内存访问操作指令等相关内容。
第21章介绍与操作系统相关的内容,包括64位编程下常见的C语言陷阱、ARM64函数调用标准、ARM64栈布局、简易进程调度器等内容。
第22章介绍浮点运算以及NEON指令方面的相关内容。
第23章介绍SVE以及SVE2指令,还结合3个实际案例分析如何使用SVE/SVE2指令来进行优化。
本书由奔跑吧Linux社区中众多工程师共同完成。奔跑吧Linux社区由一群热爱开源的热心工程师组成,参与编写本书的人有魏汉武、寇朝阳、王乐、王晓华、蔡琛、余云波、牛立群、代祥军、何花、徐国栋、徐彦飞、郑律、张馨雨、Xiao Guangrong、Gavin Guo、Horry Zheng、Cherry Chen、Peter Chen、贾献华等。在编写过程中,作者还得到了大连理工大学软件学院吴国伟老师、上海交通大学软件学院古金宇老师以及南昌大学信息工程学院陈悦老师的支持和帮助。感谢这些老师的帮助。感谢Linaro组织的徐国栋认真审阅了大部分书稿,提出了很多修改意见。另外,本书还得到安谋科技教育计划的支持和帮助,特别感谢宋斌老师的无私帮助。
由于作者知识水平有限,书中难免存在纰漏,敬请各位读者批评指正。要下载本书配套的实验环境、实验参考代码以及配套视频课程,请扫描下方的二维码,在“奔跑吧Linux社区”微信公众号中输入“arm64”。