RISC(Reduced Instruction Set Computer,精简指令集计算机)和CISC(Complex Instruction Set Computer,复杂指令集计算机)是计算机体系结构中两种截然不同的指令集架构设计理念。指令集架构是计算机硬件与软件之间的接口规范,它定义了处理器能够识别和执行的机器指令集合,是CPU设计的灵魂所在。在软考中,理清这两种架构的差异不仅是应对选择题的需要,更是建立计算机组成原理知识体系的逻辑锚点。
CISC的设计思想起源于20世纪60年代至70年代。在那个时期,计算机编程主要依靠汇编语言,编译器技术尚不成熟。为了让程序员更方便,硬件设计师倾向于在CPU中实现越来越多、越来越复杂的指令。一条CISC指令往往可以完成多个底层操作,甚至直接对应高级语言中的一条语句。Intel的x86系列处理器就是CISC架构的典型代表,x86指令集经过近半个世纪的扩展,指令数量从数十条膨胀到数千条。
RISC的设计思想则诞生于20世纪70年代末至80年代初。加州大学伯克利分校的David Patterson团队和斯坦福大学的John Hennessy团队,通过对大量程序运行行为的统计分析,发现了一个关键事实:在一个典型程序的执行过程中,约百分之八十的时间都在执行仅占指令集百分之二十的简单指令。那些功能复杂的指令虽然理论上"功能强大",但在实际程序中使用频率极低。基于这个发现,RISC的设计哲学反其道而行之:既然复杂指令很少被用到,为何还要花费大量晶体管去实现它们?不如只保留最常用、最简单的指令,通过硬件简化换取更高的时钟频率和更高效的流水线执行能力。复杂指令的工作全可交给编译器通过多条简单指令的组合来实现。ARM、MIPS、RISC-V以及IBM的Power架构,都属于RISC阵营。
两种架构的根本分歧,在于对"什么应由硬件完成、什么应由软件完成"这个边界问题的不同回答。CISC将复杂性放在硬件中,让软件编程变简单;RISC将复杂性交给编译器,让硬件保持精简高效。这个边界选择决定了两者在指令格式、寻址方式、寄存器配置、控制逻辑等几乎所有关键技术维度上的差异。
RISC架构最显著的特征之一是采用定长指令格式。在典型RISC处理器中,每条指令的长度固定为三十二位,编码格式高度规整。操作码、源寄存器、目标寄存器、立即数等字段在指令字中的位置和宽度都固定不变。这种设计为硬件实现带来了巨大优势。取指阶段,处理器无需判断指令长度就可直接按固定步长读取下一条指令;译码阶段,所有字段位置固定,译码逻辑可完全由组合逻辑电路完成。更重要的是,定长指令使RISC流水线极为规整——各级延迟高度一致,为深度流水线和超标量发射技术奠定了基础。
CISC架构则采用变长指令格式。以x86架构为例,一条指令长度可以从一个字节到十五个字节不等,编码格式因指令类型不同而差异巨大。变长指令的优点是代码密度高——常用简单指令可以用很短的编码表示,节省程序存储空间和指令缓存带宽。但代价是取指和译码逻辑非常复杂。处理器在取指阶段必须先"预解码"判断指令总长度,才能确定下一条指令的起始位置,这种"串行依赖"使CISC的取指效率天然低于RISC。为了解决这个问题,现代x86处理器内部采用了巧妙的折中方案:在指令预取之后,通过硬件译码器将复杂的x86变长指令翻译成类RISC的微操作,后续流水线实际执行的是这些微操作。这就是"外CISC内RISC"的混合设计策略,使得x86在保持兼容性的同时获得了接近RISC的执行效率。
CISC架构支持非常丰富的寻址方式,包括寄存器寻址、立即数寻址、直接寻址、寄存器间接寻址、基址加变址寻址、相对寻址等多种模式。某些复杂寻址方式甚至允许一条指令完成"从内存读取一个值、加上一个偏移量、再作为新的地址去访问内存"这样的多层间接操作。这种灵活性让汇编程序员的工作变得轻松,但对硬件实现而言,多样化且不规则的寻址方式意味着地址计算单元的设计复杂度大幅增加,而且不同寻址方式的内存访问延迟差异巨大,给流水线的指令调度带来了显著的不确定性。
RISC架构则严格限制寻址方式的种类,通常只支持寄存器寻址、立即数寻址和简单的寄存器间接寻址三种。更关键的是,RISC遵循"Load/Store架构"原则:只有Load和Store指令可以访问内存,其他所有运算类指令的操作数必须全部来自寄存器,运算结果也只能写回寄存器,不允许一条指令同时完成"从内存取操作数、运算、再写回内存"的复合操作。这种严格分离使处理器数据通路极为规整,流水线冲突检测和转发逻辑大幅简化,也为编译器指令调度优化提供了清晰框架。
RISC处理器由于指令格式规整、功能简单,其控制单元通常采用硬布线逻辑实现。硬布线逻辑直接使用组合逻辑电路和有限状态机生成控制信号,不需要额外的控制存储器,信号生成延迟极短,非常适合高速流水线执行。但这种方式的缺点是灵活性差,一旦芯片制造完成,控制逻辑就无法修改,增加新指令需重新设计整个控制电路。
CISC处理器由于指令格式复杂多变,如果全部用硬布线逻辑实现,控制电路将极其庞大且难以验证。因此,CISC处理器通常采用微程序控制方式,将每条机器指令的执行过程分解为一系列更基础的微操作,这些微操作序列以微指令形式存储在处理器内部的控制存储器中。执行机器指令时,控制单元从控制存储器中逐条读取对应的微指令序列,依次产生控制信号。微程序控制的优点是灵活性好,可通过修改控制存储器中的微程序来增加或修改指令功能。但其缺点是每条机器指令都需多次访问控制存储器,控制信号生成存在额外延迟,对追求高主频的现代处理器是显著的性能瓶颈。
实际上,现代高性能处理器大多采用了混合方案。以x86处理器为例,对于那些使用频率极高且功能简单的指令,采用硬布线逻辑直接执行以保证速度;对于那些功能复杂但使用频率低的指令,则通过微程序控制来实现以节省硬件资源。
ARM架构是当今全球最成功的RISC架构。从智能手机到嵌入式设备,从平板电脑到Apple M系列桌面处理器,从物联网传感器到云数据中心服务器,ARM处理器几乎无处不在。ARM的成功得益于其低功耗高效率的设计基因——RISC架构天然的硬件精简使ARM在同等性能下功耗远低于x86。其次,ARM公司独特的商业模式也起了关键作用:ARM本身不生产芯片,而是通过授权IP核模式,让高通、联发科、苹果、三星、华为海思等数百家厂商基于ARM架构设计各自的处理器,这种生态模式使ARM获得了极为广泛的产业支持。
MIPS是另一个经典RISC架构,由斯坦福大学John Hennessy团队在80年代初设计。MIPS在90年代的工作站和嵌入式领域有过辉煌历史,SGI的图形工作站、索尼的PlayStation都曾使用MIPS处理器。MIPS的设计极为简洁优雅,指令格式只有三种基本类型,是计算机体系结构课程中最常用的教学案例。尽管MIPS在商业市场的影响力已大不如前,其设计思想仍深刻影响着后来的RISC架构。
RISC-V是近年来异军突起的开源RISC指令集架构,由加州大学伯克利分校于2010年发布。与ARM和MIPS不同,RISC-V完全开源且免费,任何人都可自由设计、实现和销售基于RISC-V的处理器,无需支付授权费用。这一特性使RISC-V在全球获得学术界和产业界的广泛关注,中国也将RISC-V作为自主可控处理器的重要技术路线,阿里巴巴平头哥半导体已推出了基于RISC-V的玄铁系列处理器。
x86架构是CISC阵营的绝对主力,由Intel在1978年推出,已统治个人计算机和服务器市场近半个世纪。尽管x86在指令集层面仍是典型的CISC,但自1995年Pentium Pro开始,Intel在芯片内部实现了微操作转换机制——将复杂的x86指令拆解为类RISC的微操作,然后通过类似RISC的高效流水线执行。AMD的Zen架构和Intel的Core架构都是"外CISC内RISC"设计思想的杰出代表,在保持与海量历史软件兼容的同时,执行效率已与纯粹RISC不相上下。
CISC架构最突出的优势在于指令密度高。同等程序功能下,x86编译出的二进制代码通常比ARM代码更紧凑,这意味着更少的指令缓存占用和更低的指令带宽需求。对于个人计算机和服务器等对绝对性能要求极高、功耗非首要限制的场景,经过数十年深度优化的x86处理器仍保持着单核性能的领先优势。
RISC架构最突出的优势在于能效比。精简的硬件设计意味着更少的晶体管和更低的动态功耗,对智能手机、平板电脑等电池供电场景至关重要。Apple从Intel x86全面转向自研ARM架
本篇完!