目录
- [计算机系统简介]
- [计算机的基本组成]
- [计算机硬件主要技术指标]
一、计算机系统简介
1.1 信息化世界与硬件入门
我们生活在高度信息化的世界中,每天使用的电脑、手机都属于计算机范畴。计算机体系从下到上依次为:
应用软件(某x信、某x音、游戏……)
↑
操作系统(Windows、macOS、Linux、Android、iOS……)
↑
计算机硬件(CPU、内存、硬盘、显卡……)
通过计算机网络,所有计算机之间实现了信息的互联互通。
计算机组成原理这门课研究的核心问题:计算机硬件在底层是如何相互协调工作的。
1.1.1 大家熟悉的硬件
| 硬件 | 作用 | 生活中的关注点 |
|---|---|---|
| CPU | 中央处理器,运算核心 | 型号、性能、决定游戏图像处理速度 |
| 内存(主存) | 运行内存 | 容量越大,同时开多个应用越流畅 |
| 硬盘(外存/辅存) | 机身存储 | 容量决定能存多少电影、文件 |
| 显卡(GPU) | 图形处理 | 游戏玩家重点关注性能 |
这些硬件都通过金属针脚与主板连接,针脚是收发二进制数据的通道。主板上的印刷电路板(PCB)上的一条条线路就是导电用的"电线",用于传输电信号。
1.1.2 计算机硬件能识别的数据
计算机硬件唯一能识别的数据是二进制 0/1。
- 用低电平表示二进制 0
- 用高电平表示二进制 1
通过多条电路可以同时传递多个二进制数位,每个二进制数位称为 1 bit(比特)。
形象理解:可以把每根导线想象成一根"电击线",低电平=微弱电流(表示0),高电平=强电流(表示1)。多根导线同时放电,就能一次性传递多个比特的数据。
1.1.3 待探索的核心问题
学习本章后仍需深入探讨的问题:
- 数字、文字、图像如何用二进制表示?
- CPU 如何对二进制数进行加减乘除?
- 如何存储这些二进制数?
- 如何从内存中取出想要的数据?
- CPU 如何识别和执行我们写的程序?
1.2 什么是计算机系统
计算机系统 = 硬件 + 软件
| 组成 | 定义 | 举例 |
|---|---|---|
| 硬件 | 计算机的实体,看得见摸得着 | 主机、外设(鼠标、键盘、显示器) |
| 软件 | 由具有各类特殊功能的程序组成 | 操作系统、X信、浏览器 |
计算机性能的好坏取决于"软""硬"件功能的总和。
- 硬件是物理基础,决定了系统的天花板和瓶颈
- 软件决定了硬件性能能发挥到什么程度
1.3 计算机软件
软件分为两大类:
1.3.1 系统软件
用来管理整个计算机系统的软件:
| 类型 | 说明 | 举例 |
|---|---|---|
| 操作系统 | 最典型的系统软件 | Windows、Linux、macOS |
| 语言处理程序 | 将高级语言翻译成机器语言 | 编译程序、汇编程序 |
| 数据库管理系统 | 管理数据库 | DBMS(如 MySQL、Oracle) |
| 网络软件 | 实现网络协议 | TCP/IP 协议栈 |
| 服务性程序 | 辅助开发与维护 | 调试程序、连接程序 |
| 标准程序库 | 编程时调用的库函数 | C 标准库 |
1.3.2 应用软件
按任务需要编制成的各种程序,用户直接接触最多:
- xx、xxxx、xx、美xxx、xx、xx等
本课程重点探讨硬件部分。
1.4 硬件的发展
1.4.1 第一台电子数字计算机:ENIAC(1946)
- 诞生时间:1946 年(二战末期,美国军方为计算弹道轨迹而研制)
- 占地面积:约 170 平方米
- 耗电量:150 千瓦
- 运算速度:5000 次加法/秒
- 逻辑元件:电子管(共使用 1.8 万个)
- 编程方式:手动接线来控制计算
- 顾问:冯·诺依曼
1.4.2 计算机发展的四个时代
| 代次 | 时期 | 主要器件 | 速度(次/秒) | 内存 | 外存 |
|---|---|---|---|---|---|
| 第一代 | 1946–1957 | 电子管 | 几千 ~ 几万 | 汞延迟线、磁鼓 | 穿孔卡片、纸带 |
| 第二代 | 1958–1964 | 晶体管 | 几万 ~ 几十万 | 磁芯存储器 | 磁带 |
| 第三代 | 1964–1971 | 中小规模集成电路 | 几十万 ~ 几百万 | 半导体存储器 | 磁带、磁盘 |
| 第四代 | 1972–至今 | 大及超大规模集成电路 | 上千万 ~ 万亿 | 半导体存储器 | 磁盘、磁带、光盘、半导体存储器 |
第一代:电子管时代
- 逻辑元件:电子管(体积大、耗电量大)
- 使用机器语言编程,在纸带上打孔(有孔=0,无孔=1)
- "Bug"一词的由来:纸带机时代,一只小虫子(bug)落在纸带上会导致程序读取错误,此后程序错误就被称为 bug
第二代:晶体管时代
- 1947 年贝尔实验室发明晶体管
- 晶体管相比电子管:体积大幅缩小、功耗降低、可靠性提升
- 出现面向过程的程序设计语言:FORTRAN
- 有了操作系统雏形
- 缺点:几万~几十万个晶体管需手工焊接,焊点多,硬件不可靠
第三代:中小规模集成电路时代
- 将逻辑元件集成在基片(芯片)上
- 计算机体积更小、功耗更低、可靠性更高
- 计算机主要用于科学计算等专业用途
- 高级语言迅速发展
- 开始有了分时操作系统
第四代:大规模、超大规模集成电路时代
- 开始出现微处理器和微型计算机
- 个人计算机(PC)萌芽
- 操作系统:Windows、macOS、Linux 等
- 例:苹果 A13 芯片采用 7nm 工艺,指甲盖大小集成 85 亿个晶体管
1.5 微处理器的发展
微型计算机的发展以微处理器技术为标志。英特尔(Intel)是微处理器领域的代表企业。
| 微处理器 | 机器字长 | 年份 | 晶体管数量 |
|---|---|---|---|
| 8080 | 8 位 | 1974 | — |
| 8086 | 16 位 | 1979 | 2.9 万 |
| 80286 | 16 位 | 1982 | 13.4 万 |
| 80386 | 32 位 | 1985 | 27.5 万 |
| 80586 | 32 位 | 1989 | 120 万 |
| Pentium | 64 位 | 1993 | 310 万 |
| Pentium Pro | 64 位 | 1995 | 550 万 |
| Pentium Ⅱ | 64 位 | 1997 | 750 万 |
| Pentium Ⅲ | 64 位 | 1999 | 950 万 |
| Pentium Ⅳ | 64 位 | 2000 | 4200 万 |
机器字长:计算机一次整数运算所能处理的二进制位数。
机器字长直接影响运算速度——例如计算 16 位加法,8 位 CPU 需运算两次,16 位 CPU 只需一次。
1.6 硬件发展的重要历史脉络
| 年份 | 事件 |
|---|---|
| 1947 | 贝尔实验室发明"晶体管"(肖克利等三人,肖克利获 1956 年诺贝尔物理学奖) |
| 1955 | 肖克利在硅谷创建肖克利实验室股份有限公司 |
| 1957 | "八叛徒"(Traitorous Eight)离开肖克利,创立仙童半导体公司 |
| 1959 | 仙童半导体公司发明"集成电路" |
| 1968 | 摩尔等人离开仙童,创立 Intel |
| 1969 | 仙童销售部负责人桑德斯离开仙童,创立 AMD |
仙童半导体被称为"半导体产业的摇篮",孕育了 Intel 和 AMD 两大巨头。
1.7 摩尔定律
由英特尔联合创始人戈登·摩尔提出:
集成电路上可容纳的晶体管数目,约每隔 18 个月便会增加一倍,整体性能也将提升一倍。
摩尔定律揭示了信息技术进步的速度。
半导体存储器的发展也符合摩尔定律:
- 1970 年,仙童公司生产出第一个较大容量的半导体存储器
- 单芯片容量发展:1KB → 4KB → 16KB → 64KB → 256KB → 1MB → 4MB → 16MB → 64MB → 256MB → 1GB……
1.8 软件的发展
| 阶段 | 特点 |
|---|---|
| 机器语言阶段 | 程序员需关注机器具体特性,编程困难,软件不丰富 |
| 高级语言阶段 | 出现 Pascal、C、C++ 等,程序员只需专注问题本身,接近自然语言 |
| 网络语言阶段 | 出现 Java、Python 等更适用于网络环境的编程语言 |
| 操作系统发展 | DOS(命令行)→ Windows(图形化界面)→ Android/iOS 等移动系统 |
编程语言是否好用直接决定了软件世界是否丰富。
1.9 目前的发展趋势:"两极"分化
| 方向 | 发展趋势 | 代表 |
|---|---|---|
| 微型计算机 | 更微型化、网络化、高性能、多用途 | 智能手机、智能穿戴设备 |
| 巨型机 | 更巨型化、超高速、并行处理、智能化 | 超级计算机 |
超级计算机代表:
- 神威·太湖之光:每秒 9.3 亿亿次浮点运算(世界排名前列)
- 天河二号:中国另一台顶级超算
二、计算机的基本组成
2.1 早期冯·诺依曼结构
2.1.1 "存储程序"概念
冯·诺依曼提出的核心思想:
将指令以二进制代码的形式事先输入计算机的主存储器,然后按其在存储器中的首地址执行程序的第一条指令,以后就按该程序的规定顺序执行其他指令,直至程序执行结束。
- ENIAC:手动接线来控制计算(说一句做一句,效率低)
- EDVAC:第一台冯·诺依曼结构的计算机(提前把全部指令存入主存,计算机自动逐条执行)
2.1.2 冯·诺依曼计算机的五大部件

| 部件 | 功能 |
|---|---|
| 输入设备 | 将信息转换成机器能识别的形式(二进制) |
| 存储器 | 存放数据和程序 |
| 运算器 | 实现算术运算(加减乘除)和逻辑运算(与或非) |
| 控制器 | 指挥程序运行,解析指令,发出控制信号 |
| 输出设备 | 将结果转换成人们熟悉的形式 |
实线箭头 = 数据线;虚线箭头 = 控制线和反馈线。
2.1.3 冯·诺依曼计算机的六大特点
- 计算机由五大部件组成(输入设备、输出设备、运算器、存储器、控制器;输入/输出统称 I/O 设备)
- 指令和数据以同等地位存于存储器,可按地址寻访
- 指令和数据用二进制表示(方便用电信号表示 0/1 两种状态)
-
指令由操作码和地址码组成
- 操作码:指明要进行什么操作(如加减乘除)
- 地址码:指明操作数在内存中的地址
- 存储程序(提前将指令和数据存入存储器)
- 以运算器为中心(输入/输出设备与存储器之间的数据传送都通过运算器完成)
以运算器为中心的缺点:运算器本是数据处理核心,但所有数据中转都要经过它,导致计算效率降低。
2.1.4 软硬件逻辑等效
在计算机系统中,软件和硬件在逻辑上是等效的:
- 同一功能既可以用软件实现,也可以用硬件实现
- 软件实现:成本低、效率低
- 硬件实现:成本高、效率高
例:乘法运算——可以设计专门的硬件乘法电路(快),也可以用软件执行多次加法来模拟(慢)。
2.2 现代计算机的结构
现代计算机以存储器为中心,而非以运算器为中心:
┌──────────┐
输入 ──→│ │
设备 │ 存储器 │←──→ 输出设备
│ (中心) │
└────┬─────┘
│
┌────▼─────────────┐
│ CPU │
│ 运算器 + 控制器 │
└──────────────────┘
- 输入设备的数据直接存入存储器
- 输出设备直接从存储器取数据
- 运算器不再承担数据中转任务,可专注于运算
CPU = 运算器 + 控制器(因两者逻辑关系紧密,在大规模集成电路时代被集成在同一芯片上)
重要概念辨析
| 概念 | 定义 | 包含 |
|---|---|---|
| 主机 | 主存储器 + CPU | 主存、运算器、控制器 |
| 主存(主存储器) | 内存 | 运行内存(如手机 8GB 运行内存) |
| 辅存(辅助存储器) | 外存,属于 I/O 设备 | 硬盘、SSD(如手机 128GB 机身存储) |
注意:平时说的"电脑主机"包含更多部件(硬盘、风扇等),与本课程中的"主机"概念不同。
辅存(硬盘)属于 I/O 设备,不属于主机。APP 平时存在辅存,运行时才调入主存。
2.3 主存储器的基本组成
主存储器由三部分组成:
┌─────────────────────────────┐
│ 主存储器 │
│ ┌───────┐ ┌─────┐ ┌─────┐│
│ │存储体 │ │ MAR │ │ MDR ││
│ │(货架) │ │(取件号)│ │(柜台)││
│ └───────┘ └─────┘ └─────┘│
└─────────────────────────────┘
| 部件 | 全称 | 功能 | 类比 |
|---|---|---|---|
| 存储体 | Memory Bank | 存放二进制数据(由一系列存储元件构成) | 货架(存放包裹) |
| MAR | Memory Address Register(存储地址寄存器) | 存放要访问的存储单元地址 | 取件号(告诉店员包裹位置) |
| MDR | Memory Data Register(存储数据寄存器) | 存放从存储体读出/要写入的数据 | 柜台(取出的包裹放这里) |
读数据过程
- CPU 将目标数据的地址写入 MAR
- 主存根据 MAR 中的地址,从存储体中找到对应数据
- 将找到的数据放入 MDR
- CPU 从 MDR 中取走数据
写数据过程
- CPU 将目标地址写入 MAR
- CPU 将要写入的数据放入 MDR
- CPU 通过控制总线通知主存执行"写操作"
- 主存将 MDR 中的数据写入 MAR 指定的存储单元
2.4 运算器的基本组成
运算器由以下核心部件组成:
| 部件 | 全称 | 功能 |
|---|---|---|
| ACC | Accumulator(累加器) | 存放运算操作数及运算结果(加减乘除、逻辑运算都用) |
| MQ | Multiplier-Quotient Register(乘商寄存器) | 仅在乘法、除法运算时使用,存放乘除操作数或结果 |
| X | 通用操作数寄存器 | 存放操作数(实际 CPU 中通常有多个通用寄存器) |
| ALU | Arithmetic Logic Unit(算术逻辑单元) | 运算器的核心部件,用复杂电路实现算术运算和逻辑运算 |
ALU 是运算器中制造成本最高、硬件构造最复杂的部件。
ACC、MQ、X 都是寄存器,用于暂存数据;ALU 才是真正执行运算的核心。
2.5 控制器的基本组成
控制器由以下核心部件组成:
| 部件 | 全称 | 功能 |
|---|---|---|
| CU | Control Unit(控制单元) | 控制器的核心,分析指令并向其他部件发出控制信号 |
| IR | Instruction Register(指令寄存器) | 存放当前正在执行的指令 |
| PC | Program Counter(程序计数器) | 存放下一条指令的地址,具有自动加 1 功能 |
注意:此处 PC 是 Program Counter,不是 Personal Computer。
指令执行的三个阶段
取指令 → 分析指令 → 执行指令
(取指) (译码) (执行)
- 取指令:根据 PC 中的地址,从主存取出指令,放入 IR
- 分析指令:CU 分析 IR 中指令的操作码,判断要执行什么操作
- 执行指令:CU 控制其他部件配合完成指令的具体执行
很多教材将前两阶段统称为"取指阶段",最后阶段称为"执行阶段"。
2.6 计算机的工作过程(完整实例)
以 C 语言程序 y = a * b + c 为例,演示计算机如何执行。
2.6.1 程序在主存中的布局
高级语言经编译链接后翻译成机器语言并装入主存:
| 主存地址 | 内容 | 说明 |
|---|---|---|
| 0 | 取数指令(操作码+地址码) | 指令区 |
| 1 | 乘法指令 | 指令区 |
| 2 | 加法指令 | 指令区 |
| 3 | 存数指令 | 指令区 |
| 4 | 停机指令 | 指令区 |
| 5 | a = 2 | 数据区 |
| 6 | b = 3 | 数据区 |
| 7 | c = 1 | 数据区 |
| 8 | y(待写入) | 数据区 |
每条指令由操作码和地址码组成,共占 16 比特(存储字长=16bit)。
符号约定:(寄存器名)表示该寄存器中的内容,M(MAR)表示主存中 MAR 所指单元的内容。
2.6.2 第一条指令:取数(LOAD a)

初始状态:(PC) = 0(指向第一条指令)
| 步骤 | 操作 | 结果 |
|---|---|---|
| ① | (PC) → MAR |
(MAR) = 0 |
| ② | CU 发读信号 | 主存准备读 |
| ③ | M(MAR) → MDR |
(MDR) = 取数指令 |
| ④ | (MDR) → IR |
(IR) = 取数指令 |
| ⑤ | OP(IR) → CU |
CU 分析出这是"取数指令" |
| ⑥ | Ad(IR) → MAR |
(MAR) = 5(操作数地址) |
| ⑦ | CU 发读信号 | 主存准备读数据 |
| ⑧ | M(MAR) → MDR |
(MDR) = 2(变量 a 的值) |
| ⑨ | (MDR) → ACC |
(ACC) = 2 |
取指后 PC 自动 +1,此时 (PC) = 1。
2.6.3 第二条指令:乘法(MUL b)
| 步骤 | 操作 | 结果 |
|---|---|---|
| ① | (PC) → MAR |
(MAR) = 1 |
| ③ | M(MAR) → MDR |
(MDR) = 乘法指令 |
| ④ | (MDR) → IR |
(IR) = 乘法指令 |
| ⑤ | OP(IR) → CU |
CU 分析出这是"乘法指令" |
| ⑥ | Ad(IR) → MAR |
(MAR) = 6 |
| ⑧ | M(MAR) → MDR |
(MDR) = 3(变量 b 的值) |
| ⑨ | (MDR) → MQ |
(MQ) = 3 |
| ⑩ | (ACC) → X |
(X) = 2(被乘数) |
| ⑪ | (MQ) × (X) → ACC |
ALU 执行乘法,(ACC) = 6
|
乘法运算中:被乘数放 X,乘数放 MQ,乘积结果放 ACC(若乘积太大,需 MQ 辅助存储高位)。
取指后(PC) = 2,执行后(ACC) = 6。
2.6.4 第三条指令:加法(ADD c)
类似流程:从地址 7 取出 c = 1,与 ACC 中的 6 相加,结果 (ACC) = 7。
2.6.5 第四条指令:存数(STORE y)
| 步骤 | 操作 | 结果 |
|---|---|---|
| ① | (PC) → MAR |
(MAR) = 3 |
| ③ | M(MAR) → MDR |
(MDR) = 存数指令 |
| ④ | (MDR) → IR |
(IR) = 存数指令 |
| ⑤ | OP(IR) → CU |
CU 分析出这是"存数指令" |
| ⑥ | Ad(IR) → MAR |
(MAR) = 8(目标地址) |
| ⑦ | (ACC) → MDR |
(MDR) = 7 |
| ⑧ | CU 发写信号 | 主存准备写 |
| ⑨ | (MDR) → M(MAR) |
地址 8 的单元写入 7,即 y = 7
|
最终结果:y = a × b + c = 2 × 3 + 1 = 7,写入主存地址 8。
2.7 计算机系统的层次结构
┌─────────────────────────────────────┐
│ 虚拟机器 M4(高级语言机器) │ ← 软件
│ y = a * b + c │
├─────────────────────────────────────┤
│ 虚拟机器 M3(汇编语言机器) │ ← 软件
│ LOAD 5 / MUL 6 / ADD 7 / STORE 8 │
├─────────────────────────────────────┤
│ 传统机器 M2(操作系统的机器) │ ← 软件
│ 向上提供"广义指令"(系统调用) │
├─────────────────────────────────────┤
│ 传统机器 M1(用机器语言的机器) │ ← 软硬件交界
│ 执行二进制机器指令 │
│ 000001 0000000101(取数指令) │
├─────────────────────────────────────┤
│ 微程序机器 M0(微指令系统) │ ← 硬件
│ 由硬件直接执行微指令 │
└─────────────────────────────────────┘
各层之间的翻译关系:
- M4 → M3:用编译程序将高级语言翻译成汇编语言程序
- M3 → M1:用汇编程序将汇编语言翻译成机器语言程序
- M2 → M1:操作系统向上提供"广义指令"(系统调用)
- M1 → M0:由硬件直接执行微指令
核心原则:下层是上层的基础,上层是下层的扩展。
2.8 三种级别的语言
| 语言级别 | 特点 |
|---|---|
| 机器语言 | 二进制代码,计算机硬件直接识别,最底层 |
| 汇编语言 | 用助记符表示机器指令,需汇编程序翻译 |
| 高级语言 | 接近自然语言,如 C、Java、Python,需编译或解释 |
编译程序 vs 解释程序
| 类型 | 工作方式 | 特点 |
|---|---|---|
| 编译程序 | 将高级语言源程序全部语句一次全部翻译成机器语言程序,而后再执行 | 只需翻译一次,执行速度快 |
| 解释程序 | 将源程序的一条语句翻译成机器语言并立即执行,再翻译下一句 | 每次执行都要翻译,执行速度慢 |
三、计算机硬件主要技术指标
3.1 机器字长
机器字长:CPU 一次能处理数据的位数,与 CPU 中的寄存器位数有关。
- 机器字长越长,运算精度越高,运算速度越快
- 常见字长:8 位、16 位、32 位、64 位
- 现代个人计算机 CPU 普遍为 64 位
3.2 运算速度
衡量计算机运算速度的方法:
| 方法 | 说明 |
|---|---|
| 吉普森法(Gibson) | 综合考虑各类指令的使用频率和执行时间,加权计算平均运算速度 |
| MIPS | Million Instructions Per Second,每秒百万条指令 |
| MFLOPS | Million Floating-point Operations Per Second,每秒百万次浮点运算 |
| CPI | Clock cycles Per Instruction,执行每条指令所需的时钟周期数 |
运算速度与机器字长、主存速度、指令系统等多种因素有关。
3.3 存储容量
存储容量:存放二进制信息的总位数。
计算公式:
总容量 = 存储单元个数 × 存储字长 (bit)
= 存储单元个数 × 存储字长 / 8 (Byte)
1 Byte = 8 bit
MAR 与 MDR 的关系:
- MAR 位数 → 反映存储单元的个数(最多支持 2^MAR位数 个单元)
- MDR 位数 = 存储字长 = 每个存储单元的大小
例题:
MAR 为 32 位,MDR 为 8 位,求总容量。
总容量 = 2^32 × 8 bit = 2^32 Byte = 4GB
四、知识回顾
核心概念速查表
| 概念 | 核心要点 |
|---|---|
| 计算机系统 | 硬件 + 软件 |
| 硬件发展四代 | 电子管 → 晶体管 → 中小规模集成电路 → 大/超大规模集成电路 |
| 冯·诺依曼结构 | 五大部件、存储程序、二进制、以运算器为中心 |
| 现代计算机结构 | 以存储器为中心,CPU = 运算器 + 控制器 |
| 主机 | CPU + 主存储器(辅存属于 I/O 设备) |
| 主存组成 | 存储体 + MAR(地址寄存器)+ MDR(数据寄存器) |
| 运算器组成 | ACC(累加器)+ MQ(乘商寄存器)+ X(通用寄存器)+ ALU(算术逻辑单元) |
| 控制器组成 | CU(控制单元)+ IR(指令寄存器)+ PC(程序计数器,自动+1) |
| 指令执行 | 取指 → 分析 → 执行 |
| 层次结构 | M0 微程序 → M1 机器语言 → M2 操作系统 → M3 汇编 → M4 高级语言 |
| 机器字长 | CPU 一次能处理的二进制位数 |
| 存储容量 | 存储单元个数 × 存储字长 |
| 摩尔定律 | 晶体管数目约每 18 个月翻一倍 |
重要缩写对照表
| 缩写 | 全称 | 中文 |
|---|---|---|
| CPU | Central Processing Unit | 中央处理器 |
| ALU | Arithmetic Logic Unit | 算术逻辑单元 |
| CU | Control Unit | 控制单元 |
| MAR | Memory Address Register | 存储地址寄存器 |
| MDR | Memory Data Register | 存储数据寄存器 |
| IR | Instruction Register | 指令寄存器 |
| PC | Program Counter | 程序计数器 |
| ACC | Accumulator | 累加器 |
| MQ | Multiplier-Quotient Register | 乘商寄存器 |
| I/O | Input/Output | 输入/输出 |
| PCB | Printed Circuit Board | 印刷电路板 |
| ENIAC | Electronic Numerical Integrator And Computer | 第一台电子数字计算机 |
| EDVAC | Electronic Discrete Variable Automatic Computer | 第一台冯·诺依曼结构计算机 |