1.1 计算机的基本构造
前置知识:会打开系统终端
预计时间:8–12 分钟
完成标志:能说明 CPU、内存和持久存储各自承担什么工作,并用当前平台查看它们
运行程序至少涉及三件事:保存指令、提供运行时空间、执行指令。CPU、内存和持久存储分别承担这些工作;加大 SSD 容量并不能直接解决内存不足,采购单也要遵守这个分工。
这三件东西不是计算机的全部,却足够搭起第一层模型。后面遇到进程、文件和网络时,我们会不断回来修正它。
先抓住三类部件
| 部件 | 主要职责 | 断电后 | 容易混淆的边界 |
|---|---|---|---|
| CPU | 执行指令;包含核心、寄存器和缓存等部件 | 状态不保留 | CPU 不直接等于“整个计算机的大脑”,设备和操作系统也参与工作 |
| 内存(RAM) | 保存正在使用的代码和数据 | 通常丢失 | 进程看到虚拟地址,未直接看到物理内存 |
| 持久存储 | 在文件系统中保存程序和数据 | 通常保留 | SSD、机械硬盘和网络存储的性能与可靠性不同 |
最小模型是:CPU 执行指令,内存保存当前使用的代码与数据,持久存储通过文件系统长期保存字节。这个模型仍解释不了 CPU 缓存、虚拟内存、DMA 或持久化时机,后续章节会分别补上这些机制。
数据怎样流动
持久存储中的文件
│ 读取或内存映射
▼
内存中的代码与数据
│ CPU 取指、读写;设备也可能通过 DMA 传输
▼
计算结果留在内存,应用按需要写回文件或发送到设备保存不是自动发生的。程序崩溃、缓存未刷盘或存储设备故障都可能让尚未持久化的数据丢失。
在自己的机器上核对
模型不能只停在表格里。按平台选择一组命令;输出会随硬件、操作系统、虚拟化和容器限制变化。
| 平台 | CPU | 内存 | 文件系统容量 |
|---|---|---|---|
| Linux | lscpu | free -h | df -h / |
| macOS | sysctl -n machdep.cpu.brand_string | vm_stat | df -h / |
| Windows PowerShell | Get-CimInstance Win32_Processor | Get-CimInstance Win32_OperatingSystem | Get-Volume |
Linux 可以运行:
lscpu | sed -n '1,12p'
free -h
df -h /类型: runnable环境: Linux 观察: lscpu 区分物理核心、逻辑 CPU 和架构;free 显示内存概况;df 显示根文件系统容量。虚拟机通常报告来宾配置;容器内的 lscpu、free 仍可能显示宿主机信息,不能据此认定容器获准使用全部资源。
关于速度
访问 CPU 缓存通常比访问 DRAM 更快;需要真正读取存储设备时,等待往往更长。不过,一次文件读取可能已命中操作系统缓存,不能直接算作一次 SSD 访问。比较速度时,要注明访问大小、顺序或随机模式、缓存是否预热,以及是否计入排队时间;本页的容量命令并不测量延迟。
继续前先检查边界
先用自己的输出回答三个问题:系统报告了多少逻辑 CPU,它为什么未必等于物理核心数;free 与 available 为什么不同;df -h / 描述的是哪个文件系统。答不出时回看命令输出,不必背表格。
下一页是程序与文件。持久存储里已经有许多字节,接下来要分清哪些是数据,哪些能让机器开始工作。