RISC-V 是2010年,在美国计算机圣地 UC Berkeley 发起的一个项目。打开 RISC-V 的官网 https://riscv.org/ ,会看到这样的简介:

RISC-V: The Free and Open RISC Instruction Set Architecture

翻译过来:RISC-V 是一个免费且开放的 RISC ISA。ISA 的全称就是 Instruction Set Architecture ,指令集架构。下面我们就详细解释一下这句话,看看什么是 ISA ,ISA 跟汇编语言,编译器,硬件实现之间有什么关系?另外也聊聊什么是 RISC ,聊聊 RISC-V 跟其他主流的 ISA 例如 x86 和 ARM 的区别。

指令集架构 ISA 是什么?

咱们先聊什么是 ISA 。

理解什么是 ISA ,主要就是理解什么是指令,指令是跟 CPU 的某个操作对应一串二进制数。ISA 很大程度上决定了计算机 CPU 的 Architecture ,所以 ISA 中也有 Architecture 这个词。而 S 就是代表 Set 也就是”集合“,也没啥不好理解的。所以理解 ISA 关键就是理解什么是一个 Instruction ,指令。我们写的程序最终是要翻译成 CPU 的各种操作的,例如算数运算,逻辑运算,内存操作等,同时我们也知道 CPU 其实只能执行机器语言,说白了就是0和1。所以很显然,CPU 的一个操作会对应一串二进制数,那么这个操作或者说这串二进制数就是一个指令。指令长度可以是多种,例如16 bit ,32 bit 等,bit 就是二进制的一位。

ISA 是软件和硬件之间的接口。一个 ISA 需要来自两方面的支持才能真正发挥作用。一方面是硬件支持,需要有符合这套 ISA 的芯片。另一方面是软件支持,最重要的是要有编译器支持。不同架构的 CPU ,执行同一个操作对应的那串二进制数是不同的,也就是对应的指令不同。理论上,有了 ISA 文档,我们就可以通过手写机器语言的形式来操作这个 CPU 了,不过当今时代已经没有人这么干了。现在我们的做法都是用高级语言,例如 C ,来写代码,然后让编译器把代码翻译成机器语言。所以,如果编译器不支持这套 ISA ,那么是不能编译出可以执行的代码的。

稍微总结一下,指令就是对应一个具体操作的一串二进制数,而 ISA 就是指令集,不同的指令集对应了不同的 CPU 架构,ISA 是软件和硬件之间的接口。

ISA 不是什么?

上面聊完了 ISA 是什么,下面聊 ISA 不是什么,加深一下对 ISA 的理解。

首先 ISA 不是汇编语言。汇编语言是一种编程语言,关键字都是英文字母或者单词,是人类可读的。而 ISA 都是些0101,所以区别是很明显的。当然,汇编语言是非常底层的语言,所以每个汇编语言的关键字跟指令都有非常直接的对应关系。

其次 ISA 也不是硬件实现。ISA 是对计算机的一个抽象模型。什么是抽象模型呢?例如一辆车有四个轱辘一个方向盘就是一个抽象模型。抽象模型不限制内部的硬件实现,不管用电机还是内燃机,对用户来讲都是车,开车的方式都一样。类似的,一套 ISA 可以对应不同的硬件实现。比如 Intel 和 AMD 这两家公司的 CPU 的 ISA 都是 x86 ,但是底层硬件实现是非常不一样的,导致了性能也差别很大。当然,只要 ISA 相同,用户用01操作这个 CPU 的方式就是相同的。所以这两家的 CPU 对于用户操作来说是一样的。而对于同一家公司而言,如果 CPU 硬件技术升级了,只要 ISA 不变,那么对应的编译器也就不用改。

所以,还是把握一句话,ISA 是软件和硬件的接口,或者叫接口规范。它不是汇编语言,因为汇编语言属于软件层面的东西,也不是硬件实现文档,因为实现是硬件内部逻辑。

RISC-V 跟 X86 和 ARM 的对比

最后聊聊 RISC-V 跟其他的 ISA 的差别。

我们先从 RISC 这个概念聊起。ISA 种类很多,可以分成几个大类,其中最重要的两类是 CISC 和 RISC 。CISC 的意思是复杂指令集计算机,统治个人计算机的 x86 就是属于 CISC 类的 ISA 。RISC 的全称是精简指令集计算机,对 CISC 的一些不常用的指令做了精简。统治嵌入式和手机领域的 ARM 就是 RISC 类的 ISA 。当然,RISC-V 也是 RISC 类的 ISA 。

RISC-V 的最大优势就是开放和免费。RISC-V 被称为硬件领域的 Linux ,项目由社区共同维护,使用 RISC-V 不需要收取专利费的,也没有任何硬性的使用限制。

生态方面,RISC-V 发展势头良好。很多大公司都加入了 RISC-V 基金会,来摆脱 ARM 和 Intel 这些公司的控制。RISC-V 有后发优势,ARM 和 x86 都发展了很多年,大规模的商用需要考虑向前兼容,而 RISC-V 没有历史包袱,所以指令集非常的精简,性能表现也非常优秀。配套的硬件实现方案现在也有了很多开源版本,编译器方面主流的 GCC 和 LLVM 都可以支持 RISC-V 了。

总结

关于 RISC-V 的介绍就是这些了。总结起来,RISC-V 是一套指令的集合,是硬件对软件的接口,是一个 ISA 。ISA 决定了我们的代码,编译成二进制之后的具体内容。区别于 ARM 和 x86 这些商业的 ISA ,RISC-V 最大优势是开源和免费。

参考: