摘要很多初学者一提到计算机满脑子都是机箱、显示器、键盘鼠标。但如果你立志成为一名嵌入式软件工程师就必须穿透表象看本质。本文从信息表示、程序分类、计算机组成、存储体系四大维度带你建立完整的计算机硬件认知模型。文章最后会揭示冯·诺依曼体系留给程序员的两大“灵魂遗产”。正文1. 重新定义“计算机”别被显示器骗了绝大多数人对电脑的认知是显示器键盘鼠标。但这是一个严重的认知误区。在嵌入式工程师眼里计算机的核心从来不是那些输入输出设备而是那个不起眼的主机或主控芯片。通用计算机PC、服务器追求算力与通用性。专用计算机嵌入式设备如单片机、树莓派、手机SoC。它们虽然长得千奇百怪但底层的逻辑完全一致。2. 信息表示万事万物终归于0和1现实世界是连续的模拟信号而IT世界是离散的数字信号。抽象过程我们并不关心事物的所有属性只抽取我们关心的属性并用数字来表示。二进制的必然性在众多数制10进制、12进制、60进制中二进制因为其物理实现最简单高电平/低电平通/断成为了IT世界的基石。一个深刻的哲理二进制数学的发明人莱布尼茨深受中国《周易》八卦阴与阳的启发。可以说伏羲八卦是二进制思想的“接生婆”。3. 程序的分类与层次结构决定你的职业方向计算机 硬件 软件。而程序是连接二者的桥梁。根据运行环境的不同程序分为两种这直接决定了你是做底层还是做应用裸机程序直接跑在硬件上没有操作系统支持。典型代表单片机程序、BIOS、操作系统内核。应用程序必须运行在特定的操作系统之上比如微信、游戏。两种系统层次结构两层结构硬件 裸机程序这是嵌入式底层开发者的战场。要求你必须懂硬件原理图、懂汇编、精通C语言。四层结构硬件 - 内核 - 功能库 - 应用这是Linux/Windows开发者的世界。越往上走离硬件越远越偏向业务逻辑。给新手的建议无论你想去哪个层C语言、系统编程、网络编程、数据结构都是无法绕开的“内功”。C语言是所有高级语言的基础它拥有“上帝视角”可以直接操作内存。4. 计算机的组成CPU与内存的“双核”真相书上总说计算机由五大部件组成但我们需要记住两个核心部件CPU和内存。我们可以用人体的器官来做一次降维打击式理解CPU大脑负责运算和控制。内存海马体负责临时记忆。掉电即消失但速度极快。硬盘大脑皮层负责永久记忆。速度慢但容量大。主板骨架负责连接各部件。嵌入式工程师的硬核认知计算机最核心的部件不是一个CPU而是CPU和内存这两个。因为程序存储思想决定了CPU执行的指令必须先存在于内存中。5. 一个经典的“炒菜”模型彻底搞懂指令执行笔记中“奴隶炒菜”的比喻非常精妙我们可以将其映射为计算机的经典工作流程奴隶 CPU。抽屉 内存单元每个都有唯一编号即地址。纸条上的指令 机器指令。取纸条 取指。看纸条 译码。拿菜/放菜 取数据/存数据。CPU访问一次抽屉内存能拿多少个字节这取决于CPU的字长单位是位。比如32位CPU一次能访问4个字节32bit64位CPU一次能访问8个字节。这就是为什么64位系统比32位系统处理大数据更快。6. 计算机的存储体系钱花在哪性能就在哪理解计算机的关键在于理解存储层次。从CPU内核到遥远的硬盘速度与成本呈反比寄存器 (Registers)位于CPU内部速度与CPU同频成本极高容量极小KB级。高速缓存 (Cache)介于CPU和内存之间用于缓解速度不匹配的问题SRAMKB-MB级。内存 (RAM)主力战场掉电易失DRAMGB级。外存 (硬盘/Flash)永久存储容量巨大TB级但速度比内存慢几个数量级。嵌入式工程师感悟在写驱动或优化代码时如果能充分利用Cache数据局部性原理性能可能提升数倍如果频繁触发缺页中断或访问Flash系统可能卡顿。7. 冯·诺依曼的两大灵魂遗产冯·诺依曼被称为“现代计算机之父”他留下了两条铁律至今仍在指引我们编程贡献一二进制思想IT世界的一切信息归根结底都是二进制位 上下文。内存里存的1100 1101如果上下文告诉CPU这是uint8_t那就是数字205如果上下文告诉这是char那可能是一个字符。这就是为什么C语言要有数据类型——数据类型就是告诉编译器如何解释这串二进制位。贡献二程序存储思想这是现代计算机的“灵魂”程序执行前预先存放在内存里CPU要执行的指令不是从硬盘直接读而是从内存中取指。只要修改内存里的指令序列计算机就能干不同的事情这正是计算机“万能”的本质。写在最后给嵌入式新人的一点建议学习计算机原理不要死记硬背。抓住“CPU 内存 总线”这条主线理解数据流和指令流是如何流转的。当你将来在C语言中写出int *p (int *)0x40000000;时你心里应该清楚我正在告诉CPU去物理内存地址0x40000000处取出4个字节32位上下文当作一个有符号整数来处理。这就是计算机工作原理在代码层面的终极体现。原创不易如果这篇文章帮你建立了对计算机的初步认知欢迎点赞、收藏、转发让更多初学者看到