计算机基础系统课
计算机基础系统课
目标不是背完 408,而是建立一套能解释程序运行、系统性能和网络请求的知识模型,能够应对面试连续追问。
为什么需要系统课
八股题库擅长告诉你“面试会问什么”,但不能代替知识依赖:
为什么需要虚拟内存?
-> 虚拟地址怎样转换?
-> TLB 在哪里?
-> TLB miss 为什么不等于缺页?
-> 缺页时 CPU 和内核分别做什么?
-> malloc 成功是否已经占用物理内存?
如果只记住第一层定义,追问一变就容易失去逻辑。本课程先解释机制,再训练表达。
一条主线串起三门课
假设一个 Python 程序向 HTTPS 服务发送请求:
flowchart LR
A["Python 代码"] --> B["CPU 执行指令<br>访问 Cache 和内存"]
B --> C["进程通过系统调用<br>进入内核"]
C --> D["内核使用 Socket<br>缓冲区和网卡"]
D --> E["TCP/IP 路由<br>TLS 和 HTTP"]
E --> F["服务器处理并返回响应"]
三门课分别回答:
| 课程 | 核心问题 |
|---|---|
| 计算机组成原理 | 指令怎样执行,数据怎样在寄存器、Cache、内存和设备间移动 |
| 操作系统 | 多个程序怎样安全共享 CPU、内存、文件和 I/O 设备 |
| 计算机网络 | 数据怎样跨主机可靠传输并变成一次 HTTP 请求 |
推荐学习顺序
第一阶段:计算机组成原理
第二阶段:操作系统
第三阶段:计算机网络
每篇课怎样学
所有章节尽量按同一结构组织:
- 问题:为什么需要这项机制。
- 模型:先画组件和数据流,不急着背术语。
- 过程:按时间顺序解释每一步。
- 量化:用地址、时延、吞吐或容量做一个计算。
- 实验:用系统工具看到真实现象。
- 误区:区分容易混淆的概念。
- 面试表达:30 秒结论和 2 分钟展开。
- 追问树:从定义追到实现与权衡。
三层掌握标准
第一层:能复述
知道名词定义和基本流程。例如能说出 TCP 三次握手。
第二层:能解释
知道为什么这样设计、替代方案有什么问题。例如能解释为什么两次握手不足。
第三层:能诊断
能把原理用于场景。例如连接建立慢时,知道区分 DNS、TCP、TLS、服务端排队和丢包重传。
面试追问通常在第二、第三层。
学习记录模板
每学一节,用自己的话填写:
| 项目 | 内容 |
|---|---|
| 它解决的问题 | 没有它会发生什么 |
| 核心状态 | 哪些表、队列、寄存器或字段在变化 |
| 主流程 | 按时间顺序写 5–8 步 |
| 关键权衡 | 时间、空间、吞吐、延迟、隔离或可靠性 |
| 可观察证据 | 什么命令、指标或抓包能看到 |
| 高频追问 | 面试官会从哪里继续问 |
不需要先学什么
这是面试向系统课,不要求先掌握:
- 卡诺图和复杂数字电路化简。
- 某一种汇编语言的完整语法。
- 408 考研中的大量公式型计算。
- Linux 内核全部源码实现。
- 网络协议每个字段的机械记忆。
但会讲清支撑操作系统、并发、性能和网络 I/O 的必要硬件与协议机制。
学完后的综合问题
你应该能沿一条因果链回答:
- 程序从源码到进程经历什么。
- 一次内存访问可能经过哪些缓存和地址转换。
- 系统调用为什么需要进入内核,但不一定切换进程。
- 页面为什么会缺页,TLB miss 为什么不是缺页。
- 多线程为什么需要锁,锁最终依赖什么硬件能力。
- Socket 写入的数据怎样到达网卡。
- TCP 怎样同时处理可靠性、接收方速度和网络拥塞。
- 输入 URL 后 DNS、TCP、TLS、HTTP 分别做什么。
系统课与题库的关系
学习顺序建议:
系统课章节
-> 文末理解检查
-> 操作系统 / 网络速查题库
-> 公司岗位八股
-> 真实面经追问复盘
题库用于检验和复习,不再承担第一次讲清概念的职责。
给从未学过三门课的读者
这套课不默认你已经知道:
- CPU 和内存的区别。
- 地址是什么。
- 进程为什么能隔离。
- Socket 是什么。
- TCP/IP 分几层。
只需要具备:
- 能阅读简单 Python/Java/Go/C 代码中的一种。
- 知道变量、函数和循环。
- 愿意画图和执行命令。
学习目标不是背缩写
面对新术语时,不先背英文,而先回答:
没有它会发生什么问题?
它由谁维护?
它保存什么状态?
一次操作按什么顺序发生?
失败时能观察到什么?
英文用于精确沟通,不应替代机制理解。
最小基础词汇
bit
一个二进制位,取值 0 或 1。
byte
字节,现代通用系统中通常为 8 bit。
instruction
CPU 能直接执行的机器指令。
address
用于定位内存、设备或网络端点的标识。不同层的地址含义不同。
state
系统为了之后正确继续工作而保存的信息。
buffer
临时保存数据、协调生产与消费速度差异的一段存储。
queue
等待被处理的对象集合。排队通常直接影响延迟。
cache
把近期可能使用的数据放在更快位置,以额外空间换时间。
context
执行恢复所需的环境,例如寄存器、栈和相关系统状态。
protocol
通信双方对消息格式、顺序与错误处理的约定。
latency
完成一个任务需要多久。
throughput
单位时间完成多少任务或传输多少数据。
concurrency
多个任务在一段时间内共同推进。
parallelism
多个任务在同一时刻真正执行。
三门课的依赖关系
计算机组成原理
解释硬件有什么能力
|
v
操作系统
用硬件能力提供抽象、隔离和资源管理
|
v
计算机网络
让不同主机上的进程按协议交换数据
为什么先学组成原理
操作系统中的:
- 页表。
- TLB。
- 中断。
- DMA。
- 原子操作。
都依赖硬件概念。
为什么再学操作系统
网络应用中的:
- 进程和线程。
- Socket fd。
- 系统调用。
- 缓冲区。
- epoll。
都由操作系统提供。
为什么网络放最后
网络把前两门课串起来:
- CPU 执行协议代码。
- 内核维护 Socket 和 TCP 状态。
- DMA 在网卡与内存间搬数据。
- 应用最终解析 HTTP。
第一阶段:组成原理学习路线
第 1 章目标
掌握:
- 二进制与十六进制。
- 位运算。
- 无符号数与补码。
- 溢出。
- 浮点近似。
- Unicode/UTF-8。
- 大小端。
- 编译、链接、装载。
- ISA、ABI、寄存器和栈帧。
第 2 章目标
掌握:
- 主频、周期、CPI、IPC。
- 延迟与吞吐。
- 流水线。
- 结构、数据和控制冒险。
- 分支预测。
- 超标量、乱序、SIMD、SMT。
- Amdahl 定律。
第 3 章目标
掌握:
- 存储层次。
- 时间/空间局部性。
- Cache line。
- tag/index/offset。
- 三类 miss。
- AMAT。
- 写策略。
- TLB 与 Cache。
- 工作集和 false sharing。
第 4 章目标
掌握:
- 控制器与 MMIO。
- 轮询和中断。
- DMA、描述符和环形队列。
- IOMMU。
- MESI。
- 原子操作、CAS 和 ABA。
- 内存顺序。
- NUMA。
阶段验收
能从一行整数加法讲到:
源码
-> 编译
-> ISA 指令
-> PC 取指
-> 流水线
-> 寄存器和 ALU
-> TLB/Cache/内存
-> 结果写回
第二阶段:操作系统学习路线
第 1 章目标
掌握:
- 内核、用户态、内核态。
- 系统调用、中断、异常。
- 进程与线程。
- PCB/task。
- 状态转换。
- fork/exec/wait。
- IPC、协程和容器进程模型。
第 2 章目标
掌握:
- 调度指标和经典算法。
- 时间片与抢占。
- 竞态、原子性、可见性。
- mutex/futex。
- 条件变量和信号量。
- 读写锁。
- 死锁、活锁、饥饿和优先级反转。
第 3 章目标
掌握:
- 虚拟/物理地址。
- 页与页表。
- 多级页表。
- TLB。
- minor/major fault。
- 按需分页。
- malloc、COW、mmap。
- 回收、Swap、OOM 和大页。
第 4 章目标
掌握:
- VFS、dentry、inode。
- fd 与打开文件对象。
- 链接和删除。
- page cache。
- write/fsync。
- 阻塞、非阻塞、同步、异步。
- select/poll/epoll。
- LT/ET 和零拷贝。
第 5 章目标
掌握:
- USE/RED。
- CPU、load 和上下文切换。
- 内存、RSS、fault、PSI。
- 磁盘和 fd。
- strace/perf。
- 容器 Cgroup 指标。
- 从症状到证据的排障报告。
阶段验收
能从一次 read() 讲到:
用户态系统调用
-> fd/open file/inode
-> page cache
-> 缺页或设备 I/O
-> 线程阻塞
-> 调度其他线程
-> DMA + 中断
-> 原线程就绪
-> 返回用户态
第三阶段:网络学习路线
第 1 章目标
掌握:
- 五层模型。
- 封装和解封装。
- 以太网帧。
- MAC 与交换机。
- ARP。
- VLAN、DHCP。
- MTU 与 MSS。
第 2 章目标
掌握:
- IPv4/CIDR 子网计算。
- 路由表和最长前缀匹配。
- TTL、ICMP、traceroute。
- NAT/PAT。
- IPv6/NDP。
- 分片和 PMTUD。
第 3 章目标
掌握:
- 端口和 Socket。
- UDP 数据报。
- TCP 字节流。
- 三次握手。
- seq/ACK/SACK/RTO。
- rwnd/cwnd。
- BDP。
- 四次挥手和状态。
- 业务幂等边界。
第 4 章目标
掌握:
- DNS 层次、递归、迭代与缓存。
- A/AAAA/CNAME/NS。
- CDN。
- URL 和 HTTP 消息。
- 方法、状态码。
- HTTP 缓存。
- Cookie/Session。
- HTTP/1.1、2、3。
第 5 章目标
掌握:
- TLS 安全目标。
- 对称、非对称、哈希、HMAC 和签名。
- 证书链。
- TLS 1.3。
- SNI、ALPN。
- 恢复与 0-RTT。
- HTTPS 全链路。
- DNS/TCP/TLS/HTTP 分层排障。
阶段验收
能从 URL 讲到:
DNS
-> IP 与路由
-> ARP/NDP
-> TCP/QUIC
-> TLS
-> HTTP
-> CDN/LB
-> 应用进程
推荐学习节奏
方案 A:四周集中学习
第一周:
- 组成原理四章。
- 每天一章。
- 第五天复习和实验。
第二周:
- 操作系统前三章。
- 重点画状态机和地址翻译。
第三周:
- 操作系统后两章。
- 网络前两章。
第四周:
- 网络后三章。
- 综合链路与面试表达。
方案 B:八周稳步学习
每周两到三章:
- 第一天读机制。
- 第二天做计算和判断题。
- 第三天执行实验。
- 第四天口述面试答案。
- 周末串联前后章。
每次学习 60 分钟模板
10 分钟:读速览和术语
20 分钟:画机制流程
10 分钟:手算/判断题
10 分钟:执行实验
10 分钟:不看资料口述
实验环境
首选 Linux
许多命令和 /proc 内容基于 Linux:
ps/top。strace。perf。ip/ss。vmstat/iostat。
macOS
可完成:
- 编译和查看汇编。
- DNS/HTTP/TLS。
- 基础进程与网络观察。
但:
- 没有 Linux
/proc。 - 命令参数和内核机制不同。
- 不能把输出机械套用。
Windows
概念仍适用,但工具和 API 不同。可使用:
- WSL 练习 Linux 用户空间。
- 系统自带性能和网络工具。
- 虚拟机或容器实验环境。
WSL 与原生 Linux 在内核/网络部署细节上仍可能不同。
实验安全
- 不在生产环境无评估运行重型跟踪。
- 抓包注意隐私和凭据。
- 故障实验使用本地或隔离环境。
- 不随意修改系统级内核参数。
统一知识卡模板
每个概念写一张卡:
术语:
直译:
解决的问题:
核心对象:
输入:
状态变化:
输出:
时间/空间代价:
失败模式:
观察工具:
常见误区:
30 秒回答:
示例,TLB:
术语:Translation Lookaside Buffer
直译:地址转换后备缓冲
问题:多级页表遍历太慢
状态:缓存 VPN -> PPN 与权限
命中:直接得到翻译
未命中:page walk
误区:TLB miss 不等于 Page Fault
工具:perf 等硬件计数器
画图模板
数据流图
来源 -> 缓冲 -> 处理者 -> 下一层
适合:
- DMA。
- read/write。
- 网络封装。
状态机
状态 A --事件--> 状态 B
适合:
- 进程状态。
- TCP 状态。
- Cache coherence。
分层图
应用
传输
网络
链路
硬件
适合网络和系统调用。
地址拆分
tag | index | offset
VPN | page offset
适合 Cache 和虚拟内存。
怎样从“会背”升级到“会解释”
只会背
线程比进程轻。
会解释
同进程线程共享地址空间,切换通常不需要更换页表和地址空间身份,TLB 与 Cache 工作集更容易保留;但仍需保存寄存器和经过调度器。
会追问
现代 CPU 有 ASID/PCID,所以跨进程也不必每次完整清空 TLB;真实成本还包括 Cache 工作集和跨核迁移。
会诊断
上下文切换高时先区分主动和非主动,再结合线程数、运行队列、I/O、锁与吞吐判断,不能只凭一个 cs 指标。
每个知识点都按这四层训练。
怎样做计算题
先写单位
例如:
100 Mbps × 0.1 s = 10 Mb = 1.25 MB
bit 与 byte 要换算。
先画时间线
调度题和 TCP 时序题不要只在脑中算:
0---P1---2---P2---4
先拆字段
地址题:
VPN | offset
tag | set | offset
明确模型假设
- 页大小。
- Cache 行大小。
- 调度是否抢占。
- RTT 是否固定。
- 单位是十进制还是二进制前缀。
怎样练面试
30 秒
先给:
- 定义。
- 核心区别。
- 一句机制。
2 分钟
补:
- 流程。
- 状态。
- 权衡。
- 例子。
继续追问
主动给边界:
- 不是必然。
- 具体依平台。
- 哪个条件成立时。
- 什么指标能验证。
不要用绝对化句式
谨慎对待:
- 一定。
- 永远。
- 完全。
- 零开销。
- 绝对安全。
系统机制常有硬件、内核、语言和部署条件。
跨课程综合链路:程序请求一个 HTTPS API
1. 源码
字符串和 URL 按字符编码存在。
2. 执行
解释器/JIT/编译代码成为 CPU 指令,经过流水线执行。
3. 内存
指令和数据访问经过 TLB 与 Cache,缺页时进入内核。
4. 线程
应用线程运行,调用 Socket API。
5. 系统调用
CPU 从用户态进入内核,内核校验 fd 与缓冲区。
6. DNS
域名通过缓存、递归器和权威系统得到 IP。
7. 路由
内核选择源地址、出接口和下一跳。
8. 链路
ARP/NDP 得到下一跳地址,以太网/Wi-Fi 发送帧。
9. 设备
驱动准备描述符,网卡 DMA 读取内存并发送。
10. 传输
TCP/QUIC 建立状态,处理可靠性、流控和拥塞。
11. 安全
TLS 验证证书、协商密钥并加密数据。
12. 应用
HTTP 请求经 CDN、代理和服务端处理。
13. 返回
响应沿协议栈返回,网卡 DMA 数据到内存,中断/轮询通知内核,线程唤醒读取。
14. 观测
故障时用:
- CPU/Cache/fault 指标。
- 进程线程和系统调用。
- DNS/路由/Socket。
- TLS/HTTP 阶段时间。
- 应用 trace 与日志。
三门课共同的核心思想
抽象
- ISA 抽象处理器能力。
- 进程抽象运行实例。
- 文件抽象持久字节。
- Socket 抽象网络端点。
分层
- Cache 层次。
- 内核与用户态。
- 网络协议栈。
缓存
- CPU Cache。
- TLB。
- page cache。
- DNS 缓存。
- HTTP/CDN 缓存。
缓存共同问题:
- 命中。
- 失效。
- 一致性。
- 容量。
- 淘汰。
排队
- CPU 运行队列。
- 锁等待队列。
- 磁盘队列。
- 网卡队列。
- TCP 监听队列。
- 服务线程池和连接池。
负载接近容量时,排队会放大延迟。
状态机
- 进程状态。
- Cache coherence。
- TCP 连接。
- TLS 握手。
权衡
- 时间换空间。
- 延迟换吞吐。
- 隔离换通信成本。
- 一致性换并发度。
- 可靠性换协议开销。
最终毕业验收
组成原理
- 手算补码和溢出。
- 解释浮点近似和 Unicode。
- 画 CPU 指令周期与流水线。
- 手算 CPI、AMAT 和 Amdahl。
- 拆 Cache 地址。
- 解释 DMA、MESI、CAS 和内存顺序。
操作系统
- 区分特权级切换和上下文切换。
- 画进程状态机。
- 解释线程共享/私有资源。
- 手算调度题。
- 写条件变量伪代码。
- 推演死锁。
- 画 TLB/Page Fault 路径。
- 解释 fd/inode/page cache。
- 比较 epoll LT/ET。
- 建立 Linux 故障证据链。
计算机网络
- 画五层封装。
- 推演 ARP 到网关。
- 手算 CIDR。
- 做最长前缀匹配。
- 画 TCP 握手、重传和挥手。
- 区分 rwnd/cwnd。
- 画 DNS 递归查询。
- 设计 HTTP 幂等和缓存。
- 画 TLS 1.3 握手。
- 分解 HTTPS 请求延迟。
综合口述
不看资料,用 15 分钟完整回答:
一个程序从磁盘启动为进程,创建线程,访问内存和文件,再向远端 HTTPS API 发请求,期间 CPU、操作系统和网络分别做了什么?如果 p99 突然升高,你怎样逐层定位?
能够按状态、顺序和证据回答,而不是堆缩写,才算真正学完。
| 返回面试备战 | 开始学习:计算机组成原理 → |
术语卡片
下表只收录本篇实际使用的主要缩写。阅读正文时先理解它在流程中的角色,复习时再用这张表回查全称和定义。
| 缩写 | 英文全称 | 中文名称 | 在本篇中的定义或作用 |
|---|---|---|---|
| TLB | Translation Lookaside Buffer | 地址转换旁路缓冲 | 缓存虚拟地址到物理地址映射的硬件结构 |
| CPU | Central Processing Unit | 中央处理器 | 执行机器指令并协调计算的处理器核心 |
| TCP | Transmission Control Protocol | 传输控制协议 | 传输层,为应用提供有序可靠的字节流 |
| IP | Internet Protocol | 互联网协议 | 网络层,负责跨网络寻址和转发数据包 |
| TLS | Transport Layer Security | 传输层安全协议 | 安全协议,提供身份认证、机密性和完整性 |
| HTTP | Hypertext Transfer Protocol | 超文本传输协议 | 应用层,定义请求和响应的消息语义 |
| I/O | Input/Output | 输入输出 | 程序与文件、设备或网络交换数据的过程 |
| DMA | Direct Memory Access | 直接内存访问 | 允许设备在内存与设备间搬运数据,减少 CPU 逐字节参与 |
| MAC | Media Access Control | 介质访问控制 | 链路层,标识网络接口 |
| ARP | Address Resolution Protocol | 地址解析协议 | 链路与网络层之间,把 IP 地址解析为 MAC 地址 |
| ICMP | Internet Control Message Protocol | 互联网控制报文协议 | 网络层,用于差错报告和诊断 |
| NAT | Network Address Translation | 网络地址转换 | 网络设备,将地址或端口映射到另一组地址 |
| UDP | User Datagram Protocol | 用户数据报协议 | 传输层,提供无连接的数据报传输 |
| DNS | Domain Name System | 域名系统 | 应用层,把域名解析为 IP 地址 |
| IPC | Inter-Process Communication | 进程间通信 | 进程交换数据和同步状态的机制 |
| CAS | Compare-And-Swap | 比较并交换 | 比较内存值未变化时再原子更新的同步原语 |
| NUMA | Non-Uniform Memory Access | 非统一内存访问 | 不同处理器访问不同内存节点具有不同延迟的架构 |
| ALU | Arithmetic Logic Unit | 算术逻辑单元 | 执行算术和逻辑运算的处理器部件 |
| PCB | Process Control Block | 进程控制块 | 内核保存进程标识、状态和调度信息的数据结构 |
| COW | Copy-On-Write | 写时复制 | 多个执行体先共享页面,发生写入时再复制 |
| OOM | Out Of Memory | 内存不足 | 系统或进程无法满足新的内存分配请求 |
| VFS | Virtual File System | 虚拟文件系统 | 内核统一不同文件系统接口的抽象层 |
| MTU | Maximum Transmission Unit | 最大传输单元 | 链路允许承载的单个 IP 数据包最大尺寸 |
| MSS | Maximum Segment Size | 最大报文段长度 | TCP 单个报文段可承载的最大应用数据量 |
| CIDR | Classless Inter-Domain Routing | 无类别域间路由 | 用前缀长度表示 IP 网络范围的编址方式 |
| TTL | Time To Live | 生存时间 | IP 数据包允许经过的最大跳数 |
| ACK | Acknowledgment | 确认标志 | 表示已收到数据或控制报文的 TCP 标志 |
| SACK | Selective Acknowledgment | 选择性确认 | TCP 选择性报告已收到的非连续数据块 |
| RTO | Retransmission Timeout | 重传超时时间 | 发送方等待确认后触发重传的时间阈值 |
| BDP | Bandwidth-Delay Product | 带宽时延积 | 链路带宽乘以 RTT,表示填满链路所需的在途数据量 |
| RTT | Round-Trip Time | 往返时间 | 请求从发送端到达对端再返回所需的时间 |
| QUIC | Quick UDP Internet Connections | 基于 UDP 的快速网络连接协议 | 在 UDP 之上实现可靠、安全和多路复用传输 |
| API | Application Programming Interface | 应用程序编程接口 | 程序调用另一组件功能的约定接口 |