【深入理解计算机系统】第一章(计算机系统漫游)笔记

Chapter 1:计算机系统漫游

预习完成:2026-06-01 | 复习完成:2026-06-03 | 共 31 个知识点


CSAPP

  • [Chapter 1:计算机系统漫游](#Chapter 1:计算机系统漫游)
      • [1. 信息 = 位 + 上下文(1.1)](#1. 信息 = 位 + 上下文(1.1))
      • [2. 程序的翻译过程(1.2)](#2. 程序的翻译过程(1.2))
      • [3. 了解编译系统的好处(1.3)](#3. 了解编译系统的好处(1.3))
      • [4. 系统的硬件组成(1.4.1)](#4. 系统的硬件组成(1.4.1))
      • [5. 运行 hello 程序的过程(1.4.2)](#5. 运行 hello 程序的过程(1.4.2))
      • [6. 高速缓存至关重要(1.5)](#6. 高速缓存至关重要(1.5))
      • [7. 存储设备形成层次结构(1.6)](#7. 存储设备形成层次结构(1.6))
      • [8. 操作系统管理硬件(1.7)](#8. 操作系统管理硬件(1.7))
      • [9. 系统之间利用网络通信(1.8)](#9. 系统之间利用网络通信(1.8))
      • [10. 重要主题(1.9)](#10. 重要主题(1.9))
    • [关键公式 / 技巧](#关键公式 / 技巧)
    • 易错点
    • 与其他章节的联系
    • 习题记录

1. 信息 = 位 + 上下文(1.1)

  • 计算机中所有信息都由位(0/1)组成,同一串位在不同上下文中有不同的解释(整数、浮点数、指令、字符等)。

2. 程序的翻译过程(1.2)

  • 源程序 .c → 预处理 .i → 编译 .s(汇编) → 汇编 .o(可重定位目标文件) → 链接 → 可执行文件。
  • 四个阶段:预处理器 → 编译器 → 汇编器 → 链接器

3. 了解编译系统的好处(1.3)

  • 优化程序性能、理解链接时错误、避免安全漏洞(如缓冲区溢出)。

4. 系统的硬件组成(1.4.1)

  • 总线:在部件间传输固定大小的字节块(字)。
  • I/O 设备:通过控制器或适配器连接系统。
  • 主存(DRAM):临时存放程序和数据的线性字节数组。
  • 处理器(CPU) :核心是 PC(程序计数器,x86-64 中为 %rip),始终指向下一条指令地址。
  • CPU 的核心操作:加载、存储、操作、跳转
  • 指令集架构(ISA):处理器支持的指令及其编码规范,是对处理器硬件的抽象。

5. 运行 hello 程序的过程(1.4.2)

  • 键盘输入 → shell 读入 → 加载可执行文件(DMA) → CPU 执行指令 → 输出到显示器。

6. 高速缓存至关重要(1.5)

  • 核心问题:系统花费大量时间把数据从一个地方搬到另一个地方。
  • 物理规律:较大的存储设备比较小的慢,快速设备比同类的贵得多。
  • CPU-主存差距:处理器与主存之间的速度差距在持续增大。
  • 解决方案 :在 CPU 和主存之间加入更小更快的高速缓存(cache),存放处理器近期可能需要的指令和数据。
  • 依赖的关键前提:局部性原理------程序倾向访问局部区域的数据和代码(时间局部性 + 空间局部性)。
  • L1 (数万字节,≈寄存器速度)→ L2 (数十万~数百万字节,比 L1 慢 5×)→ L3(更大)。
  • L1/L2/L3 用 SRAM 实现。程序员利用缓存知识可将程序性能提升一个数量级

7. 存储设备形成层次结构(1.6)

  • 所有存储设备组织成金字塔:寄存器(L0) → L1 → L2 → L3 → 主存(L4) → 本地磁盘(L5) → 远程存储(L6)。
  • 从上至下:速度越来越慢、容量越来越大、每字节造价越来越便宜
  • 核心思想:每一层存储器作为下一层的高速缓存。
  • 寄存器是 L1 的缓存,L1 是 L2 的缓存,...,主存是磁盘的缓存。

8. 操作系统管理硬件(1.7)

  • 操作系统:应用程序和硬件之间的一层软件,两个基本功能:①防止硬件被滥用 ②提供简单统一的硬件接口。
  • 三大抽象:进程、虚拟内存、文件。
进程(1.7.1)
  • 进程:对一个正在运行的程序的抽象。每个进程都觉得自己独占 CPU、主存、I/O 设备。
  • 并发运行 :多个进程的指令交错执行
  • 上下文切换 :保存当前进程上下文 → 恢复新进程上下文 → 转移控制权。由内核管理。
  • 内核 :操作系统代码常驻主存的部分,不是独立的进程,而是管理所有进程的代码和数据结构的集合。
线程(1.7.2)
  • 线程:进程内的执行单元,同一进程的多个线程共享代码和全局数据。
  • 多线程之间比多进程更容易共享数据,也比进程更高效。
虚拟内存(1.7.3)
  • 虚拟内存 :为每个进程提供独享主存的假象。每个进程看到一致的虚拟地址空间
  • 虚拟地址空间布局(从低到高):代码/数据 → 堆 → 共享库 → 栈 → 内核虚拟内存
  • 核心机制:进程的虚拟内存内容存在磁盘上,主存充当磁盘的高速缓存
  • 栈向下增长(函数调用),堆向上增长(malloc/free)。
文件(1.7.4)
  • 文件 就是字节序列。所有 I/O 设备都可以看成文件(万物皆文件)。
  • 通过一小组 Unix I/O 系统调用提供统一接口。

9. 系统之间利用网络通信(1.8)

  • 网络对系统而言只是一个 I/O 设备
  • 数据流:本地内存 → 网络适配器 → 远程机器。
  • 网络应用遵循客户端-服务器模型

10. 重要主题(1.9)

Amdahl 定律(1.9.1)
  • 公式 : S = 1 ( 1 − a ) + a / k S = \frac{1}{(1-a) + a/k} S=(1−a)+a/k1(a=优化部分占比,k=该部分加速比,S=整体加速比)
  • 核心结论 :要想显著加速整个系统,必须提升全系统中相当大的部分的速度。
  • 上界:即使优化部分无限加速(k→∞),整体加速比 ≤ 1/(1-a)。
并发和并行(1.9.2)
  • 并发:一个同时具有多个活动的系统。
  • 并行:用并发来使系统运行得更快。
  • 三个层次:
    1. 线程级并行:多核处理器、超线程(SMT)。
    2. 指令级并行:流水线、超标量。
    3. 数据级并行(SIMD):一条指令同时操作多个数据。
抽象的重要性(1.9.3)
  • 抽象是计算机科学中最重要的概念之一
  • 三大抽象:文件(对 I/O)、虚拟内存(对存储器)、进程(对运行中的程序)。
  • 虚拟机:对整个计算机的抽象。
  • 核心价值:只要执行模型一样,不同的处理器实现也能执行同样的机器代码

关键公式 / 技巧

公式 名称 说明
S = 1 ( 1 − a ) + a / k S = \frac{1}{(1-a) + a/k} S=(1−a)+a/k1 Amdahl 定律 a=可优化部分占比,k=该部分加速比,S=整体加速比
S ∞ ≤ 1 1 − a S_{\infty} \leq \frac{1}{1-a} S∞≤1−a1 Amdahl 上界 即使优化部分免费,整体加速比也受限

易错点

  1. 内核不是进程------内核是管理进程的代码集合,本身不以进程形式运行。(1.7.1)
  2. 虚拟内存 ≠ 物理内存------进程看见的地址空间是假象,实际数据可能部分在磁盘 swap 中。(1.7.3)
  3. 并发 ≠ 并行------单核通过切换也能并发,但不等于并行;并行要求真正的同时执行。(1.9.2)
  4. Amdahl 定律的"上界陷阱"------把 60% 的部分优化到免费,最多快 2.5 倍,瓶颈永远在不可优化的部分。(1.9.1)
  5. 存储速度差距在拉大------CPU 在加速,但内存没有同步加速,差距持续扩大。(1.5)

与其他章节的联系

本章概念 展开章节
编译系统(预处理/编译/汇编/链接) 第 7 章 链接
缓冲区溢出 第 3 章 程序机器级表示
高速缓存和存储器层次结构 第 6 章 存储器层次结构
进程、上下文切换、内核 第 8 章 异常控制流
虚拟内存、堆、栈 第 9 章 虚拟内存
Unix I/O、文件 第 10 章 系统级 I/O
网络、客户端-服务器 第 11 章 网络编程
线程、并发 第 12 章 并发编程
流水线、超标量、指令集架构 第 4 章 处理器体系结构
SIMD、程序优化、Amdahl 定律 第 5 章 优化程序性能

习题记录

  • Practice Problem 1.1 (Amdahl 定律 --- 卡车运土豆)
    • A. a=0.6, k=1.5 → S=1/(0.4+0.6/1.5)=1.25X;直觉验证:25/(10+10)=1.25X
    • B. S=1.67, a=0.6 → k=3 → 300 km/h(对卡车不现实!)
  • Practice Problem 1.2 (Amdahl 定律 --- 软件性能 2X)
    • S=2, a=0.8 → k=0.8/0.3≈2.67。核心教训:80% 部分需加速 2.67X 才能整体 2X,瓶颈永远在不可优化部分
相关推荐
小满Autumn1 小时前
WPF 依赖属性速查手册
笔记·c#·wpf·上位机·mvvm
学计算机的计算基1 小时前
MySQL 锁体系全解:从 MDL 到间隙锁,一次讲透
java·数据库·笔记·python·mysql
Engineer邓祥浩1 小时前
宏观认知(4):AI与社会——吴恩达《AI for Everyone》Week4学习笔记
人工智能·笔记·学习
imDwAaY1 小时前
从非线性分类到多层神经网络 CS188 Note21 学习笔记
人工智能·笔记·python·神经网络·学习·机器学习·分类
凌波粒2 小时前
深度学习入门(鱼书)第4章笔记——神经网络的学习
笔记·深度学习·神经网络
zhangfeng11333 小时前
台大李宏毅老师讲解memba和类似linear atttenion 模型,笔记
开发语言·人工智能·笔记
AOwhisky13 小时前
Ceph系列第六期:Ceph 文件系统(CephFS)精讲
linux·运维·网络·笔记·ceph
萤萤七悬13 小时前
【Python笔记】AI帮实现CLI工具-使用argparse.ArgumentParser接收命令参数
开发语言·笔记·python
luck_bor15 小时前
IO流知识点笔记
java·开发语言·笔记