《计算机系统系统架构与操作系统的高度集成》第 1 章 导论参考Umakishore Ramachandran William D. Leahy Jr. 著1.1 计算机系统概述1.1.1 什么是计算机系统**计算机系统Computer System**是由硬件和软件共同构成的完整信息处理体系。它不仅仅是一台机器而是一个精密协作的整体能够接收输入、处理数据、存储信息并产生输出。计算机系统的基本组成 ┌─────────────────────────────────────────────────────────────┐ │ 计算机系统 │ │ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ 软件层 │ │ │ │ ┌──────────────────────────────────────────────┐ │ │ │ │ │ 应用程序 │ │ │ │ │ │ 浏览器 / 文字处理 / 游戏 / 数据库 │ │ │ │ │ └──────────────────────────────────────────────┘ │ │ │ │ ┌──────────────────────────────────────────────┐ │ │ │ │ │ 操作系统 │ │ │ │ │ │ Windows / Linux / macOS / Android │ │ │ │ │ └──────────────────────────────────────────────┘ │ │ │ └──────────────────────────────────────────────────────┘ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ 硬件层 │ │ │ │ CPU / 内存 / 磁盘 / 显卡 / 网卡 / 键盘 / 显示器 │ │ │ └──────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘1.1.2 计算机系统的核心功能计算机系统具备四大核心功能1数据处理Data Processing计算机能够对数据执行各种运算和变换数据处理示例 输入两个数字 a15, b7 处理执行加法运算 a b 输出结果 22 更复杂的例子 输入一张 4K 分辨率的图片约 33MB 处理应用高斯模糊滤镜数百万次浮点运算 输出模糊后的图片 计算机每秒可以执行数十亿次这样的运算2数据存储Data Storage计算机系统具有多层次的存储体系存储层次速度从快到慢容量从小到大 寄存器Register 容量几十个每个 64 位 速度 1 纳秒 示例CPU 内部的 RAX、RBX 寄存器 高速缓存Cache 容量KBMB 级别 速度110 纳秒 示例L1 Cache32KB、L2 Cache256KB、L3 Cache8MB 主存RAM 容量GB 级别 速度50100 纳秒 示例8GB DDR4 内存 辅助存储Secondary Storage 容量TB 级别 速度毫秒级HDD或微秒级SSD 示例1TB 固态硬盘 远程存储Cloud Storage 容量PB 级别 速度毫秒秒级取决于网络 示例Google Drive、阿里云 OSS3数据传输Data Transfer计算机系统能够在不同组件之间、不同计算机之间传输数据数据传输示例 内部传输 CPU ←→ 内存通过内存总线速度约 50GB/s CPU ←→ 显卡通过 PCIe 总线速度约 16GB/s CPU ←→ 硬盘通过 SATA/NVMe速度约 500MB/s7GB/s 外部传输 计算机 ←→ 互联网通过网卡速度约 1Gbps家用 计算机 ←→ USB 设备通过 USB 3.0速度约 5Gbps 计算机 ←→ 显示器通过 HDMI/DisplayPort4控制Control操作系统和硬件协同控制整个系统的运行控制功能示例 场景用户双击打开一个 Word 文档 控制流程 1. 鼠标产生中断信号 2. 操作系统响应中断识别双击事件 3. 操作系统找到 Word 程序的可执行文件 4. 操作系统为 Word 分配内存空间 5. 操作系统将 Word 程序加载到内存 6. CPU 开始执行 Word 程序的指令 7. Word 程序读取文档文件 8. Word 程序将文档内容渲染到屏幕1.1.3 计算机系统的关键特性案例理解计算机系统的抽象性抽象的力量 当你在 Python 中写 result 2 3 你不需要知道 - CPU 如何用二进制表示数字 2 和 3 - 加法器电路如何工作 - 结果如何存储在寄存器中 - 操作系统如何调度这段代码执行 这就是抽象Abstraction的力量 高层Python 代码人类友好 中层机器指令ADD EAX, EBX 底层电路信号0101 0011... 每一层只需要了解上一层提供的接口 不需要了解下一层的实现细节。1.2 计算机的发展历史1.2.1 第一代计算机电子管时代1940s1950s第一代计算机的特征 代表机器ENIAC1946年 - 全称Electronic Numerical Integrator and Computer - 重量30 吨 - 占地167 平方米 - 功耗150 千瓦 - 速度每秒 5000 次加法运算 - 存储20 个 10 位十进制数约 80 字节 - 编程方式手动插拔电缆和设置开关 技术特征 ✓ 使用真空电子管Vacuum Tube作为开关元件 ✓ 使用穿孔卡片输入程序 ✓ 体积巨大价格昂贵 ✗ 电子管容易损坏ENIAC 平均每天有一个电子管烧毁 ✗ 没有操作系统每次运行不同程序需要重新接线 历史意义 ENIAC 最初用于计算炮弹弹道表 后来用于氢弹设计计算 证明了电子计算机的可行性1.2.2 第二代计算机晶体管时代1950s1960s第二代计算机的特征 关键发明晶体管Transistor1947年贝尔实验室 - 发明者William Shockley、John Bardeen、Walter Brattain - 获得 1956 年诺贝尔物理学奖 代表机器IBM 70901959年 - 使用晶体管替代电子管 - 体积缩小到房间大小 - 速度每秒 22.9 万次运算 - 用于 NASA 水星计划的轨道计算 技术进步 ✓ 晶体管比电子管小 200 倍耗电少 100 倍 ✓ 出现了高级编程语言FORTRAN、COBOL ✓ 出现了批处理操作系统 ✓ 磁芯存储器Magnetic Core Memory替代了汞延迟线 批处理系统示例 程序员将程序写在穿孔卡片上 → 提交给操作员 → 操作员将一批卡片输入计算机 → 计算机依次执行所有程序 → 打印结果返回给程序员 整个过程可能需要几小时到几天1.2.3 第三代计算机集成电路时代1960s1970s第三代计算机的特征 关键发明集成电路Integrated CircuitIC1958年 - 发明者Jack Kilby德州仪器和 Robert Noyce仙童半导体 - Jack Kilby 获得 2000 年诺贝尔物理学奖 代表机器IBM System/3601964年 - 第一个使用集成电路的商业计算机系列 - 引入了兼容性概念同一系列不同型号可以运行相同程序 - 引入了多道程序设计Multiprogramming 多道程序设计示例 传统方式 程序A运行 → 等待I/O → CPU空闲 → 程序A继续 CPU 利用率约 20% 多道程序设计 程序A运行 → 等待I/O → 切换到程序B → 程序B运行 → 程序A的I/O完成 → 切换回程序A CPU 利用率约 80% 这就是现代操作系统多任务的雏形 重要里程碑 1969年UNIX 操作系统诞生贝尔实验室Ken Thompson Dennis Ritchie 1972年C 语言诞生Dennis Ritchie 1971年Intel 4004第一款商用微处理器2300个晶体管1.2.4 第四代计算机微处理器时代1970s至今第四代计算机的特征 关键发明大规模集成电路LSI/VLSI 将数百万个晶体管集成在一块芯片上 个人计算机革命 1975年Altair 8800第一台商业成功的个人计算机 1977年Apple II乔布斯和沃兹尼亚克 1981年IBM PC使用 Intel 8088 处理器 1984年Apple Macintosh第一款图形用户界面个人电脑 摩尔定律Moores Law 1965年Gordon Moore 预测 集成电路上的晶体管数量每1824个月翻一番 验证 1971年 Intel 40042,300 个晶体管 1979年 Intel 808829,000 个晶体管 1993年 Intel Pentium310 万个晶体管 2006年 Intel Core 22.91 亿个晶体管 2019年 AMD EPYC395 亿个晶体管 2023年 Apple M2 Ultra1340 亿个晶体管 互联网时代 1969年ARPANET互联网前身 1991年万维网WWW诞生Tim Berners-Lee 1993年Mosaic 浏览器第一款图形浏览器 2007年iPhone 发布移动计算时代开始1.2.5 计算机发展的关键里程碑时间线计算机发展时间线 1936 ── 图灵机理论Alan Turing 1945 ── 冯·诺依曼架构提出 1946 ── ENIAC 诞生第一台通用电子计算机 1947 ── 晶体管发明贝尔实验室 1951 ── UNIVAC I第一台商用计算机 1958 ── 集成电路发明 1964 ── IBM System/360第一个计算机系列 1969 ── UNIX 诞生 / ARPANET 建立 1971 ── Intel 4004第一款微处理器/ C 语言诞生 1975 ── Altair 8800个人计算机时代开始 1981 ── IBM PC / MS-DOS 1984 ── Apple MacintoshGUI 普及 1991 ── Linux 内核诞生Linus Torvalds/ WWW 诞生 1993 ── Pentium 处理器 / Mosaic 浏览器 1995 ── Windows 95 / Java 语言 2001 ── Mac OS X / Windows XP 2007 ── iPhone移动计算革命 2012 ── 深度学习崛起AlexNet 2016 ── AlphaGo 击败人类围棋冠军 2022 ── ChatGPT大语言模型时代 2023 ── AI 芯片时代NVIDIA H1001.2.6 冯·诺依曼架构现代计算机的基础是冯·诺依曼架构Von Neumann Architecture由数学家约翰·冯·诺依曼于 1945 年提出冯·诺依曼架构 ┌─────────────────────────────────────────────────────────────┐ │ 冯·诺依曼计算机 │ │ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ 中央处理器CPU │ │ │ │ ┌──────────────────┐ ┌──────────────────────────┐ │ │ │ │ │ 控制单元CU │ │ 算术逻辑单元ALU │ │ │ │ │ │ 负责指令的读取 │ │ 负责算术和逻辑运算 │ │ │ │ │ │ 解码和执行控制 │ │ 加减乘除、与或非 │ │ │ │ │ └──────────────────┘ └──────────────────────────┘ │ │ │ └──────────────────────────────────────────────────────┘ │ │ ↕ 总线Bus │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ 存储器Memory │ │ │ │ 程序指令和数据存储在同一存储器中 │ │ │ │ 这是冯·诺依曼架构的核心特征 │ │ │ └──────────────────────────────────────────────────────┘ │ │ ↕ │ │ ┌──────────────────┐ ┌──────────────────────────────────┐ │ │ │ 输入设备 │ │ 输出设备 │ │ │ │ 键盘/鼠标/摄像头 │ │ 显示器/打印机/扬声器 │ │ │ └──────────────────┘ └──────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ 冯·诺依曼架构的核心思想 1. 程序存储Stored Program程序和数据都存储在内存中 2. 顺序执行CPU 按顺序读取并执行指令 3. 二进制表示所有信息用二进制0和1表示 冯·诺依曼瓶颈Von Neumann Bottleneck CPU 和内存之间的数据传输速度限制了整体性能 CPU 速度提升远快于内存速度提升 解决方案Cache高速缓存1.3 计算机系统的层次结构1.3.1 层次结构的概念计算机系统采用**层次化Hierarchical**设计每一层都建立在下一层提供的服务之上并向上一层提供更高级的抽象计算机系统的完整层次结构 层次7用户User ↕ 应用程序接口API 层次6应用程序Application Programs Word、Chrome、Python 程序、游戏... ↕ 系统调用接口System Call Interface 层次5操作系统Operating System 进程管理、内存管理、文件系统、设备驱动... ↕ 指令集架构ISA 层次4机器语言Machine Language 二进制指令01001000 10000011 11000000 00000001 ↕ 微架构实现 层次3微架构Microarchitecture 流水线、超标量、乱序执行、分支预测... ↕ 逻辑门实现 层次2数字逻辑Digital Logic 与门、或门、非门、触发器、寄存器... ↕ 晶体管实现 层次1电子电路Electronic Circuits 晶体管、电阻、电容... ↕ 物理实现 层次0物理层Physics 半导体物理、量子力学...1.3.2 硬件层次1晶体管与逻辑门从物理到逻辑的抽象 物理层晶体管Transistor 晶体管是一种电子开关 - 基极Base电压高 → 集电极到发射极导通 → 输出低电平0 - 基极Base电压低 → 集电极到发射极断开 → 输出高电平1 逻辑层逻辑门Logic Gate 用晶体管构建基本逻辑门 非门NOT Gate 输入 A → 输出 ¬A A0 → 输出1 A1 → 输出0 与门AND Gate 输入 A, B → 输出 A·B 只有 A1 且 B1 时输出才为1 或门OR Gate 输入 A, B → 输出 AB A1 或 B1 时输出为1 案例用逻辑门实现 1 位加法器 输入A被加数B加数Cin进位输入 输出Sum和Cout进位输出 Sum A XOR B XOR Cin Cout (A AND B) OR (Cin AND (A XOR B)) 这就是计算机加法的最底层实现2数字逻辑层数字逻辑层的关键组件 组合逻辑Combinational Logic 输出只取决于当前输入 例加法器、多路选择器MUX、解码器 时序逻辑Sequential Logic 输出取决于当前输入和历史状态 例触发器Flip-Flop、寄存器、计数器 案例D 触发器D Flip-Flop - 在时钟上升沿将输入 D 的值存储到输出 Q - 这是计算机存储信息的基本单元 - 8 个 D 触发器 1 字节的存储 时序图 CLK: ___↑___↑___↑___ D: ___1___0___1___ Q: ____1___0___1__ Q 在时钟上升沿跟随 D 变化3微架构层微架构Microarchitecture 实现指令集架构ISA的具体硬件设计 关键技术 1. 流水线Pipeline 将指令执行分为多个阶段多条指令同时处于不同阶段 5级流水线示例 阶段取指(IF) → 译码(ID) → 执行(EX) → 访存(MEM) → 写回(WB) 时间轴 指令1: IF ID EX MEM WB 指令2: IF ID EX MEM WB 指令3: IF ID EX MEM WB 指令4: IF ID EX MEM WB 效果理想情况下每个时钟周期完成一条指令 非流水线每条指令需要5个时钟周期 2. 超标量Superscalar 每个时钟周期可以发射多条指令 现代 CPU 通常可以同时执行 48 条指令 3. 乱序执行Out-of-Order Execution CPU 不按程序顺序执行指令而是按照数据依赖关系 充分利用 CPU 的执行单元提高效率 4. 分支预测Branch Prediction 预测 if/else 等分支的走向提前执行预测路径 现代 CPU 分支预测准确率可达 95%1.3.3 指令集架构ISA**指令集架构Instruction Set ArchitectureISA**是硬件和软件之间的接口定义了处理器能够执行的指令集合ISA 的重要性 ISA 是硬件和软件的合同 硬件承诺实现 ISA 中定义的所有指令 软件承诺只使用 ISA 中定义的指令 ISA 的好处 ✓ 软件可以在不同硬件实现上运行兼容性 ✓ 硬件可以自由改进实现方式只要遵守 ISA 案例x86 ISA 的兼容性 1981年Intel 8088IBM PC 1985年Intel 8038632位扩展 2003年AMD Athlon 6464位扩展x86-64 2023年Intel Core i9-13900K 这些处理器都实现了 x86 ISA不断扩展 1981年为 IBM PC 编写的程序理论上仍然可以在 2023年的 Intel Core i9 上运行 常见 ISA x86/x86-64Intel 和 AMD 的 PC/服务器处理器 ARM手机、平板、嵌入式系统Apple M系列也是ARM RISC-V开源 ISA新兴的嵌入式和服务器市场 MIPS路由器、早期游戏机PlayStation ISA 的分类 CISC复杂指令集x86指令复杂数量多 RISC精简指令集ARM、RISC-V指令简单数量少x86 汇编语言示例; 计算 1 2 3 的 x86-64 汇编代码 section .text global _start _start: mov rax, 1 ; 将数字 1 放入 RAX 寄存器 mov rbx, 2 ; 将数字 2 放入 RBX 寄存器 add rax, rbx ; RAX RAX RBX 1 2 3 ; 结果 3 现在在 RAX 寄存器中 ; 对应的机器码十六进制 ; 48 C7 C0 01 00 00 00 → mov rax, 1 ; 48 C7 C3 02 00 00 00 → mov rbx, 2 ; 48 01 D8 → add rax, rbx ; 对应的二进制 ; 01001000 11000111 11000000 00000001 00000000 00000000 00000000 ; ...CPU 实际执行的就是这些 0 和 11.3.4 操作系统层操作系统Operating SystemOS是管理计算机硬件资源、为应用程序提供服务的系统软件操作系统的核心功能 1. 进程管理Process Management - 创建、调度、终止进程 - 多个程序同时运行的幻觉 案例你同时运行浏览器、音乐播放器和文字处理软件 实际上CPU 在这三个程序之间快速切换 切换频率每秒数百次 人类感知三个程序同时在运行 2. 内存管理Memory Management - 为每个进程分配独立的内存空间 - 虚拟内存让每个程序以为自己独占内存 案例虚拟内存 物理内存8GB 每个程序看到的地址空间4GB32位或 128TB64位 操作系统负责将虚拟地址映射到物理地址 3. 文件系统File System - 组织和管理磁盘上的数据 - 提供文件和目录的抽象 案例你保存一个 Word 文档 你看到的一个名为 report.docx 的文件 实际上数据分散存储在磁盘的多个扇区中 文件系统负责记录哪些扇区属于这个文件 4. 设备管理Device Management - 通过驱动程序控制硬件设备 - 提供统一的设备访问接口 案例打印文档 应用程序调用 print() 函数 操作系统找到打印机驱动程序 驱动程序将数据转换为打印机能理解的格式 打印机执行打印操作 5. 安全与保护Security Protection - 防止程序相互干扰 - 用户权限管理 - 防止恶意软件1.3.5 应用程序层应用程序层的抽象 高级编程语言的抽象 Python 代码 numbers [3, 1, 4, 1, 5, 9, 2, 6] numbers.sort() print(numbers) 这几行代码背后发生了什么 1. Python 解释器将代码翻译为字节码 2. 字节码调用 C 语言实现的排序函数 3. C 函数编译为 x86-64 机器指令 4. 机器指令操作 CPU 寄存器和内存 5. 内存中的数据通过总线传输 6. 最终结果显示在屏幕上 程序员只需要写 3 行 Python 代码 底层发生了数百万次硬件操作 这就是抽象层次的价值 让程序员专注于解决问题 而不是关心硬件细节。1.3.6 各层次之间的交互案例从键盘输入到屏幕显示的完整旅程案例在终端输入 Hello 并按回车 步骤1物理层 手指按下 H 键 键盘电路检测到按键产生电信号 步骤2硬件层 键盘控制器将按键编码为扫描码0x23 通过 USB 接口发送给计算机 步骤3操作系统层中断处理 USB 控制器产生硬件中断 CPU 暂停当前任务跳转到中断处理程序 操作系统的键盘驱动程序读取扫描码 将扫描码转换为 ASCII 码H 0x48 72 将字符放入键盘输入缓冲区 步骤4操作系统层进程调度 终端程序bash等待键盘输入 操作系统唤醒 bash 进程 bash 从缓冲区读取字符 H 步骤5应用程序层 bash 将 H 回显到终端 用户继续输入 ello 和回车 bash 接收完整命令 Hello 步骤6操作系统层显示 bash 调用系统调用 write() 操作系统将字符串传递给显示驱动程序 显示驱动程序将字符转换为像素数据 像素数据写入显存Frame Buffer 步骤7硬件层 显卡读取显存中的像素数据 通过 HDMI/DisplayPort 发送给显示器 显示器点亮对应的像素 步骤8物理层 液晶分子在电场作用下改变方向 背光通过液晶层形成可见光 用户看到屏幕上显示 Hello 整个过程在不到 1 毫秒内完成1.4 本书的组织结构与学习路线1.4.1 本书的核心主题《计算机系统系统架构与操作系统的高度集成》的独特之处在于将计算机体系结构和操作系统融合讲解强调两者之间的紧密联系传统教学方式分离 计算机体系结构课程 → 学习 CPU 设计、流水线、Cache → 但不了解操作系统如何使用这些硬件特性 操作系统课程 → 学习进程、内存管理、文件系统 → 但不了解底层硬件如何支持这些功能 本书的方式集成 同时讲解硬件和软件展示它们如何协同工作 例如 讲解虚拟内存时同时讲解 - 硬件MMU内存管理单元、TLB快表 - 软件操作系统的页表管理、缺页中断处理1.4.2 本书的章节组织本书的学习路线图 第一部分基础知识 第1章导论本章 → 建立整体认知框架 第2章指令集架构ISA → 学习计算机能理解的语言 → 案例LC-3 简化指令集 第3章数字逻辑 → 从晶体管到逻辑门到功能单元 → 案例设计一个简单的 ALU 第二部分处理器与内存 第4章处理器设计 → 如何实现 ISA → 案例设计单周期 CPU 第5章流水线 → 提高 CPU 性能的关键技术 → 案例5级流水线设计与冒险处理 第6章存储器层次结构 → 寄存器、Cache、内存、磁盘 → 案例Cache 命中率对性能的影响 第三部分操作系统基础 第7章操作系统概述 → 操作系统的角色和功能 第8章进程与线程 → 程序如何同时运行 → 案例多线程 Web 服务器 第9章内存管理 → 虚拟内存、分页、分段 → 案例malloc 的实现原理 第10章文件系统 → 数据如何持久化存储 → 案例ext4 文件系统结构 第四部分高级主题 第11章I/O 系统 → 设备如何与计算机交互 → 案例磁盘调度算法 第12章并发与同步 → 多个程序如何安全共享资源 → 案例生产者-消费者问题 第13章网络与分布式系统 → 计算机如何互联 → 案例TCP/IP 协议栈1.4.3 学习路线建议初学者路线初学者推荐学习路线 阶段1建立基础第13章 目标理解计算机的基本工作原理 重点 ✓ 理解二进制表示 ✓ 理解逻辑门和基本电路 ✓ 理解指令集的概念 实践 - 用 Python 模拟简单的逻辑门 - 手动将十进制数转换为二进制 - 阅读简单的汇编代码 阶段2理解处理器第46章 目标理解 CPU 如何执行程序 重点 ✓ 理解指令执行的完整过程 ✓ 理解流水线的工作原理 ✓ 理解 Cache 的重要性 实践 - 使用 CPU 模拟器如 LC-3 模拟器 - 分析简单程序的 Cache 行为 - 使用 perf 工具观察 Cache 命中率 阶段3理解操作系统第710章 目标理解操作系统如何管理资源 重点 ✓ 理解进程和线程的区别 ✓ 理解虚拟内存的工作原理 ✓ 理解文件系统的基本结构 实践 - 在 Linux 上使用 ps、top 等命令 - 编写简单的多线程程序 - 分析 /proc 文件系统 阶段4综合应用第1113章 目标理解完整的计算机系统 重点 ✓ 理解 I/O 系统的工作原理 ✓ 理解并发编程的挑战 ✓ 理解网络通信的基础 实践 - 编写使用 socket 的网络程序 - 实现简单的生产者-消费者程序 - 分析系统调用的执行过程进阶者路线进阶者推荐学习路线 如果你已经有编程基础可以 快速通过第13章 重点关注你不熟悉的部分 特别注意ISA 设计的权衡RISC vs CISC 深入第46章 重点 ✓ 超标量和乱序执行的实现 ✓ Cache 一致性协议MESI ✓ 内存屏障和内存模型 扩展阅读 - 《计算机体系结构量化研究方法》Hennessy Patterson - Intel 优化手册 深入第710章 重点 ✓ 调度算法的实现细节 ✓ 内存分配器的设计 ✓ 文件系统的日志机制 实践 - 阅读 Linux 内核源码 - 实现简单的内存分配器 - 分析 ext4 文件系统的日志 深入第1113章 重点 ✓ 异步 I/O 和事件驱动编程 ✓ 无锁数据结构 ✓ 分布式系统的一致性 扩展阅读 - 《UNIX 环境高级编程》APUE - 《深入理解计算机系统》CSAPP1.4.4 本书的学习方法有效学习计算机系统的方法 1. 理解而非记忆 ✗ 错误死记硬背 Cache 的参数 ✓ 正确理解为什么需要 CacheCache 如何工作 2. 动手实践 每学完一个概念立即动手验证 学完 Cache 后 # 测试 Cache 对性能的影响 # 顺序访问Cache 友好 for i in range(1000000): arr[i] arr[i] 1 # 随机访问Cache 不友好 for i in random_indices: arr[i] arr[i] 1 # 测量两种方式的时间差异 3. 建立联系 计算机系统的各个部分紧密相连 - 理解 Cache 时联系操作系统的内存管理 - 理解进程调度时联系 CPU 的上下文切换 - 理解文件系统时联系磁盘的物理结构 4. 从问题出发 每个设计都是为了解决某个问题 - 为什么需要 Cache→ CPU 和内存速度差异 - 为什么需要虚拟内存→ 内存隔离和保护 - 为什么需要文件系统→ 数据持久化和组织 5. 使用工具观察 不要只停留在理论用工具观察真实系统 观察 CPU 使用率top, htop 观察内存使用free, /proc/meminfo 观察 Cache 行为perf stat -e cache-misses 观察系统调用strace 观察进程ps, /proc/PID/ 观察文件系统df, du, stat1.4.5 关键概念预览本书将深入讲解的关键概念 硬件相关 ┌─────────────────────────────────────────────────────────┐ │ 概念 │ 重要性 │ ├─────────────────────────────────────────────────────────┤ │ 指令集架构ISA │ 硬件软件接口决定编程模型 │ │ 流水线 │ 现代 CPU 性能的基础 │ │ Cache │ 解决 CPU-内存速度差异的关键 │ │ 虚拟内存 │ 内存管理和保护的基础 │ │ 中断机制 │ 硬件与操作系统交互的桥梁 │ └─────────────────────────────────────────────────────────┘ 软件相关 ┌─────────────────────────────────────────────────────────┐ │ 概念 │ 重要性 │ ├─────────────────────────────────────────────────────────┤ │ 进程与线程 │ 程序执行的基本单位 │ │ 调度算法 │ 决定系统响应性和吞吐量 │ │ 内存分配 │ 程序如何使用内存 │ │ 文件系统 │ 数据持久化的基础 │ │ 同步原语 │ 并发程序正确性的保证 │ └─────────────────────────────────────────────────────────┘ 硬件软件协同 ┌─────────────────────────────────────────────────────────┐ │ 概念 │ 硬件支持 │ 软件实现 │ ├─────────────────────────────────────────────────────────┤ │ 虚拟内存 │ MMU、TLB │ 页表管理 │ │ 进程隔离 │ 特权级、保护位 │ 系统调用 │ │ 中断处理 │ 中断控制器 │ 中断处理程序 │ │ 原子操作 │ 原子指令 │ 互斥锁 │ │ I/O 操作 │ DMA 控制器 │ 设备驱动 │ └─────────────────────────────────────────────────────────┘本章小结节核心内容关键概念1.1 计算机系统概述计算机系统的四大功能处理/存储/传输/控制存储层次结构抽象的重要性数据处理、存储层次、抽象1.2 计算机发展历史四代计算机电子管→晶体管→集成电路→微处理器冯·诺依曼架构摩尔定律冯·诺依曼架构、摩尔定律、ISA兼容性1.3 层次结构7层计算机系统层次物理→电路→数字逻辑→微架构→ISA→OS→应用各层的抽象和接口ISA、流水线、操作系统功能1.4 学习路线本书的组织结构初学者和进阶者的学习路线有效学习方法理解而非记忆、动手实践、建立联系思考题1. 为什么计算机系统需要层次化设计 提示考虑复杂性管理和可维护性 2. 冯·诺依曼架构的存储程序概念有什么革命性意义 提示与早期计算机如 ENIAC的编程方式对比 3. 摩尔定律是否会永远持续 提示考虑物理极限原子大小和量子效应 4. 为什么 ISA 的兼容性如此重要 提示考虑软件投资和生态系统 5. 操作系统如何让多个程序同时运行 提示考虑 CPU 时间片和上下文切换 6. 为什么 Cache 对现代计算机性能如此重要 提示考虑 CPU 和内存的速度差异100倍以上参考文献Umakishore Ramachandran William D. Leahy Jr.,《计算机系统系统架构与操作系统的高度集成》