计算机系统层次与冯·诺依曼结构
理解计算机四层结构与五大部件,能解释一条指令如何被 CPU 执行,为后续嵌入式与底层知识建立坐标系
- 来源
标记说明:【来源】来自上传资料 · 【补充】课程新编 · 【纠错】按勘误表修正 · 【更新】过时内容已现代化 · 【待确认】无法可靠还原
完成标准(本章)
- 📖 已阅读:滚动 ≥ 80% 且有效阅读 ≥ 120 秒
- ✏️ 已练习:小练习正确率 ≥ 60%
- 📝 已通过测验:分数 ≥ 60 分
- 🛠️ 已掌握还需完成实践任务
0.1.1 计算机系统层次与冯·诺依曼结构
本章来源:核心内容来自《第一阶段讲义》6.1-6.4 节【来源】,经重新组织表述;通俗解释、练习、测验与任务为新编【补充】。本章无代码示例(纯概念章),平台适用性 universal。
① 学习目标
- 说出计算机系统的四个层次,并举例说明每一层的作用;
- 说出冯·诺依曼结构的五大部件与"存储程序"思想;
- 按顺序说出指令执行五步,并说明 PC(程序计数器)存的是什么;
- 说出哈佛结构与冯·诺依曼结构的一处核心区别,并能举出哈佛结构的典型应用;
- 完成实践任务:画出一张"程序从启动到输出"的完整链路图。
② 前置知识
无(本章是课程起点)。若你已有基础,可直接完成章节测验,通过后跳到 0.1.2。
③ 核心概念【来源】
| 概念 | 定义 |
|---|---|
| 四层结构 | 硬件层 → 固件层 → 操作系统层 → 应用层(自下而上) |
| 冯·诺依曼结构 | 五大部件 + "存储程序"思想:程序以二进制形式与数据同存于存储器 |
| 五大部件 | 运算器、控制器、存储器、输入设备、输出设备(运算器+控制器=CPU) |
| PC(程序计数器) | 保存下一条要执行指令的地址,不是指令本身 |
| 指令执行五步 | 取指 → 译码 → 执行 → 访存 → 写回 |
| 哈佛结构 | 指令与数据分开存储、总线独立、可并行访问(常见于 MCU/DSP) |
| 冯·诺依曼瓶颈 | 指令与数据共用总线,取指与访存互相争用 |
④ 通俗解释【补充】
把计算机想象成一家餐厅:
- 顾客(应用层):只负责点菜,不关心厨房怎么运作——就像你双击 hello.exe,不关心 CPU 怎么执行;
- 店长(操作系统层):把顾客的需求翻译成后厨听得懂的任务,协调所有资源;
- 厨师长(固件层):开张前把灶台、冰柜检查并启动好——就像 U-Boot 初始化硬件再引导系统;
- 后厨与食材(硬件层):真正干活的地方:灶台(CPU)、冰柜(内存)、货架(磁盘)。
点一道"清炒时蔬"(运行 Hello World):
- 店长去货架取菜单(取指:CPU 按 PC 从内存取指令);
- 厨师看菜单知道要干什么(译码);
- 切菜下锅(执行);
- 需要时开冰柜拿食材(访存);
- 装盘放回出菜口(写回:结果写回寄存器或内存)。
冯·诺依曼的餐厅只有一扇门:取菜单和拿食材都得走同一扇门,人多就堵(冯·诺依曼瓶颈);哈佛结构开了两扇门,菜单和食材分开走,效率更高——很多单片机就是这么设计的。
⑤ 示例代码
本章为纯概念章,无代码示例。第一个可运行程序见 0.2.4(Hello World 全流程)。
⑥ 编译与运行方法
本章无代码;0.2.4 将演示 gcc hello.c -o hello 的完整流程。
⑦ 常见错误
| 症状 | 原因 | 解决 |
|---|---|---|
| 认为"程序存在硬盘、执行时 CPU 直接读硬盘" | 忽略了内存中转 | 程序执行前必须先加载进内存,CPU 只与内存/缓存直接交互 |
| 说"PC 里存的是当前指令" | 混淆指令与地址 | PC 存下一条指令的地址;指令本体在存储器里 |
| 认为五大部件包含"总线" | 总线是连接部件,不属于五部件 | 五部件:运算器/控制器/存储器/输入/输出 |
| 认为固件=操作系统 | 层次混淆 | 固件(BIOS/U-Boot)负责硬件初始化与引导,位于操作系统之下 |
| 把"执行"与"访存"合并 | 五步不完整 | 访存只在需要读写内存时发生,是独立一步 |
⑧ 小练习
小练习
学习自测:提交后才显示答案与解析(前端判分,不作为正式考试)ex-0-1-1-1.冯·诺依曼体系结构中,程序指令和数据存放在哪里?(单选)
◌ 未作答ex-0-1-1-2.一条指令在 CPU 中的执行流程按顺序是?(单选)
◌ 未作答ex-0-1-1-3.判断:哈佛结构与冯·诺依曼结构的主要区别是程序和数据是否分开存储。(判断)
◌ 未作答
⑨ 章节测验
章节测验
⑩ 实战任务
实践任务
画出"Hello World 从磁盘到屏幕"的执行链路图
不写代码,画出一张链路图:用户双击 hello.exe(或执行 ./hello)后,程序经过哪些层次与部件, 最终在屏幕上显示 "Hello World"。目的是把四层结构与五大部件串成一条完整链路。
输入与输出
无程序输入输出。交付物为一张链路图(手绘拍照、白板、或文字版分层列表均可), 并配 3-5 句文字说明每个环节由哪个部件/层次完成。
功能要求
- 链路至少包含:输入设备(键盘/鼠标)→ 应用层 → 操作系统 → 固件/硬件(磁盘、内存、CPU)→ 输出设备(显示器)
- 明确标出"取指-译码-执行"发生在哪个部件
- 标出程序与数据经过存储器的环节
- 用文字说明每两个环节之间传递的是什么(地址、指令、数据)
限制条件
- 纯概念任务,无需编程环境
- 图的形式不限,但必须自己画/写,不得直接复制讲义插图
验收步骤(自检清单 0/4)
验收标准
- 链路图包含四层与五大部件中的至少四个(验收步骤 1/2)
- 能说清"取指:CPU 按 PC 从内存读指令"(验收步骤 3)
- 能说清"字符串从磁盘读入内存、再由显卡/显存送往显示器"(验收步骤 4)
常见失败原因
- 把固件层漏掉,直接写'硬件→操作系统'
- 把 PC 说成存指令而不是存地址
- 把显示器当成输出前不经过内存(屏幕内容来自显存/内存缓冲区)
可选扩展
- 补充一条中断路径:按下键盘时信号如何到达应用层
- 用同样方法画出'STM32 上电启动'链路(留到阶段 7 对比)
完成必要清单后才能计入"已完成实践"(学习状态自动推导,不提供一键完成)
⑪ 面试问题
面试问题
简单说说冯·诺依曼结构与哈佛结构的区别?嵌入式 · easy
要点:前者指令与数据共用一套存储器与总线;后者分开存储、独立总线、可并行访问。
冯·诺依曼:程序与数据同存于一个存储器,共用总线,结构简单、灵活(程序可以像数据一样被加载), 但取指与访存会争用总线(冯·诺依曼瓶颈)。哈佛:指令存储器与数据存储器物理分离、总线独立, 可同时取指与取数,速度快,常用于 MCU(如 STM32 的 Flash 存指令、SRAM 存数据)与 DSP。 嵌入式面试可补充:现代 CPU 通过 L1 指令/数据 Cache 分离在冯·诺依曼体系上模拟哈佛优点。
追问:- 追问:STM32 属于哪种结构?(片上 Flash 与 SRAM 分离,属哈佛结构变体)
- 追问:什么是冯·诺依曼瓶颈?
评分要点:- 说出存储是否分离
- 说出总线是否独立与并行访问
- 举出应用场景加分
一条指令在 CPU 里是怎么执行的?嵌入式 · easy
要点:经典五步:取指→译码→执行→访存→写回;PC 记录下一条指令地址。
取指(按 PC 从内存/缓存取指令,PC 自增)→ 译码(控制器解析操作码与操作数)→ 执行(运算器完成计算)→ 访存(需要时读写内存)→ 写回(结果写回寄存器)。可补充现代 CPU 的流水线:五步重叠执行,提高吞吐。
追问:- 追问:PC 里存的是什么?
- 追问:流水线为什么会提高速度?
评分要点:- 五步顺序正确
- 说明 PC 存地址
- 提及流水线加分
为什么程序要分"取指"和"执行"两个阶段?嵌入式 · easy
要点:因为"存储程序"设计:指令先存在于存储器中,CPU 必须先取出才能知道要做什么。
冯·诺依曼体系里指令以二进制存放在存储器,CPU 内部只有少量寄存器,不能一次装下整个程序, 因此必须一条一条取出再执行。这也是 PC 寄存器存在的意义。可以延伸到:这正是现代 CPU 流水线、分支预测、指令缓存优化的起点。
评分要点:- 关联"存储程序"思想
- 说明逐条取出的必要性
⑫ 延伸阅读
- 《计算机组成与设计:硬件/软件接口》(Patterson & Hennessy)第 1 章:计算机概览;
- 《深入理解计算机系统(CSAPP)》第 1 章:计算机系统漫游;
- 维基百科词条:Von Neumann architecture / Harvard architecture(英文,不复制内容,仅作查阅入口);
- 下一章预告:0.1.2 进制与进制转换——二进制为何是计算机的语言。
内容来源映射
| 内容部分 | 资料 | 位置 | 标记 | 说明 |
|---|---|---|---|---|
| 计算机系统层次结构、冯·诺依曼五大部件、指令执行流程、哈佛结构对比 | 第一阶段讲义 | 6.1/6.2/6.3/6.4 节(PAGE 145-150) | 【来源】 | 正文在原资料基础上重新组织表述,未大段复制原文 |
| 通俗解释(后厨流水线类比) | 无 | 【补充】 | 原资料无类比讲解,本节新编 | |
| 小练习 / 章节测验 / 实践任务 / 面试问题 / 延伸阅读 | 无 | 【补充】 | 原资料该章无成体系练习,全部新编 |