1.2.2 计算机硬件
冯·诺依曼机的基本思想
冯·诺依曼在研究 EDVAC 时提出“存储程序”思想,奠定了现代计算机的基本结构。
主要特点如下:
- 采用存储程序方式:程序和初始数据先存入主存,启动后计算机自动、连续取指并执行,直到程序结束。
- 硬件由五大部件组成:运算器、控制器、存储器、输入设备、输出设备。
- 指令和数据同形存储:二者在存储器中都以二进制形式保存,计算机通过使用方式识别它们。
- 指令和数据都采用二进制编码。
- 指令由操作码和地址码构成:操作码说明“做什么”,地址码说明“操作谁/数据在哪里”。
计算机的功能部件
中央处理器(CPU)
- CPU 是执行指令的核心部件。
- 传统上由运算器和控制器组成;现代处理器中通常组织为数据通路和控制单元。
- 数据通路的核心包括:
- 算术逻辑单元(ALU):执行算术与逻辑运算。
- 通用寄存器组:提供操作数并暂存运算结果。
- 多路选择器、内部互连等:在各部件间传送数据。
- 控制单元负责取指、译码并产生控制信号,协调数据通路按正确顺序完成操作。
存储器
- 按访问特性分为内存和外存。
- 内存主要包括主存和高速缓存(Cache);在冯·诺依曼结构中,主存用于存放待执行的程序与数据。
- 外存用于持久保存数据,如磁盘、固态硬盘;磁带、光盘等可用于长期备份。
外部设备与设备控制器
- 外部设备(I/O 设备)负责实际输入或输出,如键盘、鼠标、显示器、打印机。
- 设备控制器负责与主机通信并控制外设,如 USB 控制器、显卡、网卡、磁盘控制器。
总线
- 总线是各部件之间传递信息的公共通路。
- CPU、主存和 I/O 接口通过不同层次的总线互连;桥接器负责不同总线之间的数据转发和协调。
本节速记
- 冯·诺依曼机核心:存储程序 + 二进制 + 五大部件。
- CPU 核心:ALU + 寄存器组 + 控制单元。
- 主存承担工作存储;外存承担持久存储。
1.2.4 计算机系统的层次结构
计算机系统采用多级层次结构:从用户问题到物理器件,各层向上提供更简洁的接口,向下依赖更底层的功能实现。分层使软硬件职责更清晰,也便于系统并行开发和维护。
算法与编程
解决应用问题通常经历:
- 把问题抽象为正确的算法。
- 使用编程语言把算法写成程序。
- 经翻译程序转换为机器可执行的形式。
编程语言要求语法严谨、语义明确,能精确描述执行顺序。
三类编程语言
| 类型 | 特点 | 能否直接执行 |
|---|---|---|
| 机器语言 | 由 0 和 1 构成,是机器唯一能直接识别的语言 | 能 |
| 汇编语言 | 用 mov、add 等助记符表示指令,可读性较强 |
不能,需汇编器翻译 |
| 高级语言 | 接近自然语言,如 C、C++、Java,开发效率高 | 不能,需编译或解释 |
三类翻译程序
- 汇编程序(汇编器):把汇编语言源程序翻译为机器语言目标程序。
- 解释程序(解释器):逐条翻译并立即执行,一般不生成独立目标程序。
- 编译程序(编译器):把高级语言源程序一次性翻译成汇编语言或机器语言目标程序。
操作系统
- 所有语言处理系统都在操作系统提供的运行环境中执行。
- 操作系统抽象底层硬件,向程序员提供一台更容易使用的“虚拟机”。
指令集体系结构(ISA)
- ISA 是软件与硬件之间的关键接口,也是软件可见的硬件功能规范。
- 主要规定:指令格式、操作类型、寻址方式、可访问寄存器等。
- 软件依据 ISA 编写或生成机器指令;硬件负责解释并完成这些指令规定的操作。
微体系结构
- 微体系结构是处理器内部实现 ISA 的具体硬件组织方式。
- ISA 决定“能做什么”,微体系结构决定“怎么做”。
- 同一 ISA 可以由不同微体系结构实现,因此软件通常无需修改即可兼容。
- 设计内容包括数据通路、控制单元、流水线级数、Cache 层次、并行执行机制等。
本节速记
- ISA 是软硬件分界面。
- 同一 ISA,不同微体系结构;软件仍可兼容。
- 典型层次自上而下:高级语言虚拟机 → 汇编语言虚拟机 → 操作系统虚拟机 → 机器语言机器。
1.2.5 计算机系统的不同用户
按使用计算机完成任务的性质,可分为四类主要角色:
用户类型
| 用户角色 | 主要工作层次 | 典型职责 |
|---|---|---|
| 最终用户 | 应用程序层 | 使用办公、浏览器等应用完成任务 |
| 系统管理员 | 操作系统层 | 配置和维护系统、安装软硬件、管理用户、备份与升级 |
| 应用程序员 | 高级语言/应用层 | 开发面向办公、娱乐等需求的应用软件 |
| 系统程序员 | 系统软件层 | 开发操作系统、编译器、数据库管理系统等核心软件 |
同一人在不同场景中可能承担多种角色。例如,计算机专业学生既可能是网上购物的最终用户,也可能是管理自己电脑的系统管理员,还可能是课程作业的应用程序员。
软硬件层次边界
理解用户角色时,应抓住两个边界:
- ISA 以下属于硬件实现层,包括 CPU、主存和 I/O 等物理组件。
- ISA 以上属于软件层,包括系统软件和应用软件。
下层实现通常对上层用户透明:高级语言程序员一般不需要了解 ISA 下方的具体硬件机制。
1.2.6 计算机系统的工作原理
“存储程序”工作方式
程序执行前,先把指令和数据装入主存。启动后,CPU 按地址自动、连续地取指并执行,无需人工逐条干预。
指令执行循环
- 取指:根据程序计数器 PC 给出的地址从主存取出指令。
- 译码:分析操作码,确定操作类型与所需资源。
- 取操作数并执行:读取操作数,由相应部件完成运算。
- 写回结果:把结果写回寄存器或存储器。
- 更新 PC:
- 顺序指令:PC 增加一条指令的长度。
- 跳转指令:PC 改为指令指定的目标地址。
从源程序到可执行文件
以 GCC 处理 C 程序 hello.c 为例,生成可执行文件通常经历四个阶段:
| 阶段 | 工具 | 输入 → 输出 | 主要工作 |
|---|---|---|---|
| 预处理 | cpp |
hello.c → hello.i |
展开宏、处理条件编译,并把头文件内容并入源文件 |
| 编译 | cc1 |
hello.i → hello.s |
把 C 程序转换为汇编语言程序 |
| 汇编 | as |
hello.s → hello.o |
把汇编指令转换为机器码,生成可重定位目标文件 |
| 链接 | ld |
hello.o + 库文件 → hello |
合并目标文件与库,解析外部符号,生成完整可执行文件 |
指令执行过程的抽象模型
- 可执行文件中的代码段由机器指令组成,每条指令用二进制编码表示一个基本操作。
- CPU 对指令进行“取指—译码—执行—写回”的循环。
- 这一模型说明软件如何驱动硬件,是进一步学习 CPU 数据通路、控制器和时序机制的基础。
流程速记
程序运行:装入主存 → 取指 → 译码 → 执行 → 写回 → 更新 PC → 循环
C 程序构建:.c → 预处理 → .i → 编译 → .s → 汇编 → .o → 链接 → 可执行文件