机器飞升 - 计算机的终极秘密

0 阅读7分钟

前言
数据一个接一个,系统就像一个优雅的乐队指挥,精准地命令 CPU,内存条等释放出对应的乐符,他把一个又一个复杂的数据结构拆分成有序的二进制码,在所有机械部件的配合下演奏这一场盛世的乐章,完成美妙的“机械飞升”。

序章:从齿轮到硅基生命

“上古时期”,计算机(Computer)这个词指的并不是电子设备,而是真正的人(计算员)。后来,它变成了由无数齿轮和杠杆拼凑起来的大型机械(如帕斯卡加法器、巴贝奇差分机)。

随着人类需要处理的数据呈指数级爆炸,单纯的机械结构无法满足需求。于是,真空管、晶体管、集成电路相继诞生。人类将沙子(硅)提炼,刻上纳米级的电路,最终创造出了现在的硅基大脑

一、 CPU:中央处理器的七窍

CPU 是计算机的大脑。

CPU 并不是一个整体,而是一个精密的流水线工厂:

  • 算术逻辑单元 (ALU) :****负责所有的数学运算(加减乘除)和逻辑运算(与或非)。所有的软件逻辑,最终都会变成这里的电平跳动。
  • 控制单元 (CU) :它负责解码指令,告诉 ALU 该干什么,告诉内存该读哪里的数据。
  • 寄存器 (Registers) :这是计算机里速度最快的地方,数据就在 ALU 嘴边,随取随用。
  • 高速缓存 (Cache) :比内存快得多,专门存放最近常用的数据。
    • Java 中的 volatile 关键字和数组的高性能遍历,本质上都是在和 Cache 打交道。
  • 时钟 (Clock) :主频越高,铃声越快,工人动作越快。
  • 内存管理单元 (MMU) :负责虚拟地址到物理地址的映射(这是操作系统能运行的基础)。

CPU 是执行指令的头脑,而操作系统就是执行命令时的指挥官,CPU 需要执行 用户命令 也需要处理 内核命令,拥有最高指挥权的操作系统使用的就是内核命令,CPU 为了安全分为了两个状态:用户态和内核态

用户态时 CPU 属于用户进程,会去处理一个又一个用户指令

内核态属于操作系统,操作系统会要求 CPU 根据请求执行相应的内核指令

为了能够及时处理每个命令,操作系统使用了中断来控制 CPU ,只要是需要操作系统,需要内核态的地方操作系统就会触发中断,由自己来独揽大权,这也是为了防止“宦官当政”

当然,CPU 只有一个,所以 CPU 的底层是采取并发的办法,并发就导致了在微观上 CPU 需要进行中断,然后串行地处理每一个进程。

进程是 CPU 分配内存的最小单位,线程是 CPU 执行的最小单位。

为了所有进程能够公平地使用 CPU,于是产生了许许多多的调度算法:

  • 先来先服务
  • 短作业优先
  • 最短剩余时间优先
  • 高响应比优先
  • 时间片轮转
  • 优先级调度
  • 多级反馈队列

当下的操作系统不会采取单一的调度算法,他既要保证 CPU 的性能又要保证进程不会因为长期不使用 CPU “饿死”

可以说,同一个 CPU 的情况下,进程是互斥地使用这个 CPU,既然说到了互斥,那就不得不引出同步了

互斥和同步为 PV 操作引发的执行程序,从这里能引申出锁,信号量,以及各种同步互斥问题

当然进程之间偶尔也需要相互交流的,这又说到了进程同步~

二、 内存:意识的光团

内存(RAM)是为了暂时保留数据,以供 CPU 计算。

如果 CPU 是思考的意识,内存条就是承载意识的光团
但是,CPU 的速度太快了(纳秒级),而内存的速度相对较慢(百纳秒级)。

为了解决这个“速度不匹配”:

  • CPU 引入了 L1/L2/L3 缓存
  • CPU 会把可能用得到的数据(预读)以及刚算完的数据,暂存在缓存中。

所谓的“性能优化”,很多时候就是在减少 CPU 等待内存的时间(Cache Miss)。

内存在操作系统看来是最复杂的地方:

  • 内存中需要区分指令等级隔离分为了内核空间和用户空间
  • 内存是 CPU 与其他外设交流的必经之地
  • 内存是进程之间进行交流
  • 进程与持久化存储设备之间的必经之地

于是内存被分成了一页一页的,使用一张或两张表管理,再由 MMU 将逻辑地址转为物理地址,这样子解决了 进程使用需要使用空间的问题,这就是分页式管理,当然现在的内存可能采用更牛逼的请求式段页式管理,如果一个进程需要使用的空间远大于操作系统分配给他们的内存空间时就需要硬盘和内存来联合欺骗进程了,如果进程请求的页面不存在与内存中,CPU 会触发缺页中断,然后告诉 DMA 把这一页从硬盘里拿出来,然后再由 CPU 把数据从内核空间搬到用户空间,最后告诉进程:“你看,你要的东西明明在这”。活脱脱一个楚门的世界。

为了解放 CPU (本来硬盘和内存之间的数据拷贝是由 CPU 做的)引入了 DMA,这下 CPU 只需要发出命令, DMA 就会自己把数据搬运到 CPU 指定的内核空间,然后再由 CPU 搬到 进程的用户空间。

这时有人认为 CPU 还是搬了(我们必须让 CPU 执行自己的数据处理工作,搬运东西这种繁琐的操作当然不能让老板做),于是产生了 零拷贝技术和内存映像文件技术

  • 零拷贝:当用户进程不需要对数据进行更改,只需要把数据发往其他外设时, CPU 甚至不需要进行拷贝,只需要交给 DMA ,DMA 会自己把数据搬运到对应的外设。
  • 内存映像文件:当用户进程需要修改在硬盘中的某个数据时,只需要开放一部分内核空间给用户进程使用,CPU 就可以不用进行浪费性能的数据拷贝了

三、 持久化存储:数据的归宿

当电源切断,内存这个“光团”会消散。为了让数据永生,持久化存储诞生了。

1. 硬盘 (HDD) - 机械的绝唱

老前辈 HDD 像是一个精密的唱片机。磁头在高速旋转的磁盘上疯狂地左右横跳(寻道)。

  • 优点:便宜、容量大、寿命久。
  • 缺点:随机读写极慢(因为有机械动作)。
  • 优化:程序员发明了 B+ 树、顺序写日志(WAL)来配合它的物理特性。

2. 固态硬盘 (SSD) - 电子的新秀

新秀 SSD 没有机械结构,通过电子直接在存储表中寻址。

  • 优点:速度极快,特别是随机读取。
  • 缺点:存在写放大、寿命限制(P/E 擦除次数)。
  • 原理:SSD 不能直接覆盖旧数据,必须先“擦除(Block)”再“写入(Page)”。这也是为什么 LSM 树这种“只追加不修改”的数据结构在 SSD 时代依然适用的原因。

四、 外部设备:躯壳与感官

CPU 和内存构成了大脑,而外设组成了计算机的躯壳。

  • 输入设备(键盘、鼠标、麦克风):感知世界的五官。
  • 输出设备(显示器、打印机):表达思想的嘴巴。
  • GPU(显卡) :这不仅仅是外设,它是一个专门用来处理图像(矩阵运算)的特种大脑,如今更是 AI 飞升的基石。

总结:机械飞升

计算机的本质,就是一场从模拟数字的进化。

  • CPU 使用 0 和 1 进行逻辑推演;
  • 内存 使用 0 和 1 暂存瞬间的思维;
  • 硬盘 使用磁极或电荷锁住 0 和 1 的记忆;
  • 外设 将 0 和 1 转化为人类可理解的图像与声音。

当我们写下一行 Java 代码时,我们实际上是在指挥这台由数十亿个晶体管组成的精密机器,完成一次微观世界的机器飞升