Skip to content

1.1 冯·诺依曼架构 ​

这节要搞懂:程序在芯片里到底是怎么"跑"起来的。 需要基础:无

一、什么是冯·诺依曼架构 ​

冯·诺依曼架构是现代计算机的基本设计模型。计算机基于这一架构,依靠运算器、控制器、存储器、输入设备、输出设备五大功能部件紧密协作,自动完成程序的存储、读取与执行,并实现复杂的数据运算与信息交互。

它由数学家冯·诺依曼在 1945 年提出的,至今所有的电脑、手机、单片机都还在用这个模型。

它最核心的思想是一句话:

程序和数据都以二进制形式存放在存储器里,CPU 按地址把它们一条条取出来执行。

二、打个比方:厨房 ​

把一颗芯片想象成一间厨房:

厨房里的对应芯片里的干什么的
菜谱本存储器一步步的操作内容都写在上面
厨师CPU(运算器 + 控制器)照着菜谱做,一次只能看一步、做一步
锅碗瓢盆输入输出设备(外设)真正干活的家伙

厨师本身不会炒菜,他只是照着菜谱指挥锅铲。芯片也一样:CPU 只会算数和搬数据,真正发光、发声、通信的都是外设。

三、五大部件在芯片里长什么样 ​

部件在 ESP32 上是什么
运算器CPU 里负责加减乘除的部分
控制器CPU 里负责"下一条执行哪句"的部分
存储器Flash(存程序,断电不丢)+ RAM(存数据,断电就没)
输入设备按键、传感器、麦克风
输出设备LED、屏幕、喇叭

tip: 运算器 + 控制器 = CPU,平时我们不会分开说这两个,统称 CPU(中央处理器)就行。

四、CPU 一直在重复的三件事 ​

     ┌──────────┐
     │ ① 取指令 │   控制器从存储器里读出下一条指令
     └────┬─────┘
          ↓
     ┌──────────┐
     │ ② 翻译   │   看看这条指令要干嘛(控制器中的指令译码器完成)
     └────┬─────┘
          ↓
     ┌──────────┐
     │ ③ 执行   │   运算器算数,或者控制器去指挥外设干活
     └────┬─────┘
          ↓
       回到 ①,读下一条

从上电到断电,CPU 就一直在转这个圈,每秒几百万次到几十亿次不等。

五、一个关键结论 ​

一颗单核 CPU,在任何一个瞬间,都只在执行一条指令。

那为什么手机能一边放歌一边刷网页?

因为它切换得非常快 —— 放一小段歌,切去刷一下网页,再切回来。快到你察觉不出来,感觉上就像"同时"在做。

FreeRTOS 干的就是这件事:帮你安排什么时候切、切到哪去。

六、"切换"到底切了什么 ​

CPU 干活时,手边有几个"临时记事本"(专业名词叫寄存器),记着两类东西:

  • 菜谱读到第几行了(运行到哪里了)
  • 刚才算出来的中间结果

切换到另一件事时,就把这些记事本的内容抄下来存好;切回来时再照抄回去,就能接着上次的地方继续。

那"存好"存到哪呢?—— 存在一块叫 栈(Stack) 的内存里。每个任务都有自己独立的一块栈。栈是每个任务的私人小本子,本子太小会出大问题。

本节要点 ​

  • 冯·诺依曼架构 = 运算器、控制器、存储器、输入、输出五大部件协作
  • 程序 = 存在存储器里的一串指令,CPU 一条条取出来执行
  • 单核 CPU 同一时刻只能做一件事,"同时"是快速切换出来的假象
  • 切换 = 把寄存器里的临时数据存进"栈",回来时再取出来

动手试试 ​

不用写代码,用自己的话回答:

  1. 说出冯·诺依曼架构的五大部件,并各举一个 ESP32 上的例子。
  2. 为什么说单核芯片"同时"做几件事其实是假的?
  3. 如果切换时忘了把寄存器数据存起来,会发生什么?