外观
1.1 冯·诺依曼架构
这节要搞懂:程序在芯片里到底是怎么"跑"起来的。 需要基础:无
一、什么是冯·诺依曼架构
冯·诺依曼架构是现代计算机的基本设计模型。计算机基于这一架构,依靠运算器、控制器、存储器、输入设备、输出设备五大功能部件紧密协作,自动完成程序的存储、读取与执行,并实现复杂的数据运算与信息交互。
它由数学家冯·诺依曼在 1945 年提出的,至今所有的电脑、手机、单片机都还在用这个模型。
它最核心的思想是一句话:
程序和数据都以二进制形式存放在存储器里,CPU 按地址把它们一条条取出来执行。
二、打个比方:厨房
把一颗芯片想象成一间厨房:
| 厨房里的 | 对应芯片里的 | 干什么的 |
|---|---|---|
| 菜谱本 | 存储器 | 一步步的操作内容都写在上面 |
| 厨师 | CPU(运算器 + 控制器) | 照着菜谱做,一次只能看一步、做一步 |
| 锅碗瓢盆 | 输入输出设备(外设) | 真正干活的家伙 |
厨师本身不会炒菜,他只是照着菜谱指挥锅铲。芯片也一样:CPU 只会算数和搬数据,真正发光、发声、通信的都是外设。
三、五大部件在芯片里长什么样
| 部件 | 在 ESP32 上是什么 |
|---|---|
| 运算器 | CPU 里负责加减乘除的部分 |
| 控制器 | CPU 里负责"下一条执行哪句"的部分 |
| 存储器 | Flash(存程序,断电不丢)+ RAM(存数据,断电就没) |
| 输入设备 | 按键、传感器、麦克风 |
| 输出设备 | LED、屏幕、喇叭 |
tip: 运算器 + 控制器 = CPU,平时我们不会分开说这两个,统称 CPU(中央处理器)就行。
四、CPU 一直在重复的三件事
┌──────────┐
│ ① 取指令 │ 控制器从存储器里读出下一条指令
└────┬─────┘
↓
┌──────────┐
│ ② 翻译 │ 看看这条指令要干嘛(控制器中的指令译码器完成)
└────┬─────┘
↓
┌──────────┐
│ ③ 执行 │ 运算器算数,或者控制器去指挥外设干活
└────┬─────┘
↓
回到 ①,读下一条从上电到断电,CPU 就一直在转这个圈,每秒几百万次到几十亿次不等。
五、一个关键结论
一颗单核 CPU,在任何一个瞬间,都只在执行一条指令。
那为什么手机能一边放歌一边刷网页?
因为它切换得非常快 —— 放一小段歌,切去刷一下网页,再切回来。快到你察觉不出来,感觉上就像"同时"在做。
FreeRTOS 干的就是这件事:帮你安排什么时候切、切到哪去。
六、"切换"到底切了什么
CPU 干活时,手边有几个"临时记事本"(专业名词叫寄存器),记着两类东西:
- 菜谱读到第几行了(运行到哪里了)
- 刚才算出来的中间结果
切换到另一件事时,就把这些记事本的内容抄下来存好;切回来时再照抄回去,就能接着上次的地方继续。
那"存好"存到哪呢?—— 存在一块叫 栈(Stack) 的内存里。每个任务都有自己独立的一块栈。栈是每个任务的私人小本子,本子太小会出大问题。
本节要点
- 冯·诺依曼架构 = 运算器、控制器、存储器、输入、输出五大部件协作
- 程序 = 存在存储器里的一串指令,CPU 一条条取出来执行
- 单核 CPU 同一时刻只能做一件事,"同时"是快速切换出来的假象
- 切换 = 把寄存器里的临时数据存进"栈",回来时再取出来
动手试试
不用写代码,用自己的话回答:
- 说出冯·诺依曼架构的五大部件,并各举一个 ESP32 上的例子。
- 为什么说单核芯片"同时"做几件事其实是假的?
- 如果切换时忘了把寄存器数据存起来,会发生什么?