指令集架构
指令集架构(ISA)是硬件和软件之间的抽象接口:它定义了处理器向程序员和编译器公开的指令集、寄存器、数据类型、寻址模式和内存模型。
用 PaperMind 寻找选题即将推出Find papers & topics
Tools & resources
Learn & explore
视频即将推出
Definition
指令集架构是一种契约,它定义了处理器可以执行的操作、这些操作作用的运算对象和存储,以及程序的二进制编码,从而确保任何遵循该契约的实现都能运行相同的机器代码。
Scope
该领域涵盖了机器从软件角度所执行的功能,独立于硬件如何实现这些功能。它包括指令类别(算术、逻辑、数据传输、控制)、指令格式和编码、寄存器组织、寻址模式、内存和字节序模型、异常和系统调用接口,以及RISC和CISC哲学的对比。它不包括ISA的微架构实现——流水线、缓存和乱序执行引擎——这些内容在处理器微架构中讨论。
Sub-topics
Core questions
- 一个ISA需要公开哪些操作、操作数类型和寄存器才能成为一个完整的编程目标?
- 指令如何编码成二进制,编码如何在代码密度和解码简易性之间进行权衡?
- 寻址模式如何指定操作数在寄存器和内存中的位置?
- RISC的简单固定格式指令哲学与CISC的丰富可变长度指令哲学有何区别?
- ISA如何作为兼容性契约保持稳定,同时在几十年内不断扩展?
Key concepts
- 指令格式和操作码
- 通用寄存器文件
- 寻址模式
- 加载-存储架构
- RISC与CISC
- 字节序和对齐
- 二进制兼容性
- 异常和系统调用
- 指令集扩展
Key theories
- 架构/实现分离
- ISA有意与微架构分离,以便同一指令集可以通过不同代的多种硬件组织实现,从而在允许性能提升的同时保持二进制兼容性。
- RISC设计原则
- 精简指令集论点认为,一组简单、定长、寄存器到寄存器的指令可以高效地流水线化并良好编译,尽管执行的指令数量可能更多,但通常优于复杂指令集。
Clinical relevance
ISA是计算平台的长期资产:x86、ARM和RISC-V各自支撑着庞大的软件生态系统,指令集的设计决策决定了哪些编译器、操作系统和二进制文件可以运行。稳定的ISA允许硬件在软件不变的情况下发展,而像RISC-V这样的开放ISA则重塑了处理器设计和教育。
History
早期的机器暴露了独特的指令集;IBM System/360(1964年)开创了在同一系列机器上实现单一ISA的理念。20世纪70年代出现了日益复杂的指令集(CISC),这促使了20世纪80年代早期由伯克利大学的Patterson和斯坦福大学的Hennessy发起的RISC反思。开放的RISC-V ISA于2010年左右在伯克利启动,重新激发了人们对简洁、可扩展指令集设计的兴趣。
Debates
- RISC与CISC
- 简单固定格式指令集是否本质上优于复杂可变长度指令集仍然存在争议;实际上,现代高性能CISC实现将复杂指令内部转换为类似RISC的微操作,从而模糊了最初的区别。
Key figures
- David A. Patterson
- John L. Hennessy
- Gene Amdahl
- Seymour Cray
- Krste Asanović
Related topics
Seminal works
- hennessy2019
- patterson2020
- patterson1980risc
Frequently asked questions
- 指令集架构和微架构有什么区别?
- ISA是可见的接口——程序使用的指令和寄存器——而微架构是实现该接口的内部硬件组织(流水线、缓存、执行单元)。许多微架构可以实现相同的ISA。
- 为什么二进制兼容性如此重要?
- 因为软件是为特定的ISA编译的,保持ISA稳定可以让用户在不重新编译的情况下在新处理器上运行现有程序,从而在硬件改进的同时保护了巨大的软件投资。