从零搞懂计算机工作原理:冯·诺依曼体系与 CPU 执行全流程
计算机工作原理详解
当我们敲击键盘、运行程序时,底层究竟发生了什么?本文从计算机发展史、冯·诺依曼体系出发,逐步拆解 CPU 的执行流程、编程语言的演进,以及操作系统如何管理进程与内存。理解这些底层原理,是迈入 Java EE 高阶开发前不可或缺的技术铺垫。
目录
- 一、计算机发展史
- 二、冯·诺依曼体系结构
- 三、CPU 基本工作流程(逻辑门 / ALU / 寄存器 / 控制单元 / 指令)
- 四、编程语言
- 五、操作系统(进程 / 调度 / 内存管理 / 进程间通信)
一、计算机发展史
人类对计算的需求贯穿历史,推动着计算工具不断演进,大致经历了从一般计算工具到机械计算机,再到如今电子计算机的历程。目前我们处于“电子计算机”时代,其发展潮流是更快、更稳、更微型。
示例:早期的算盘是简单的计算工具,只能进行基本的加减乘除;而如帕斯卡计算器之类的机械计算机,通过齿轮的转动来实现计算,相比算盘在效率上有了一定提升。
推荐书籍:《计算机简史》
二、冯·诺依曼体系结构(Von Neumann Architecture)
现代计算机大多遵循冯·诺依曼体系结构,该体系包含输入设备、存储器、输出设备、运算器和控制器,其中运算器和控制器共同组成 CPU。各部分之间通过数据流、指令流和控制流相互联系。
- CPU(中央处理器):负责算术运算与逻辑判断。
- 存储器:分为外存与内存,以二进制方式存储数据。
- 输入设备:用户向计算机下达指令的设备,如键盘、鼠标。
- 输出设备:计算机向用户反馈结果的设备,如显示器、打印机。
针对存储空间大小,存在如下关系:
硬盘 > 内存 >> CPU 寄存器
针对数据访问速度,存在如下关系:
CPU 寄存器 > 内存 > 硬盘
示例:当我们用键盘(输入设备)输入文字时,文字先被暂存到内存(存储器)中,CPU 对其进行处理后,再通过显示器(输出设备)呈现出来。
三、CPU 基本工作流程
(一)逻辑门与门电路
-
电子开关——机械继电器:类似于水龙头,线圈通电后产生磁场吸引机械臂闭合电路,断电则断开。借助电子开关即可实现 1 位(bit)的逻辑运算。
-
门电路(Gate Circuit):由电子开关构建而成,能实现 1 位(bit)的基本逻辑运算,包括非门、与门、或门、异或门等。
-
非门:输入与输出相反,真值表如下:
输入 输出 TRUE FALSE FALSE TRUE -
与门:只有全部输入均为 TRUE 时,输出才为 TRUE,真值表如下:
输入 1 输入 2 输出 TRUE TRUE TRUE TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
-
(二)算术逻辑单元 ALU(Arithmetic & Logic Unit)
ALU 是执行算术与逻辑运算的核心部件,堪称计算机的“数学大脑”。
-
算术单元:负责数字运算,如四则运算。以 8 位加法器为例,它由半加器和全加器组合而成。
-
半加器:对两个 1 位(bit)数进行相加,真值表如下:
A B 进位 和 0 0 0 0 0 1 0 1 1 0 0 1 1 1 1 0 -
全加器:对三个 1 位(bit)数进行相加(两个加数 + 低位进位)。
-
-
逻辑单元:负责逻辑运算,如与、或、非操作,此外还有 8 位非零判断器等。
示例:当进行 1+1 的运算时,ALU 中的半加器会计算出和为 0、进位为 1,全加器再结合可能的进位,完成更复杂的加法运算。
(三)寄存器(Register)与内存(RAM)
-
寄存器:由锁存器(门锁)构建,8 位寄存器拥有 8 条数据线,可存储 8 位数据。
-
内存:构建原理与寄存器类似但更为复杂,称为 RAM(Random Access Memory,随机存取存储器)。它支持以 O(1) 的时间复杂度访问任意位置的数据,这正是数组按下标随机访问能达到 O(1) 的硬件基础。
示例:寄存器就像工作时手边的临时记事本,能够快速存取少量常用数据;而内存则像一个较大的文件柜,存储着正在运行的程序及其相关数据。
(四)控制单元 CU(Control Unit)
控制单元负责指挥 ALU 执行何种运算,它与 ALU 协同工作,驱动 ALU 完成具体的计算任务。
(五)指令(Instruction)
指令是指导 CPU 工作的命令,由操作码和操作数组成。操作码表示要执行的动作,操作数则是操作所针对的数据(可能是内存地址、寄存器编号等)。指令以二进制形式保存在内存中。
指令表示例:
| 指令 | 功能说明 | 4 位 opcode | 操作的地址或者寄存器 |
|---|---|---|---|
| LOAD_A | 从 RAM 的指定地址,将数据加载到 A 寄存器 | 0010 | 4 位 RAM 地址 |
| LOAD_B | 从 RAM 的指定地址,将数据加载到 B 寄存器 | 0001 | 4 位 RAM 地址 |
(六)CPU 的基本工作流程
CPU 的指令周期包括取指阶段、译码阶段和执行阶段。
- 取指阶段:CU 根据 PC(程序计数器)的值将指令数据读入 IR(指令寄存器)中。
- 译码阶段:CU 分析 IR 中的指令,确定要执行的操作及其操作对象。
- 执行阶段:CU 执行相应的操作。
示例:对于指令 00101110(LOAD_A 指令,RAM 地址为 1110,即十进制 14),首先在取指阶段将该指令从内存地址 0 读入 IR;译码阶段分析出“将 RAM 地址 14 的数据加载到 A 寄存器”;执行阶段完成数据的加载,同时 PC 寄存器的值加 1,准备执行下一条指令。
四、编程语言(Programming Language)
(一)程序(Program)
程序是一组指令以及这些指令所要处理的数据,狭义上表现为一组文件。
(二)编程语言的发展
- 机器语言:用 0 和 1 编写,可直接被 CPU 执行。
- 汇编语言:与机器语言一一对应,用符号代替 0 和 1,需经汇编器翻译成机器语言。
- 高级语言:屏蔽底层硬件细节,一条语句往往对应多条指令,需经编译器与连接器翻译成机器语言。
示例:计算 1+2,机器语言可能是一串 0 和 1 的组合;汇编语言可能是 ADD 1,2;而 Java(高级语言)则是 int sum = 1 + 2;。
五、操作系统(Operating System)
exe 可执行文件(一个可执行文件可能会创建出多个进程)
dll,即 exe 执行时所用到的动态链接库
操作系统是管理计算机软硬件资源的系统软件统称,常见的有 Windows、Unix、Linux 等。
(一)操作系统的定位
操作系统具备两个基本功能:
- 防止硬件被失控的应用程序滥用。
- 向应用程序提供简单一致的机制,用以控制复杂的底层硬件设备。
(二)进程 / 任务(Process / Task)
进程是操作系统对正在运行的程序的抽象,是程序的一次执行过程,也是操作系统进行资源分配的基本单位。
(三)进程控制块抽象(PCB,Process Control Block)
PCB 是描述进程的一组数据结构,包含进程的标识、程序信息、资源分配、调度信息等。操作系统通过组织 PCB 来管理进程。
pid 由系统自动分配。
Java 伪代码示例:
class PCB {
// 进程的唯一标识 —— pid
// 进程关联的程序信息,例如是哪个程序、加载到内存的哪个区域等
// 分配给该进程使用的各项资源
// 进程调度信息(留待下文讲解)
}
(四)CPU 分配 —— 进程调度(Process Scheduling)
并行
两个 CPU 分别执行各自的指令。
并发
一个 CPU 通过时间片分时复用,制造出“同时”执行的假象。
进程状态
- 就绪:随时可以被调度并占用 CPU 执行。
- 阻塞:该进程暂时无法参与 CPU 的调度与执行。例如等待输入时,若不输入,进程便会一直处于阻塞状态。
进程的优先级
进程之间是有优先级之分的。
进程的上下文
一个进程被调度到 CPU 上执行,离开 CPU 后,过一段时间还会回到 CPU 上,并依照之前的位置继续向下执行。
进程的记账信息
在优先级机制下,可能导致部分进程分到的 CPU 资源很少,因此需要借助记账机制来识别这类进程,并为其分配更多资源。
在单 CPU 单核计算机中,操作系统采用时间片轮转的方式为进程分配 CPU 资源,不同进程在不同时间段交替使用 CPU。
示例:当我们同时打开浏览器和音乐播放器时,操作系统会让 CPU 在这两个进程之间快速切换,使我们感觉它们在“同时”运行。
(五)内存分配 —— 内存管理(Memory Management)
操作系统采用空间隔离的方式为进程分配内存,不同进程使用内存的不同区域、互不干扰(每个进程拥有各自独立的运行空间,以指针为例,进程不能指向并修改其他进程的内存数据)。
(六)进程间通信(Inter-Process Communication)
Java 对进程间通信的支持相对有限(相较于线程通信),但通信机制本身并不少。
进程之间需要进行信息交换,主流的通信机制包括管道、共享内存、文件、网络、信号量、信号等。其中,网络可支持不同主机上进程之间的通信。
示例:我们在浏览器中向好友发送消息,正是通过网络这种进程间通信机制,实现了浏览器进程与好友聊天软件进程之间的信息交换。
小结
本文围绕“计算机如何工作”这一主线展开:从冯·诺依曼体系结构(输入、存储、输出、运算、控制五大部件)出发,揭示了 CPU 经由取指—译码—执行周期、借助逻辑门、ALU、寄存器与控制单元完成运算的底层过程;进而梳理了从机器语言到高级语言的演进,并说明了操作系统如何通过进程调度、内存隔离与进程间通信来统筹管理硬件资源。掌握这些基础原理,有助于我们更深刻地理解上层 Java EE 程序的运行机制。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)