绪论
术语表
| 术语 | 解释 |
|---|---|
| 图灵模型 | 由艾伦·图灵于 1936 年提出的抽象计算模型。包含一条无限长的纸带(存储)、一个读写头(可读取/写入/移动)、一套状态转移规则(程序)。图灵模型证明了:任何可计算的问题,都可以用图灵机解决(丘奇-图灵论题)。它定义了计算机的可计算性边界。 |
| 冯·诺依曼模型 | 由冯·诺依曼于 1945 年提出的计算机体系结构,是现代几乎所有计算机的基础。核心思想:程序和数据以二进制形式存储在同一存储器中(存储程序概念)。包含五个子系统:存储器、算术逻辑单元、控制单元、输入单元、输出单元。 |
| 程序 | 一组有序指令的集合,用来告诉计算机如何执行特定任务。在图灵模型中,程序是状态转移表;在冯·诺依曼模型中,程序和数据一样存储在内存中,可被修改或替换。 |
| 存储单元 | 冯·诺依曼模型中用于存储数据和程序的子系统。由一系列可寻址的存储位置组成,每个位置存储固定长度的二进制数据。现代计算机中通常分为内存(RAM,临时存储)和外存(硬盘/SSD,永久存储)。 |
| 算术逻辑单元 (ALU) | 冯·诺依曼模型中的运算核心。负责执行算术运算(加、减、乘、除)和逻辑运算(与、或、非、异或)。不存储数据,只进行运算,结果送回存储器。 |
| 控制单元 (CU) | 冯·诺依曼模型中的"大脑"。负责从存储器中取指令(fetch)、解码(decode)、执行(execute)。控制单元通过控制总线协调 ALU、存储器、输入输出设备之间的数据流动。 |
| 输入/输出 (I/O) | 计算机与外部世界交互的接口。输入将外部数据(键盘、鼠标、传感器、网络数据)转换为计算机可处理的二进制形式;输出将处理结果(显示器、打印机、音频、控制信号)转换为人类可感知的形式。 |
| Pascaline 计算器 | 1642 年由法国数学家帕斯卡(Blaise Pascal)发明的机械计算器,可做加减法。由一系列啮合齿轮组成,进位通过齿轮联动自动完成。是第一台真正意义上可工作的机械计算器。 |
| 莱布尼茨之轮 (Leibniz's Wheel) | 1673 年由莱布尼茨改进的机械计算器,在 Pascal 的基础上增加了乘法和除法功能。核心创新是步进式圆柱齿轮(Leibniz Wheel),是现代手摇计算机的前身。 |
| 雅卡尔提花织机 (Jacquard Loom) | 1801 年由约瑟夫·雅卡尔发明的织布机。首次使用穿孔卡片控制织布图案——卡片上有孔表示抬起经线,无孔表示不抬起。这种"穿孔卡片 → 控制机器行为"的思想直接启发了后来的计算机编程概念。 |
| 查尔斯·巴比奇分析引擎 | 1837 年由巴比奇设计的通用机械计算机(未完成建造)。具有现代计算机的核心概念:存储单元(store)、运算单元(mill)、穿孔卡片输入(汲取雅卡尔织机思想)以及条件分支能力。艾达·洛夫莱斯为其编写了历史上第一个算法,被视为第一位程序员。 |
| ABC 计算机 | 1937-1942 年由阿塔纳索夫和贝里(Atanasoff & Berry)在爱荷华州立大学建造。世界上第一台电子数字计算机,使用约 300 个真空管,采用二进制运算而非十进制。可求解线性方程组。但不可编程,非通用计算机。 |
图灵模型详解
核心思想
艾伦·图灵在 1936 年的论文《论可计算数》中提出了一个假想的机器——图灵机,它不需要任何物理实现,只是一个数学上的抽象模型。
图灵机的组成
| 组件 | 说明 |
|---|---|
| 纸带 | 一条无限长的带子,划分为等大小的单元格,每个单元格可写一个符号(如 0 或 1)。纸带既是输入设备也是输出设备,还是存储器。 |
| 读写头 | 可以在纸带上左右移动,读取当前位置的符号,擦除并写入新符号。 |
| 状态寄存器 | 记录图灵机当前所处的状态(有限个状态之一)。 |
| 状态转移表 | 即"程序"。定义了:在当前状态 + 当前读到的符号 → 写什么新符号 + 往哪移动 + 进入什么新状态。 |
关键结论
- 可计算性:图灵机可以计算任何"可计算"的问题(丘奇-图灵论题)。
- 停机问题:存在图灵机无法判断的问题——给定任意程序和输入,无法事先判断该程序是否会停止运行。这证明了计算机存在固有的能力边界。
- 通用图灵机:存在一种图灵机,可以模拟任何其他图灵机的行为。这就是现代"通用计算机"概念的理论基础——同一台计算机可以运行不同的程序(软件)。
冯·诺依曼模型详解
背景
1944-1945 年,冯·诺依曼参与 ENIAC 项目后,提出了 EDVAC 报告草案,系统描述了存储程序(Stored Program)概念。这份报告成为此后 70+ 年计算机体系结构的基础。
五个子系统
┌─────────────────────────────────────────────────────┐
│ 控制单元 (CU) │
│ ┌─────────────┐ │
│ 输入设备 ───▶ │ 算术逻辑 │ ───▶ 输出设备 │
│ (键盘/鼠标) │ 单元 (ALU) │ (显示/打印) │
│ └─────────────┘ │
│ ▲ │
│ │ │
│ ▼ │
│ ┌──────────────────┐ │
│ │ 存储器 (Memory) │ │
│ │ 程序 + 数据共存 │ │
│ └──────────────────┘ │
└─────────────────────────────────────────────────────┘| 子系统 | 功能 | 类比 |
|---|---|---|
| 存储器 | 存储程序指令和数据。按地址访问,每个地址可读可写 | 书架:每个格子有编号,可放书或取书 |
| ALU | 执行算术运算和逻辑运算 | 计算器:只管算,不管存储 |
| 控制单元 | 取指令→解码→执行,协调各组件工作 | 指挥中心:决定什么时候做什么 |
| 输入单元 | 将外部数据转换为二进制 | 快递员:把外界东西送进来 |
| 输出单元 | 将二进制结果转换为人可读的形式 | 播音员:把内部结果传达出去 |
冯·诺依曼模型的三大核心原则
- 存储程序:程序以二进制形式存储在内存中,和数据没有本质区别。这意味着程序可以被另一个程序当成数据处理(编译、反编译、病毒检测)。
- 顺序执行:控制单元按指令在存储器中的顺序逐条执行,除非遇到跳转指令。
- 单存储器:程序和数据共享同一块存储器。这也带来了著名的"冯·诺依曼瓶颈"——CPU 和内存之间的数据通道成为性能瓶颈。
计算机发展历史
机械计算器时期(17 世纪之前)
| 时期 | 发明/事件 | 意义 |
|---|---|---|
| 约公元前 2400 年 | 巴比伦算盘 | 最早的计算辅助工具 |
| 1642 年 | Pascaline 计算器 | 第一台可工作的机械加减法计算器 |
| 1673 年 | 莱布尼茨之轮 | 扩展了乘除法功能 |
| 1801 年 | 雅卡尔提花织机 | 穿孔卡片控制——"编程"概念的萌芽 |
| 1823-1837 年 | 巴比奇差分机/分析引擎 | 通用机械计算机的设计,包含存储和运算单元 |
| 1890 年 | 霍尔瑞斯制表机 | 用穿孔卡片统计美国人口普查数据,IBM 公司前身 |
电子计算机五个世代
| 世代 | 时间 | 核心技术 | 特点 | 代表机型 |
|---|---|---|---|---|
| 第一代 | 1940s-1950s | 真空管 | 体积巨大(占满整个房间)、耗电惊人、发热严重、需专业人员维护。机器语言编程。 | ENIAC、EDVAC、UNIVAC I |
| 第二代 | 1950s-1960s | 晶体管 | 体积缩小、功耗降低、可靠性提升。出现汇编语言和最早的高级语言(FORTRAN、COBOL)。 | IBM 7094、PDP-1 |
| 第三代 | 1960s-1970s | 集成电路(IC) | 多个晶体管集成在一块芯片上。出现操作系统,支持多道程序运行。 | IBM System/360、PDP-8 |
| 第四代 | 1970s-1990s | 大规模/超大规模集成电路 | 微处理器诞生(Intel 4004,1971)。个人计算机普及(Apple II、IBM PC)。图形用户界面(GUI)出现。 | Intel 8086、Apple Macintosh、IBM PC |
| 第五代 | 1990s 至今 | 极大规模集成电路 + 多核 + AI | 多核处理器、移动芯片(ARM)、GPU 并行计算、神经网络芯片。云计算、物联网、人工智能普及。 | Intel Core、Apple M 系列、NVIDIA GPU、Google TPU |
练习题答案
1. 定义一个基于图灵模型的计算机。
图灵模型计算机是一个抽象数学机器,由无限长的纸带(存储符号)、读写头(读写和移动)、状态寄存器(记录当前状态)和状态转移表(程序)组成。它通过不断读取当前符号→查表→写入新符号→移动→改变状态的过程来执行计算。只要一个问题可计算,图灵机就能求解。
2. 定义一个基于冯·诺依曼模型的计算机。
冯·诺依曼模型计算机由五个子系统组成:存储器存放程序和数据(二进制形式),控制单元逐条取指和执行,ALU 负责运算,输入单元接收外部数据,输出单元展示结果。程序和数据平等地存储在存储器中。
3. 图灵模型与冯·诺依曼模型中,程序的作用分别是什么?
- 图灵模型:程序是状态转移表,定义了机器在所有可能情况下的行为规则。
- 冯·诺依曼模型:程序是一组按序存储的二进制指令,控制单元逐条读取并执行。程序可以被修改、替换,甚至可以由另一个程序生成。
4.(题目缺省)
5. 计算机中有哪些子系统?
五个子系统:存储器、算术逻辑单元(ALU)、控制单元(CU)、输入单元、输出单元。
6. 存储器子系统的功能是什么?
存储程序指令和数据。按地址访问(每个存储位置有唯一地址),支持快速读写。现代计算机采用层次化存储结构:寄存器 → 高速缓存(Cache)→ 内存(RAM)→ 外存(硬盘/SSD),越靠近 CPU 速度越快但容量越小。
7. ALU 子系统的功能是什么?
执行算术运算(加减乘除)和逻辑运算(与、或、非、异或、移位)。ALU 从寄存器读取操作数,完成运算后将结果存回寄存器,并设置状态标志(如是否为零、是否溢出、是否为负)。
8. 控制单元子系统的功能是什么?
控制单元执行"取指-解码-执行"循环(Fetch-Decode-Execute Cycle):
- 取指:从存储器中取出下一条指令
- 解码:分析指令的操作码和操作数
- 执行:向 ALU 或 I/O 设备发出控制信号,完成对应操作
同时控制指令执行顺序,处理跳转和分支。
9. 输入/输出子系统的功能是什么?
输入子系统:将外部世界的物理信号(键盘敲击、鼠标移动、触摸、声音、温度)转换为计算机可处理的二进制数据。 输出子系统:将计算机内部的二进制处理结果转换回人类可感知的形式(屏幕显示、打印纸张、音频播放、机械动作)。
10. 简述 5 个时代的计算机。
| 世代 | 关键词 |
|---|---|
| 第一代(1940s-1950s) | 真空管、房间大小、机器语言 |
| 第二代(1950s-1960s) | 晶体管、汇编语言、FORTRAN/COBOL |
| 第三代(1960s-1970s) | 集成电路、操作系统、多道程序 |
| 第四代(1970s-1990s) | 微处理器、PC 普及、GUI 界面 |
| 第五代(1990s 至今) | 多核、人工智能、云/移动计算 |
11. 解释为什么计算机不能解决那些计算机外部世界无解决方法的问题。
计算机只能执行人类编写的程序(算法)。如果一个问题在现实世界中没有已知的解决方案、没有可描述的处理步骤、或者逻辑上不可判定,那么计算机无法解决它。计算机不会创造新知识,只能按照预设的规则处理信息。垃圾进,垃圾出(GIGO)。
12. 如果一台小的便宜的计算机可以做大型昂贵的计算机同样能做的事,为什么人们需要大型计算机?
小型计算机和大型计算机都遵循冯·诺依曼模型,功能上等价(都是通用计算机)。但大型计算机在以下方面远超小型机:
- 处理速度:更多核心、更高主频、专用加速芯片
- 存储容量:更大内存和硬盘,可处理海量数据
- 并行能力:同时服务成千上万用户(如银行交易系统)
- 可靠性:冗余电源、热插拔硬盘、错误校验内存
- 科学计算:天气预报、蛋白质折叠、核爆模拟等需要超算
类比:小汽车和卡车都能"运输",但运一栋楼的建材需要卡车而非小轿车。
