第1章 计算机的世界你不懂
沿指令、CPU、地址空间、进程、设备 I/O 到外部结果追踪一次程序执行,建立资源边界、所有权和故障证据。
学习目标
- 能沿指令、CPU、地址空间、进程、设备 I/O 和外部结果追踪一次程序执行
- 能区分 CPU 执行、进程隔离、地址映射、文件和设备 I/O 各自承诺的资源边界
- 能在正常、边界和故障场景中根据所有权、状态和错误返回定位程序没有产生预期结果的首个节点
第1章 计算机的世界你不懂
本页依据刘欣《码农翻身》(2018 年第 1 版)及出版社公开书目信息,独立重构 第1章 计算机的世界你不懂。正文、图示、实验和练习是本课程重新设计的教学材料,不复制原书正文、插图、练习答案或代码。
“程序运行了”不是一个单一事件。源代码先变成指令,CPU 取指和执行;操作系统为进程提供地址空间与调度;文件、网络和其他设备把内存状态连接到外部世界。每一步都有自己的所有者、可见状态和失败方式。把这些层混成一个黑盒,通常只能看到最后的错误,无法找到最早偏离。
三个会让计算机模型失真的陷阱
一条程序执行链上的资源边界
第1章 计算机的世界你不懂
总合同是:指令需要 CPU 执行,进程提供地址空间和资源归属,线程获得调度机会,设备 I/O 通过内核接口交换数据,外部结果还要经过文件、网络或设备的确认边界。每层只承诺自己的状态,故障诊断要从最早没有满足合同的节点开始。
↡把程序从指令执行、资源隔离、地址映射到设备交互的整条链路当作一个可分层追踪的系统模型,而不是不可解释的黑盒。指令与 CPU
指令描述要做什么,CPU 按取指、译码、执行等硬件规则推进它。CPU 有运行能力不等于程序永远获得连续时间;调度、中断、缓存和其他任务都会改变观察到的进度。
↡由 CPU 取指并执行的机器级操作与其处理资源;它负责推进计算,不负责提供进程隔离或设备最终确认。地址空间与进程
进程把代码、数据、堆栈和映射组织成受保护的地址空间,线程在其中共享部分资源并竞争调度。地址、权限和生命周期必须一起记录;相同数值的虚拟地址不代表相同物理对象。
↡操作系统为一个进程提供的虚拟地址、权限和资源视图;它隔离访问并组织生命周期,不等同于一段裸物理内存。设备 I/O 与外部结果
文件、网络和设备把进程内部状态连接到外部世界。调用接口可能只表示数据已交给内核或缓冲区;要声称持久化或对端收到,必须再找到设备和协议层证据。
↡进程通过内核接口与文件、网络或硬件交换数据的边界;接口返回、设备处理和外部确认是不同状态。Lab
计算机资源边界诊断实验
只改变地址、调度或 I/O 状态,观察程序执行链怎样停下或继续。
合法地址内完成计算,线程退出值符合预期
instruction → cpu → mapped address → process state → exit=ok
判定
accept:执行和资源边界都可解释
当前样本:内存计算;保存线程、进程、地址、I/O、设备状态和复位结果。
五步重放一次程序执行
1. 固定指令与输入
记录一个最小程序、输入、预期计算结果和退出条件。正常样本只做内存计算,边界样本增加并发,故障样本让输入越界或 I/O 返回错误。
正常、边界与故障证据矩阵
| 样本 | 只改变的变量 | 预期判定 | 必存证据 |
|---|---|---|---|
| 正常 | 单进程、合法地址、内存计算 | 指令完成并得到预期值 | 输入、线程、状态、退出值 |
| 边界 | 并发、权限或 I/O 背压 | 在明确边界返回并保留状态 | 调度、映射、缓冲、错误 |
| 故障 | 越界、设备失败或对端无确认 | 找到首个资源合同违约,不伪造结果 | 首错节点、所有权、复位轨迹 |
故障诊断:先找资源合同
- 指令与调度:查线程状态、运行队列、时间片和等待原因;“慢”可能是等待而非没有执行。
- 地址与进程:查进程 ID、虚拟地址、权限、映射和生命周期;越界或共享错误要在地址边界拒绝。
- I/O 与设备:查系统调用返回、缓冲、文件描述、设备状态和重试;本地返回不等于外部确认。
- 结果与复位:查文件、网络对端或设备的实际结果,随后重置并重放同一输入;不要只看终端最后一行。
如果多个线程互相等待,先画资源所有权和等待边;如果指针在一个进程有效、另一个无效,查地址空间和共享机制;如果写入返回成功但数据消失,查缓冲和设备确认。每次只改变一个资源边界。
术语与边界
本页四个术语都绑定到实验中的状态、所有权或证据字段:
- 第1章 计算机的世界你不懂:分层追踪程序从指令到外部结果的资源模型。
- 指令与 CPU:取指执行并推进计算的硬件边界。
- 地址空间与进程:虚拟地址、权限和资源归属边界。
- 设备 I/O 与外部结果:内核接口、设备处理和外部确认边界。
名词解释
本章出现的专业名词,用大白话再讲一遍。
- 第1章 计算机的世界你不懂
把程序执行拆成指令、资源、地址和 I/O 边界的系统模型。
- 指令与 CPU
CPU 取指并执行机器级操作的计算边界。
- 地址空间与进程
操作系统提供的虚拟地址、权限和资源视图。
- 设备 I/O 与外部结果
通过内核与设备交换数据并等待外部确认的边界。
练习
练习
问题 1: 为什么“系统调用返回成功”不一定等于用户已经看到文件或网络结果?
问题 2: 两个进程看到相同的虚拟地址,为什么不能直接认为它们访问同一数据?
问题 3: 修改实验,让一个线程等待设备 I/O;写出诊断时必须保留的三类证据。
本页小结
- 程序执行要沿指令、CPU、进程、地址空间、设备 I/O 和外部确认逐层追踪。
- 线程、进程、地址和系统调用各有所有权与承诺,最终输出不能掩盖中间边界违约。
- 故障诊断先找首个资源合同错误,再保存所有权、状态和复位证据。
读完后的自测问题是:面对“程序运行了但结果不对”,你能否指出问题属于执行、地址、I/O 还是外部确认,并说明下一条应保存的证据?