深入理解计算机系统(CSAPP)读书笔记:系统架构与信息表示
Executive Summary
核心观点(金字塔原理)
结论先行: 计算机系统是硬件与系统软件协作运行应用程序的整体,理解其层次结构和抽象机制是深入掌握系统原理的关键。
支撑论点:
- 存储器层次结构通过缓存机制平衡速度与成本,CPU寄存器到磁盘形成金字塔式架构
- 操作系统提供三大核心抽象:文件(I/O设备)、虚拟内存(主存+磁盘)、进程(处理器+主存+I/O)
- 信息表示采用三种数字编码:无符号编码、补码编码、浮点数编码
SWOT 分析
| 维度 | 分析 |
|---|---|
| S 优势 | 系统性梳理CSAPP核心章节,覆盖从硬件到软件的完整知识体系 |
| W 劣势 | 部分章节标记为TODO,内容尚未完善;缺少实践代码示例 |
| O 机会 | 适合作为系统学习的框架索引,可逐步补充深入细节 |
| T 威胁 | 知识点较为分散,需要结合原书进行深度理解 |
适用场景
- 系统性学习计算机体系结构的入门指南
- 面试前快速回顾计算机系统核心概念
- 理解程序从源码到执行的完整链路
第1章 计算机系统漫游
- 小结:计算机系统是由硬件和系统软件组成的,它们共同写作以运行应用程序。 计算机内部的信息被表示为一组组的位,它们依据上下文有不同的解释方式。程序被其他程序翻译成不同的形式。 开始时是ASCII文本,然后被翻译器和链接器翻译成二进制可执行文件。 处理器读取并解释存放在主存里二进制指令。因为计算机花费了大量的时间在内存,I/O设备和CPU寄存器之间复制 数据,所以将系统中的存储设备划分成层次结构–CPU寄存器在顶部,接着是多层的硬件高速缓存存储器,DRAM主存和磁盘存储器 。在层次模型中,位于更高层的存储设备比低层次的存储设备更快 ,单位比特造价也更高。层次结构中较高层次的存储设备可以作为比较低层次设备的高速缓存。 操作系统内核是应用程序和硬件之间的媒介。它提供三个基本抽象:1,文件是对I/O设备的抽象 2.虚拟内存是对主内存和磁盘的抽象。3. 进程是处理器,主存和I/O设备的抽象。最后网络提供了计算机系统之间通信的手段,从特殊的角度来看,网络就是一种I/O设备。
- Amdahl定律
第一部分 程序结构和执行
第2章 信息的表示和处理
- 三种最重要的数字表示:无符号编码基于传统的二进制表示法,表示大于或者等于零的数字。补码编码是表示有符号整数的最常见的方式,有符号整数就可以为正或者为负的数字。浮点数编码是表示实数的科学计数法的以2为基数的版本。
- 信息的存储:8bit的块就是一个字节。每个程序对象简单理解为一个字节块,程序本身就是一个字节序列。
- 字数据大小:字长表示指针数据的标称大小,因为虚拟地址是以这样的字一个字来编码的。所以字长决定的最重要的系统参数就是虚拟地址空间的最大大小。
- 寻址和字节顺序:这个对象的地址是什么,以及在内存中如何排列这些字节。大端,小端
第3章 程序的机器级表示
- gcc - S hello.c //产生汇编文件hello.s gcc -C hello.c //产生目标代码文件,hello.o objdump -d hello.o //反汇编
- 数据格式:x86-64 使用 b(byte=1字节), w(word=2), l(long/double word=4), q(quad word=8) 后缀区分操作数大小
- 寄存器:16个通用寄存器(%rax~%r15),%rsp 栈指针;函数前6个整型参数通过 %rdi, %rsi, %rdx, %rcx, %r8, %r9 传递
- 控制流:条件码(CF/ZF/SF/OF)由
cmp/test指令设置,je/jne/jg/jl根据条件码跳转 - 过程(函数调用):
call压入返回地址并跳转,ret弹出返回地址返回;栈帧保存局部变量和被调用者保存寄存器 - 数组与结构体:数组通过基址+偏移量访问
(%rdi, %rsi, 4);结构体成员按声明顺序排列,需考虑内存对齐(alignment)