架构
架构(Architecture),在计算机领域,是指对计算机系统、软件系统或处理器等计算实体的整体结构设计,包括其组成部分、相互之间的关系以及设计原则与演化指导。架构是连接需求与实现的桥梁,它定义了系统的顶层结构、关键组件及其交互方式,为系统的构建、维护和扩展提供了蓝图[1]。在计算机科学中,“架构”一词涵盖从指令集(ISA)、微架构到操作系统、分布式系统等多个抽象层级,通常可分为计算机体系结构(Computer Architecture)和软件架构(Software Architecture)两大范畴[2]。计算机体系结构侧重于硬件层面的设计与组织,关注处理器、存储器、输入输出等物理组件的构成与协同;软件架构则聚焦于软件系统的高层结构,描述系统的组件划分、接口定义和交互模式。架构设计直接影响系统的性能、可扩展性、可靠性、安全性及成本等多个关键质量属性,是计算机工程中的核心环节。
| 架构(计算机) | |
|---|---|
| 中文名 | 架构 |
| 外文名 | Architecture |
| 所属学科 | 计算机科学、计算机工程 |
| 细分领域 | 计算机体系结构、软件架构 |
| 核心概念 | 指令集架构、微架构、系统设计、组件、接口、模式 |
在计算机语境中,“架构”一词具有多重含义。从最广义的角度看,计算机系统结构(Computer Architecture)是指软、硬件的系统结构,有两方面含义:一是从程序设计者的角度所见的系统结构,是研究计算机体系的概念性结构和功能特性,关系到软件设计的特性;二是从硬件设计者的角度所见的系统结构,实际上是计算机体系的组成或实现,主要着眼于性能价格比的合理性[3]。
经典的计算机系统结构定义是指程序设计者(主要指低级语言程序员或系统软件设计者)所看到的计算机系统的属性,即计算机的功能特性和概念性结构,也称指令集体系结构(Instruction Set Architecture,ISA)[4]。ISA是计算机系统中硬件与软件之间的一个关键接口,定义了处理器能够理解和执行的一系列基本操作(指令),以及这些指令如何与硬件资源(如寄存器、内存、I/O设备等)进行交互[5]。
在计算机工程领域,“计算机体系结构”(Computer Architecture)与“计算机组织”(Computer Organization)是两个相关但不同的概念。计算机组成(Computer Organization)是指计算机主要功能部件的组成结构、逻辑设计及功能部件之间的相互连接关系;计算机系统结构(Computer Architecture)的经典定义是指程序设计者所看到的计算机系统的属性,即计算机的功能特性和概念性结构[4]。简而言之,体系结构回答“做什么”,而计算机组织回答“如何做”。例如,指令集体系结构(ISA)是体系结构的范畴,而微架构则是计算机组织的体现。
计算机系统可以看作是一个按功能划分的多级层次结构。从底层到应用层,典型的层次包括[6][5][2]:
- 第0层:数字逻辑层(晶体管、门电路、集成电路) - 第1层:微架构层(微程序控制、数据通路等硬件实现)
- 定义CPU能执行的指令、寄存器、寻址模式等,是硬件与软件的正式边界[5]
- 管理硬件资源(内存分配、进程调度、文件系统等)
- 汇编语言和高级语言(C、C++、Java等)程序的表示与编译
- 用户应用程序和系统服务
这种层次化的结构使得每一层都可以独立设计、优化和演进,而不必深入了解下层的具体实现细节,是计算机系统设计的重要原则。
计算机体系结构(Computer Architecture)指计算机系统的设计与组织,它包括计算机系统的各个组成部分及其相互之间的关系。这个概念既涵盖了硬件的物理结构,也包括了软件的逻辑框架,是计算机能够执行任务的基础。计算机体系结构的设计决定了系统的性能、能效、成本以及编程复杂性等多个方面[2]。
冯·诺依曼体系结构(Von Neumann Architecture),也称普林斯顿结构,是由数学家冯·诺依曼提出的一种计算机体系结构。1946年6月,冯·诺依曼在“EDVAC方案”中正式提出了以二进制、程序存储和程序控制为核心的思想,奠定了冯·诺依曼计算机的结构基础[7]。该结构的主要特点是将程序指令存储和数据存储合并在一起,采用单一的地址空间进行访问,取指令和取操作数都经由同一个总线进行串行传输[7]。计算机由五大基本部件组成:运算器、控制器、存储器、输入设备和输出设备。该体系结构具有以下特点:采用二进制逻辑、程序存储执行、计算机由五个部分组成。从EDVAC到当前最先进的计算机都采用了冯·诺依曼体系结构的基本原理[8]。
哈佛体系结构(Harvard Architecture)是一种并行体系结构,它将程序指令存储和数据存储分开,采用两个独立的存储器进行访问。程序存储器和数据存储器各自独立编址、独立访问,从而实现了指令和数据的并行处理[9]。哈佛结构的优点在于提高了指令的执行速度,同时降低了存储器的访问冲突,特别适合于数字信号处理(DSP)、图形处理等需要进行大量数据处理的领域[9]。两种结构的主要区别在于:冯·诺依曼结构采用统一的存储器空间存储程序指令和数据,指令和数据串行传输;哈佛结构则采用分离的存储器空间,可以并行访问指令和数据。
指令集架构(Instruction Set Architecture,ISA)是计算机体系结构中最重要的概念之一。ISA是处理器支持的所有指令的语义,包括指令本身及其操作数的语义,以及与外围设备的接口[10]。指令集架构是软件感知硬件的方式,被视为CPU的“灵魂”[10]。
- 复杂指令集计算机(CISC)
- 采用复杂指令集架构,如Intel的x86架构。CISC的特点是指令数量多、指令功能强大,单条指令可以完成多个操作,但硬件设计复杂,指令执行周期不固定。CISC的优势在于代码密度高,相同功能的程序占用更少的内存空间。
- 精简指令集计算机(RISC)
- 采用精简指令集架构,如ARM、MIPS、RISC-V等。RISC的特点是指令数量少、指令格式规整(通常为定长指令)、硬件设计相对简单,指令在一个时钟周期内完成。RISC的优势在于设计简洁、功耗低、易于实现流水线和高频率运行[10]。
历史上曾发生过“RISC与CISC之战”,最终两种理念在各自的领域找到了定位:x86(CISC)在桌面和服务器市场占据主导,ARM(RISC)则凭借其低功耗优势主导了移动设备市场。近年来,两种架构也在相互借鉴、相互融合[10]。
微架构(Microarchitecture),又称微体系结构或微处理器体系结构,是在计算机工程中实现指令集架构的处理器执行方法。微架构决定了指令在处理器内部如何被解码、执行和退休,包括数据通路、控制单元、流水线级数、缓存层级、分支预测等具体实现细节。一种给定的指令集架构可以在不同的微架构中执行,针对不同的设计目标(性能、功耗、成本)和技术水平进行优化[11]。
Flynn分类法(Flynn's Taxonomy)是计算机体系结构领域一种经典的分类方法,由Michael J. Flynn于1966年提出。该分类法基于两个维度——指令流(Instruction Stream)和数据流(Data Stream)——将计算机体系结构分为四个基本类型[2][12]:
| 类型 | 指令流 | 数据流 | 说明 | 典型代表 |
|---|---|---|---|---|
| SISD | 单 | 单 | 单指令流单数据流,传统的冯·诺依曼架构 | 早期个人计算机 |
| SIMD | 单 | 多 | 单指令流多数据流,同一指令处理多个数据 | GPU、向量处理器 |
| MISD | 多 | 单 | 多指令流单数据流,理论上存在但实际罕见 | 某些容错系统 |
| MIMD | 多 | 多 | 多指令流多数据流,最灵活的并行架构 | 多核处理器、多处理器系统 |
随着技术的发展,计算机体系结构不断演进。现代体系结构的主要发展方向包括[2]:
软件架构(Software Architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。软件架构是一个系统的“草图”,描述了直接构成系统的抽象组件,以及各个组件之间的连接和通信方式[1]。软件架构为软件系统提供了一个结构、行为和属性的高级抽象,由构件的描述、构件的相互作用、指导构件集成的模式以及这些模式的约束组成[15]。
- 构件(Component)
- 系统的功能模块或单元,是构成软件系统的基本元素。
- 连接器(Connector)
- 构件之间的交互机制,定义了通信方式和协议。
- 接口(Interface)
- 构件对外提供服务的声明,定义了其他构件可以如何使用该构件。
- 配置(Configuration)
- 构件和连接器的拓扑结构,即系统的整体布局。
- 质量属性(Quality Attribute)
- 系统应满足的非功能需求,如性能、可扩展性、可维护性、安全性等。
软件架构通常从多个视角(或称“视图”)来描述,每个视图聚焦于系统的不同关注点。常见的架构视图包括[15]:
- 逻辑架构(Logical Architecture)
- 描述系统的功能分解和模块划分,关注组件间的抽象关系。
- 进程视图(Process View)
- 描述系统的并发和同步结构,包括进程、线程的配置与交互[15]。
- 开发视图(Development View)
- 描述软件开发环境中的模块组织、包结构、版本管理等[15]。
软件架构领域存在多种经典架构模式和风格,用于解决特定类型的系统设计问题。常见的架构模式包括[1]:
- 分层架构(Layered Architecture)
- 将系统划分为若干层次,每一层为上层提供服务并依赖下层。
- 客户端-服务器架构(Client-Server Architecture)
- 将系统分为服务提供者(服务器)和服务请求者(客户端),通过网络进行交互。
- 事件驱动架构(Event-Driven Architecture)
- 组件之间通过事件进行通信,系统对事件作出响应。
- 微服务架构(Microservices Architecture)
- 将大型应用拆分为一组小型、独立部署的服务,每个服务围绕业务能力构建。
- 管道-过滤器架构(Pipe-and-Filter Architecture)
- 数据处理系统的一种常见模式,数据流经一系列处理单元(过滤器),通过管道连接。
- 1980年代—1990年代:微处理器与并行架构
- 微处理器技术迅速发展,个人计算机普及。RISC架构(如ARM、MIPS、SPARC)与CISC架构(如x86)竞争激烈。Flynn分类法奠定了并行架构的分类基础。分布式计算和集群计算进入实用阶段[2][12]。
- ↑ 1.0 1.1 1.2 1.3 1.4 软件架构(百度百科)
- ↑ 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 计算机体系结构概述(阿里云开发者社区)
- ↑ 3.0 3.1 3.2 计算机体系结构(百度百科)
- ↑ 4.0 4.1 计算机组成与系统结构(第3版),清华大学出版社
- ↑ 5.0 5.1 5.2 5.3 详解AI加速器(三):架构基础离不开ISA(阿里云开发者社区)
- ↑ 计算机系统层次结构(百度百科)
- ↑ 7.0 7.1 7.2 第2章 计算机硬件系统
- ↑ 8.0 8.1 冯·诺依曼结构(百度百科)
- ↑ 9.0 9.1 探索冯诺依曼体系结构和哈佛体系结构(百度开发者中心)
- ↑ 10.0 10.1 10.2 10.3 10.4 10.5 10.6 CPU指令集CISC与RISC对比及并行架构应用场景(阿里云开发者社区)
- ↑ 微架构(百度百科)
- ↑ 12.0 12.1 分类法(百度百科)
- ↑ 13.0 13.1 13.2 多核处理器(科普中国)
- ↑ 大规模并行处理机(百度百科)
- ↑ 15.0 15.1 15.2 15.3 15.4 15.5 15.6 软件架构(科普中国)