第四章:处理器体系结构
"现代微处理器可以称得上是人类创造出的最复杂的系统之一"
这篇blog并不是像其他章节那样整理了我在《CSAPP》中学习到的内容,而是整理了一些有关计算机处理器体系结构的简单知识。(其实就是水文一篇。。。)具体原因还请我徐徐道来。
首先,因为本章的内容隶属于计算机组成原理(计算机体系结构)的范畴,而这一板块又是十分的复杂,可以当作一门新的课程,所以这里我并未整理,日后有机会我会填上这个坑的。
其次,书中主要以Y86-64为讲解的指令集架构,但它不是一个商业可用的指令集架构,意味着你学了之后基本上没有实用价值,另外,Y86-64 的设计并不优雅,不是特别值得学习。
不过也不要浪费了这一板块吧
整理一下当前常见的指令集架构
- x86
- ARM
- MIPS
- RISC-V
- LoongArch
4.1 RISC 和 CISC
- RISC(精简指令集计算机)
- CISC(复杂指令集计算机)
随着技术的发展,RISC和CISC的界限逐渐模糊。现代处理器通常结合两者的优点,例如x86架构通过微指令将复杂指令分解为简单操作,而RISC架构也引入了复杂指令以提高效率。RISC-V等开源架构的兴起,进一步推动了RISC架构的发展和应用。
4.1.1 RISC(Reduced Instruction Set Computer)
设计理念:
- 简化指令集:RISC架构的核心思想是减少指令集的复杂性,每条指令执行一个简单的操作,指令长度固定,格式统一。
- 硬件简化:通过简化指令集,硬件设计可以更加精简,减少晶体管数量,提高时钟频率。
- 流水线优化:RISC架构通常采用深度流水线设计,以提高指令执行效率。
- 寄存器丰富:RISC处理器通常有较多的通用寄存器,减少对内存的访问,提高执行速度。
优点:
- 高性能:由于指令简单且执行速度快,RISC处理器在相同工艺下通常能实现更高的时钟频率。
- 低功耗:硬件简化使得功耗较低,适合移动设备和嵌入式系统。
- 易于优化:编译器可以更容易地优化代码,提高执行效率。
缺点:
- 代码密度低:由于指令简单,完成复杂操作需要更多指令,导致代码体积较大。
- 软件复杂度高:编译器需要生成更多指令来完成复杂操作,增加了编译器的设计难度。
典型代表:
- ARM架构:广泛应用于移动设备、嵌入式系统。
- MIPS架构:用于网络设备、嵌入式系统。
- RISC-V:开源指令集架构,逐渐受到关注。
4.1.2 CISC(Complex Instruction Set Computer)
设计理念:
- 复杂指令集:CISC架构的指令集包含多种复杂指令,一条指令可以完成多个操作,指令长度和格式不固定。
- 硬件复杂:为了实现复杂指令,CISC处理器的硬件设计较为复杂,晶体管数量较多。
- 内存访问:CISC架构倾向于减少指令数量,通过复杂指令减少对内存的访问。
优点:
- 代码密度高:复杂指令可以减少指令数量,代码体积较小。
- 软件简化:编译器设计相对简单,因为复杂指令可以直接完成高级语言中的操作。
缺点:
- 性能瓶颈:复杂指令的执行时间较长,可能导致流水线停顿,影响性能。
- 高功耗:硬件复杂导致功耗较高,不适合低功耗场景。
- 设计复杂:硬件设计复杂,增加了设计和验证的难度。
典型代表:
- x86架构:广泛应用于个人电脑、服务器。
- VAX架构:历史上用于小型机。
4.2 x86
x86是一种广泛使用的处理器架构,最初由英特尔(Intel)设计,主要用于个人电脑(PC)、服务器和嵌入式系统。x86 架构属于 CISC(复杂指令集计算机) 设计,其名称来源于早期 Intel 处理器型号的命名规则(如 8086、80286、80386 等)。
4.2.1 历史背景
- 1978年:Intel 推出了第一款 16 位处理器 8086,标志着 x86 架构的诞生。
- 1980年代:x86 架构逐渐成为 PC 市场的主流,IBM PC 采用了 Intel 8088(8086 的简化版),进一步推动了 x86 的普及。
- 1985年:Intel 推出了 32 位处理器 80386,引入了保护模式和多任务支持。
- 1990年代:x86 架构扩展到服务器市场,AMD 和 Cyrix 等公司也开始生产兼容 x86 的处理器。
- 2000年代:Intel 和 AMD 推出了 64 位扩展(x86-64),使 x86 架构支持更大的内存和更高的性能。
- 现代:x86 架构仍然是 PC 和服务器市场的主导架构,同时也在嵌入式系统和云计算中广泛应用。
4.2.2 x86 架构的特点
(1)CISC 设计
- x86 是一种典型的 CISC 架构,指令集复杂且多样化。
- 单条指令可以完成多个操作,例如内存访问、算术运算和逻辑运算。
- 指令长度可变(1 到 15 字节),格式灵活。
(2)寄存器
- 早期的 x86 处理器(如 8086)有 8 个 16 位通用寄存器:
- AX、BX、CX、DX(数据寄存器)
- SI、DI(索引寄存器)
- BP、SP(指针寄存器)
- 32 位 x86 架构(如 80386)扩展了寄存器到 32 位(EAX、EBX 等)。
- 64 位 x86 架构(x86-64)进一步扩展了寄存器到 64 位(RAX、RBX 等),并增加了更多的通用寄存器(R8-R15)。
(3)内存寻址模式
- x86 支持多种内存寻址模式,包括:
- 直接寻址
- 寄存器间接寻址
- 基址加变址寻址
- 带偏移量的寻址
- 32 位和 64 位架构支持虚拟内存和分页机制。
(4)工作模式
- 实模式:早期 16 位模式,直接访问物理内存,无内存保护。
- 保护模式:32 位模式,支持虚拟内存、多任务和内存保护。
- 长模式:64 位模式(x86-64),支持更大的地址空间和更高的性能。
(5)指令集
- x86 指令集包含数百条指令,涵盖算术运算、逻辑运算、控制流、字符串操作等。
- 现代 x86 处理器还支持扩展指令集,如:
- MMX:多媒体扩展指令集。
- SSE(Streaming SIMD Extensions):单指令多数据流扩展。
- AVX(Advanced Vector Extensions):高级向量扩展。
- FMA(Fused Multiply-Add):融合乘加指令。
(6)兼容性
x86 架构以其向后兼容性著称。现代 64 位 x86 处理器仍然可以运行早期的 16 位和 32 位程序。
4.2.3 x86 架构的演变
(1)16 位时代
- 8086/8088:16 位处理器,地址总线 20 位,支持 1MB 内存。
- 80286:引入保护模式,支持虚拟内存和多任务。
(2)32 位时代
- 80386:首个 32 位 x86 处理器,支持 4GB 内存和分页机制。
- 80486:集成浮点运算单元(FPU),性能大幅提升。
- Pentium 系列:引入超标量架构和流水线技术,支持多指令并行执行。
(3)64 位时代
- x86-64(AMD64):由 AMD 提出,Intel 后来采用(称为 Intel 64)。
- 支持 64 位地址空间,理论最大内存支持为 2^64 字节。
- 增加了更多的通用寄存器和改进的指令集。
- Intel Core 系列:引入多核技术和超线程技术,进一步提升性能。
(4)现代 x86 处理器
- Intel:Core i3/i5/i7/i9、Xeon(服务器)、Atom(低功耗)。
- AMD:Ryzen、EPYC(服务器)、Athlon。
4.2.4 x86 架构的优势
- 广泛兼容性:支持从 16 位到 64 位的软件,生态系统成熟。
- 高性能:现代 x86 处理器通过多核、超线程、SIMD 等技术实现高性能。
- 丰富的软件生态:操作系统(Windows、Linux)、开发工具和应用程序都高度支持 x86。
4.2.5 x86 架构的挑战
- 功耗问题:x86 处理器的功耗较高,不适合超低功耗场景(如物联网设备)。
- 复杂性:CISC 设计导致处理器硬件复杂,设计和验证成本高。
4.2.6 x86 的应用领域
- 个人电脑:x86 是 PC 市场的主流架构。
- 服务器和数据中心:x86 处理器(如 Intel Xeon 和 AMD EPYC)广泛应用于云计算和大数据领域。
- 嵌入式系统:部分低功耗 x86 处理器用于工业控制和嵌入式设备。
- 游戏主机:例如 PlayStation 和 Xbox 使用定制化的 x86 处理器。
4.3 ARM
ARM(Advanced RISC Machine) 是一种基于 RISC(精简指令集计算机) 设计的处理器架构,以其高效能、低功耗和灵活性著称。ARM 架构广泛应用于移动设备、嵌入式系统、物联网(IoT)和服务器等领域。以下是 ARM 架构的详细介绍:
4.3.1. 历史背景
- 1980年代:ARM 架构由 Acorn Computers 公司开发,最初用于其个人电脑(如 BBC Micro)。
- 1985年:首款 ARM 处理器 ARM1 问世,采用 RISC 设计理念。
- 1990年:ARM 公司(Advanced RISC Machines Ltd)成立,专注于处理器架构的授权。
- 1990年代:ARM 处理器在移动设备和嵌入式系统中逐渐流行。
- 2000年代:ARM 成为智能手机和平板电脑的主流架构。
- 2010年代:ARM 扩展到服务器、物联网和高性能计算领域。
- 现代:ARM 架构在移动设备市场占据主导地位,并逐渐渗透到 PC 和服务器市场。
4.3.2 ARM 架构的特点
(1)RISC 设计
- ARM 是一种典型的 RISC 架构,指令集简单且高效。
- 指令长度固定(通常为 32 位或 16 位),格式统一。
- 单条指令执行一个简单操作,复杂操作通过多条指令完成。
(2)寄存器
- ARM 架构有 16 个 32 位通用寄存器(R0-R15)。
- R13 通常用作堆栈指针(SP)。
- R14 用作链接寄存器(LR),用于存储返回地址。
- R15 用作程序计数器(PC)。
- 部分 ARM 处理器还支持浮点寄存器和 SIMD 寄存器。
(3)指令集
- ARM 指令集:32 位指令集,支持丰富的算术、逻辑和控制流操作。
- Thumb 指令集:16 位指令集,用于减少代码体积,提高代码密度。
- Thumb-2 指令集:结合 16 位和 32 位指令,兼顾代码密度和性能。
- AArch64 指令集:64 位指令集,支持更大的地址空间和更高的性能。
(4)工作模式
- ARM 处理器支持多种工作模式,包括:
- 用户模式:普通程序运行的模式。
- 特权模式:用于操作系统内核和异常处理。
- 异常模式:用于处理中断、异常和系统调用。
(5)低功耗设计
- ARM 架构以低功耗著称,适合电池供电的移动设备和嵌入式系统。
- 采用多种节能技术,如动态电压频率调节(DVFS)和睡眠模式。
(6)可扩展性
- ARM 架构支持多种扩展指令集,如:
- NEON:SIMD 扩展,用于加速多媒体和信号处理。
- VFP:浮点运算扩展。
- TrustZone:安全扩展,用于实现硬件级安全隔离。
4.3.3 ARM 架构的演变
(1)早期 ARM 架构
- ARM1:首款 ARM 处理器,采用 32 位 RISC 设计。
- ARM6/ARM7:广泛应用于嵌入式系统和早期移动设备。
(2)ARMv4 到 ARMv7
- ARMv4:引入 Thumb 指令集,支持 16 位指令。
- ARMv5:增强 DSP 和 Java 加速功能。
- ARMv6:引入 SIMD 和 TrustZone 安全扩展。
- ARMv7:支持 Thumb-2 指令集和高级 SIMD(NEON)。
(3)ARMv8 架构
- AArch64:引入 64 位指令集,支持更大的地址空间和更高的性能。
- AArch32:兼容 32 位 ARMv7 指令集。
- ARMv8.1 到 ARMv8.5:引入虚拟化扩展、加密扩展和性能优化。
(4)ARMv9 架构
- 2021 年发布:引入 SVE2(可扩展向量扩展 2)和机密计算功能。
- 专注于 AI、机器学习和高性能计算。
4.3.4 ARM 架构的优势
- 低功耗:ARM 处理器以低功耗著称,适合移动设备和嵌入式系统。
- 高性能:通过多核、SIMD 和 64 位架构实现高性能。
- 灵活性:ARM 架构支持多种指令集和扩展,适应不同应用场景。
- 生态系统:ARM 拥有丰富的软件和工具链支持。
4.3.5 ARM 架构的挑战
- 性能瓶颈:在传统高性能计算领域,ARM 仍需追赶 x86。
- 软件兼容性:部分传统软件需要移植或优化才能在 ARM 上运行。
4.3.6 ARM 的应用领域
- 移动设备:智能手机和平板电脑(如苹果 A 系列、高通骁龙)。
- 嵌入式系统:工业控制、汽车电子和家用电器。
- 物联网(IoT):低功耗传感器和智能设备。
- 服务器和数据中心:ARM 服务器处理器(如 Ampere Altra)。
- 高性能计算:基于 ARM 的超级计算机(如富士通 Fugaku)。
4.4 MIPS
MIPS(Microprocessor without Interlocked Pipeline Stages) 是一种基于 RISC(精简指令集计算机) 设计的处理器架构,由斯坦福大学的团队在 1980 年代开发。MIPS 架构以其简洁性、高效性和可扩展性著称,广泛应用于嵌入式系统、网络设备、消费电子和高性能计算领域。
4.4.1 历史背景
- 1981年:MIPS 项目在斯坦福大学启动,由 John Hennessy 领导。
- 1984年:MIPS Computer Systems 公司成立,致力于商业化 MIPS 架构。
- 1985年:首款 MIPS 处理器 R2000 发布。
- 1990年代:MIPS 处理器在图形工作站、游戏主机(如 PlayStation)和嵌入式系统中广泛应用。
- 2000年代:MIPS 架构在网络设备(如路由器)和消费电子(如数字电视)中占据重要地位。
- 2010年代:MIPS 公司被多次收购,最终由 Wave Computing 接管,后转向开源。
- 现代:MIPS 架构在嵌入式系统和特定领域(如网络设备)中仍有应用,但面临 ARM 和 RISC-V 的竞争。
4.4.2 MIPS 架构的特点
(1)RISC 设计
- MIPS 是一种典型的 RISC 架构,指令集简单且高效。
- 指令长度固定(32 位),格式统一。
- 单条指令执行一个简单操作,复杂操作通过多条指令完成。
(2)寄存器
- MIPS 架构有 32 个 32 位通用寄存器(0−31)。
$0
是硬编码的零寄存器,读取时始终返回 0。$31
通常用作返回地址寄存器(RA)。
- 部分 MIPS 处理器还支持浮点寄存器和协处理器寄存器。
(3)指令集
- MIPS I:基础指令集,支持整数运算、逻辑运算和控制流操作。
- MIPS II:增加了一些新指令,如条件移动和原子操作。
- MIPS III:引入 64 位指令集,支持更大的地址空间和更高的性能。
- MIPS IV:增强浮点运算和 SIMD 支持。
- MIPS V:引入新的浮点指令和多媒体扩展。
- MIPS32/MIPS64:现代 MIPS 指令集,分别支持 32 位和 64 位操作。
(4)流水线设计
-
MIPS 架构采用经典的 5 级流水线设计:
- 取指(IF):从内存中读取指令。
- 译码(ID):解码指令并读取寄存器。
- 执行(EX):执行算术或逻辑操作。
- 访存(MEM):访问内存(如加载或存储数据)。
- 写回(WB):将结果写回寄存器。
-
流水线设计提高了指令执行效率。
(5)内存寻址模式
- MIPS 支持简单的内存寻址模式,主要包括:
- 寄存器间接寻址。
- 基址加偏移量寻址。
(6)异常和中断处理
- MIPS 架构支持硬件中断和异常处理。
- 异常处理通过异常程序计数器(EPC)和状态寄存器(SR)实现。
4.4.3 MIPS 架构的演变
(1)早期 MIPS 架构
- R2000:首款商用 MIPS 处理器,支持 32 位指令集。
- R3000:改进流水线设计,广泛应用于图形工作站。
(2)MIPS III 架构
- R4000:首个 64 位 MIPS 处理器,支持更大的地址空间和更高的性能。
(3)MIPS32/MIPS64 架构
- MIPS32:32 位指令集,适用于嵌入式系统。
- MIPS64:64 位指令集,适用于高性能计算和网络设备。
(4)现代 MIPS 架构
- MIPS Release 6:最新的 MIPS 指令集,引入新指令和优化。
- 开源 MIPS:Wave Computing 将 MIPS 架构开源,推动其发展。
(5)停止开发
- 2018年12月,MIPS架构的新所有者Wave Computing宣布MIPS ISA将在一个名为MIPS开放计划的项目中开源。该计划旨在开放对32位和64位设计的最新版本的访问,使其无需任何许可或版税即可使用,并授予参与者现有MIPS专利的许可
- 2021年3月,WaveComputing宣布停止MIPS架构的开发。该公司已加入RISC-V基金会,未来的处理器设计将基于RISC-V架构
4.4.4 MIPS 架构的优势
- 简洁性:MIPS 架构设计简单,易于实现和优化。
- 高效性:流水线设计和固定长度指令集提高了执行效率。
- 可扩展性:MIPS 支持多种扩展指令集,适应不同应用场景。
- 低功耗:MIPS 处理器在嵌入式系统中表现出色,功耗较低。
4.4.5 MIPS 的应用领域
- 嵌入式系统:MIPS 处理器广泛应用于工业控制、汽车电子和家用电器。
- 网络设备:路由器和交换机中常见 MIPS 处理器。
- 消费电子:数字电视、机顶盒和游戏主机(如 PlayStation)中使用 MIPS 架构。
- 高性能计算:部分超级计算机和服务器采用 MIPS 处理器。
4.5 RISC-V
RISC-V 是一种基于 RISC(精简指令集计算机) 设计的开源指令集架构(ISA),由加州大学伯克利分校的研究团队开发。RISC-V 以其开放性、模块化和灵活性著称,适用于从嵌入式系统到高性能计算的各种应用场景。
4.5.1 历史背景
- 2010年:RISC-V 项目在加州大学伯克利分校启动,旨在开发一种开放的指令集架构。
- 2014年:RISC-V 基金会成立,推动 RISC-V 的标准化和普及。
- 2010年代:RISC-V 在学术界和工业界逐渐受到关注,吸引了众多企业和研究机构的参与。
- 2020年:RISC-V 基金会将总部迁至瑞士,并更名为 RISC-V International。
- 现代:RISC-V 在嵌入式系统、物联网(IoT)、人工智能(AI)和高性能计算领域快速发展。
4.5.2 RISC-V 架构的特点
(1)RISC 设计
- RISC-V 是一种典型的 RISC 架构,指令集简单且高效。
- 指令长度固定(32 位或 16 位),格式统一。
- 单条指令执行一个简单操作,复杂操作通过多条指令完成。
(2)模块化设计
- RISC-V 采用模块化设计,核心指令集(Base ISA)和扩展指令集(Extensions)分离。
- 核心指令集:包括整数指令集(RV32I/RV64I)和浮点指令集(RV32F/RV64F)。
- 扩展指令集:如乘法/除法扩展(M)、原子操作扩展(A)、向量扩展(V)等。
- 用户可以根据需求选择所需的指令集,减少硬件复杂度和功耗。
(3)寄存器
- RISC-V 架构有 32 个通用寄存器(x0-x31)。
- x0 是硬编码的零寄存器,读取时始终返回 0。
- x1-x31 用于通用数据存储和操作。
- 部分 RISC-V 处理器还支持浮点寄存器(f0-f31)和向量寄存器。
(4)指令集
- RV32I/RV64I:32 位和 64 位整数指令集,支持基本的算术、逻辑和控制流操作。
- RV32E:嵌入式版本,仅支持 16 个通用寄存器。
- RV32F/RV64F:单精度和双精度浮点指令集。
- RV32D/RV64D:双精度浮点指令集。
- 扩展指令集:
- M:乘法/除法扩展。
- A:原子操作扩展。
- C:压缩指令扩展(16 位指令)。
- V:向量扩展(SIMD 操作)。
- B:位操作扩展。
(5)内存寻址模式
- RISC-V 支持简单的内存寻址模式,主要包括:
- 寄存器间接寻址。
- 基址加偏移量寻址。
(6)异常和中断处理
- RISC-V 架构支持硬件中断和异常处理。
- 异常处理通过异常程序计数器(EPC)和状态寄存器(CSR)实现。
4.5.3 RISC-V 架构的演变
(1)早期 RISC-V 架构
- RV32I:首个 32 位整数指令集,定义了 RISC-V 的核心架构。
- RV64I:64 位整数指令集,支持更大的地址空间和更高的性能。
(2)扩展指令集
- M 扩展:引入乘法/除法指令。
- F/D 扩展:引入单精度和双精度浮点指令。
- C 扩展:引入 16 位压缩指令,减少代码体积。
- V 扩展:引入向量指令,支持 SIMD 操作。
(3)现代 RISC-V 架构
- RISC-V 特权架构:定义特权模式和虚拟内存支持。
- RISC-V 调试架构:支持硬件调试功能。
- RISC-V 向量扩展:支持高性能计算和 AI 应用。
4.5.4 RISC-V 架构的优势
- 开放性:RISC-V 是开源的,任何人都可以免费使用和修改。
- 模块化:用户可以根据需求选择指令集,减少硬件复杂度和功耗。
- 灵活性:RISC-V 适用于从嵌入式系统到高性能计算的各种应用场景。
- 生态系统:RISC-V 的生态系统正在快速发展,吸引了众多企业和研究机构的参与。
4.5.5 RISC-V 架构的挑战
- 生态系统不足:与 ARM 和 x86 相比,RISC-V 的软件和工具链支持相对较弱。
- 市场接受度:RISC-V 需要时间在商业市场中建立广泛的接受度。
4.5.6 RISC-V 的应用领域
- 嵌入式系统:RISC-V 处理器广泛应用于工业控制、汽车电子和家用电器。
- 物联网(IoT):低功耗传感器和智能设备中常见 RISC-V 处理器。
- 人工智能(AI):RISC-V 的向量扩展支持 AI 和机器学习应用。
- 高性能计算:部分超级计算机和服务器采用 RISC-V 处理器。
4.6 LoongArch
LoongArch 是中国龙芯公司自主研发的一种指令集架构(ISA),采用 RISC(精简指令集计算机) 设计,具有自主知识产权。LoongArch 架构支持 32 位和 64 位模式,具备模块化设计,适用于从嵌入式系统到高性能计算的各种应用场景。其特点包括高效能、低功耗和良好的扩展性,旨在打破对国外技术的依赖,推动国产处理器的发展。LoongArch 已应用于龙芯系列处理器,广泛应用于政府、教育、工业控制和消费电子等领域。
4.7 Modern Microprocessors A 90-Minute Guide!
这是一篇值得阅读的文档
Modern Microprocessors A 90-Minute Guide!