CISC and RISC
RISC (精简指令集计算机) 和 CISC (复杂指令集计算机) 是当前 CPU 的两种架构。它们的区别在于不同的CPU设计理念和方法。
早期的 CPU 全部是 CISC 架构,它的设计目的是要用最少的机器语言指令来完成所需的计算任务。比如对于乘法运算,在 CISC 架构的 CPU 上,可能需要这样一条指令:MUL ADDRA, ADDRB 就可以将 ADDRA 和 ADDRB 中的数相乘并将结果储存在 ADDRA 中。将 ADDRA, ADDRB 中的数据读入寄存器,相乘和将结果写回内存的操作全部依赖于 CPU 中设计的逻辑来实现。这种架构会增加 CPU 结构的复杂性和对 CPU 工艺的要求,但对于编译器的开发十分有利。比如上面的例子,C 程序中的a *= b 就可以直接编译为一条乘法指令。今天只有 Intel 及其兼容 CPU 还在使用 CISC 架构。
RISC 架构要求软件来指定各个操作步骤。上面的例子如果要在 RISC 架构上实现,将 ADDRA, ADDRB 中的数据读入寄存器,相乘和将结果写回内存的操作都必须由软件来实现,比如:MOV A, ADDRA; MOV B, ADDRB; MUL A, B; STR ADDRA, A,这种架构可以降低 CPU 的复杂性以及允许在同样的工艺水平下生产出功能更强大的 CPU,但对于编译器的设计有更高的要求。
复杂指令集计算机 (CISC)
长期来,计算机性能的提高往往是通过增加硬件的复杂性来获得。随着集成电路技术特别是 VLSI(超大规模集成电路)技术的迅速发展,为了软件编程方便和提高程序的运行速度,硬件工程师采用的办法是不断增加可实现复杂功能的指令和多种灵活的编址方式,甚至某些指令可支持高级语言语句归类后的复杂操作,致使硬件越来越复杂,造价也相应提高。为实现复杂操作,微处理器除向程序员提供类似各种寄存器和机器指令功能外,还通过存于只读存贮器 (ROM) 中的微程序来实现其极强的功能,微处理在分析每一条指令之后执行一系列初级指令运算来完成所需的功能,这种设计的形式被称为复杂指令集计算机 (Complex Instruction Set Computer-CISC) 结构。一般 CISC 计算机所含的指令数目至少 300 条以上,有的甚至超过500条。
精简指令集计算机 (RISC)
采用复杂指令系统的计算机有着较强的处理高级语言的能力,这对提高计算机的性能是有益的。当计算机的设计沿着这条道路发展时,有些人没有随波逐流,他们回过头去看一看过去走过的道路,开始怀疑这种传统的做法:IBM 公司在纽约 Yorktown 的 JhomasI.Wason 研究中心于 1975 年组织力量研究指令系统的合理性问题,因为当时已感到日趋庞杂的指令系统不但不易实现,而且还可能降低系统性能。1979 年以帕特逊教授为首的一批科学家也开始在美国加州大学伯克莱分校开展这一研究,结果表明 CISC 存在许多缺点。首先在这种计算机中,各种指令的使用率相差悬殊:一个典型程序的运算过程所使用的 80% 指令只占一个处理器指令系统的 20%,事实上最频繁使用的指令是取、存和加这些最简单的指令。这样一来,长期致力于复杂指令系统的设计,实际上是在设计一种难得在实践中用得上的指令系统的处理器,同时复杂的指令系统必然带来结构的复杂性,这不但增加了设计的时间与成本,还容易造成设计失误。此外,尽管 VLSI 技术现在已达到很高的水平,但也很难把 CISC 的全部硬件做在一个芯片上,这也妨碍单片计算机的发展。在 CISC 中,许多复杂指令需要极复杂的操作,这类指令多数是某种高级语言的直接翻版,因而通用性差。由于采用二级的微码执行方式,它也降低那些被频繁调用的简单指令系统的运行速度。因而,针对 CISC 的这些弊病,帕特逊等人提出了精简指令的设想,即指令系统应当只包含那些使用频率很高的少量指令,并提供一些必要的指令以支持操作系统和高级语言,按照这个原则发展而成的计算机被称为精简指令集计算机 (Reduced Instruction Set Computer-RISC) 结构,简称 RISC。
CISC 与 RISC 的区别
我们经常谈论有关 “PC” 与 “Macintosh” 的话题,但是又有多少人知道以 Intel 公司 x86 为核心的 PC 系列正是基于 CISC 体系结构,而 Apple 公司的 Macintosh 则是基于 RISC 体系结构,CISC 与 RISC 到底有何区别?
从硬件角度来看 CISC 处理的是不等长指令集,它必须对不等长指令进行分割,因此在执行单一指令的时候需要进行较多的处理工作。而 RISC 执行的是等长精简指令集,CPU 在执行指令的时候速度较快且性能稳定。因此在并行处理方面 RISC 明显优于 CISC,RISC 可同时执行多条指令,它可将一条指令分割成若干个进程或线程,交由多个处理器同时执行。由于 RISC 执行的是精简指令集,所以它的制造工艺简单且成本低廉。
从软件角度来看,CISC 运行的则是我们所熟识的 DOS, Windows 操作系统。而且它拥有大量的应用程序。因为全世界有 65% 以上的软件厂商都理为基于 CISC 体系结构的 PC 及其兼容机服务的,象赫赫有名的 Microsoft 就是其中的一家。而 RISC 在此方面却显得有些势单力薄,虽然在 RISC 上也可运行 DOS, Windows,但是需要一个翻译过程,所以运行速度要慢许多。
目前 CISC 与 RISC 正在逐步走向融合,Pentium Pro、Nx586、K5 就是一个最明显的例子,它们的内核都是基于 RISC 体系结构的。他们接受 CISC 指令后将其分解分类成 RISC 指令以便在遇一时间内能够执行多条指令。由此可见,下一代的 CPU 将融合 CISC 与 RISC 两种技术,从软件与硬件方面看二者会取长补短。
复杂指令集CPU内部为将较复杂的指令译码,也就是指令较长,分成几个微指令去执行,正是如此开发程序比较容易(指令多的缘故),但是由于指令复杂,执行工作效率较差,处理数据速度较慢,PC 中 Pentium 的结构都为 CISC CPU。
RISC 是精简指令集 CPU,指令位数较短,内部还有快速处理指令的电路,使得指令的译码与数据的处理较快,所以执行效率比 CISC 高,不过必须经过编译程序的处理才能发挥它的效率,IBM 的 Power PC 为 RISC CPU 的结构,CISCO 的 CPU 也是 RISC 的结构。
经常见到的 PC 中的 CPU,Pentium-Pro(P6)、Pentium-II,Cyrix 的 M1、M2,AMD的 K5、K6 实际上是改进了的 CISC,也可以说是结合了 CISC 和 RISC 的部分优点。
RISC与CISC的主要特征对比
| 比较内容 | CISC | RISC |
|---|---|---|
| 指令系统 | 复杂,庞大 | 简单,精简 |
| 指令数目 | 一般大于 200 | 一般小于 100 |
| 指令格式 | 一般大于 4 | 一般小于 4 |
| 寻址方式 | 一般大于 4 | 一般小于 4 |
| 指令字长 | 不固定 | 等长 |
| 可访存指令 | 不加限制 | 只有 LOAD/STORE 指令 |
| 各种指令使用频率 | 相差很大 | 相差不大 |
| 各种指令执行时间 | 相差很大 | 绝大多数在一个周期内完成 |
| 优化编译实现 | 很难 | 较容易 |
| 程序源代码长度 | 较短 | 较长 |
| 控制器实现方式 | 绝大多数为微程序控制 | 绝大多数为硬布线控制 |
| 软件系统开发时间 | 较短 | 较长 |