第一版前言

站在2023年来看处理器的发展,x86-64与ARM64体系结构依然是目前市场上的主流处理器体系结构。不过一个可喜的变化是,RISC-V受到学术界和工业界越来越多的关注,很有可能成为第三大体系结构。最近几年,国内出现了一批优秀的芯片公司和科研机构,它们基于RISC-V体系结构来打造国产芯片,包括微控制单元(Micro-Controller Unit,MCU)芯片、高性能处理器芯片。开源高性能处理器的优秀代表有香山处理器等。

RISC-V体系结构以先进、简洁以及开源等众多优点,得到了国内外高校的青睐。越来越多的高校采用RISC-V体系结构作为蓝本讲授“计算机系统基础”“计算机组成原理”“操作系统”“嵌入式系统”等计算机相关专业的核心课程,甚至涌现出一批基于RISC-V体系结构的创新性和开拓性教学项目,如中国科学院大学的“一生一芯”计划。

RISC-V是一个崭新的体系结构,软硬件生态也在逐步完善。为了帮助读者快速、深入地了解RISC-V体系结构,本书作者以工程师的视角,结合大学课程特点、企业新员工培训需求以及实际工程项目经验,精心设计了几十个有趣的实验,读者可以通过这些实验逐步深入学习和理解RISC-V体系结构与编程。

本书特色

本书有如下特色。

突出动手实践。要掌握一门新技术,动手实践是非常有效的方法。本书基于QEMU(Quick Emulator)以及香山模拟器(NJU Emulator,NEMU)介绍了几十个有趣的实验,读者可以采用搭积木的方法,从编写第一行代码开始,通过一个个实验逐步深入学习RISC-V体系结构,最终编写一个能在QEMU或者NEMU上运行的简易小型操作系统,它具有存储管理单元(Memory Management Unit,MMU)以及进程调度等功能。

以问题为导向。问题导向式的学习方式有利于提高学习效率。本书在大部分章首列举了一些思考题,用于激发读者探索未知知识的兴趣。这些思考题也是各大公司的高频面试题,仔细解答这些问题对读者将来的面试大有裨益。

基于64位处理器讲述RISC-V体系结构。本书不仅介绍开源的64位香山处理器的微架构实现,还介绍RV64指令集、GCC、链接器、链接脚本、异常处理、中断处理、内存管理、TLB管理、内存屏障指令、可伸缩矢量计算与优化以及虚拟化扩展等方面的知识。本书把RISC-V体系结构中难理解的部分通过通俗易懂的语言呈现给读者,并通过有趣的案例分析帮助读者加深理解。

总结常见“陷阱”与项目经验。本书总结了众多一线工程师在实际项目中遇到的“陷阱”,如使用指令集时的“陷阱”等,这些宝贵的项目经验会对读者有所帮助。

本书主要内容

本书主要介绍RISC-V体系结构的相关内容,重点介绍RV64指令集、GNU汇编器、链接器、链接脚本、内存管理、高速缓存、可伸缩矢量计算与优化以及虚拟化扩展等。

本书共20章,包含如下内容。

第1章介绍RISC-V体系结构基础知识。

第2章介绍如何使用QEMU及香山模拟器NEMU搭建RISC-V实验环境等内容。

第3章讨论RISC-V指令集中的常见指令以及常见陷阱等内容。

第4章介绍函数调用规范、栈等内容。

第5章介绍GNU汇编器的汇编语法、常用的伪指令、RISC-V特有的命令行选项和伪指令等内容。

第6章介绍链接器、链接脚本的相关内容。

第7章介绍GCC内嵌汇编代码的相关内容。

第8章介绍RISC-V体系结构中异常处理基本概念、与M模式相关的异常寄存器、与S模式相关的异常寄存器、异常上下文等内容。

第9章介绍RISC-V体系结构里中断处理基本概念、CLINT、PLIC等内容。

第10章介绍RISC-V体系结构中的内存管理的基础知识,包括页表、页表项的常见属性、页表创建过程及恒等映射等内容。

第11章介绍高速缓存的基础知识,包括高速缓存的工作原理、映射方式,虚拟高速缓存,物理高速缓存等相关内容。

第12章介绍缓存一致性,包括缓存一致性的分类、MESI协议、高速缓存伪共享等内容。

第13章介绍TLB管理,包括TLB基础知识、ASID、TLB管理指令等内容。

第14章介绍原子操作,包括原子操作基本概念、独占内存访问工作原理、原子内存访问操作指令等内容。

第15章介绍内存屏障指令,包括产生内存屏障指令的原因、RVWMO内存模型中的一些约束条件及RISC-V中的内存屏障指令等内容。

第16章介绍如何合理使用内存屏障指令等内容。

第17章介绍与操作系统相关的内容,包括C语言常见的陷阱、简易进程调度器、系统调用等内容。

第18章介绍可伸缩矢量计算与优化等内容。

第19章介绍RISC-V中的压缩指令扩展等内容。

第20章介绍RISC-V中的虚拟化扩展,包括CPU虚拟化、内存虚拟化、中断虚拟化等内容。

附录部分。

联系作者

由于作者知识水平有限,书中难免存在不妥之处,敬请各位读者批评指正。欢迎通过电子邮箱runninglinuxkernel@126.com与作者交流。若读者要下载本书配套的实验环境、示例代码以及实验参考代码,请关注“奔跑吧Linux社区”微信公众号并发送“risc-v”,获取下载地址。

致谢

在编写本书的过程中,作者得到了中国科学院计算技术研究所的包云岗老师及香山处理器团队成员的大力支持,他们为本书提供了香山处理器微架构的实现细节以及香山模拟器NEMU,让读者有机会深入了解一款开源高性能处理器的实现细节。余子濠博士为本书实验能在香山模拟器NEMU上完成做了大量适配和优化工作,让本书的实验变得更加丰富和有趣。另外,香山处理器团队的成员还帮忙审阅了本书的书稿,并给出了宝贵的意见和建议。在此,衷心感谢包云岗老师以及余子濠、王凯帆、张梓悦。

作者在编写本书的过程中还得到梁宇宁和陈志坚的鼎力支持和鼓励,陈志坚老师审阅了本书的书稿并给出了许多宝贵的意见和建议。另外,孙彦邦、张猛、赖建新、李隆以及肖林杰也帮忙审阅了部分书稿,在此表示感谢。

本书在编写过程中也得到了龙蜥社区运营委员会主席陈绪与技术委员会主席杨勇的大力支持和帮助。龙蜥社区RISC-V特别兴趣小组(Special Interest Group,SIG)成员王宝林、宋卓等帮忙审阅了本书,并给出了宝贵的反馈和改进意见。

本书由笨叔策划和主编,奔跑吧Linux社区中一群热爱开源的热心工程师参与了本书的编写和审阅工作,他们是张毅峰、胡茂留、牛立群、胡进、何花、黄山、郑律。另外,还有一些热心的工程师帮忙审阅了部分书稿,他们是贾献华、钱为、孙少策、曹文辉、钟居哲、陆亚涵、王乐、杨明辉、杨勇、张诺方、李朋、潘建亨、方盛洲、朱信冉、张志鹏等。

笨叔