1.1 信息就是位+上下文
-
信息的两大要素:位 、上下文
例如:
-
在一串数字中,0x90表示154
-
在一串机器码中,0x90表示nop指令
-
在 一串字符串中,0x90表示一个特殊的字符
-
1.2 一个c程序的编译流程
- 注:存在两种汇编语法:intel汇编和AT&T汇编,其中intel汇编主要是windows、dos系统使用 而AT&T汇编主要是unix、linux、macos系统使用。csapp中的汇编程序采用的是后者AT&T汇编
1.3 了解编译系统的好处
- 优化程序性能,比如switch语句是否总是比if-else语句高效吗?指针引用比数组索引更有效吗?
- 理解链接时发生的错误 比如:静态变量与全局变量的区别,静态库与动态库的区别
- 避免安全漏洞
1.4 处理器读和解释内存中命令的原理
- 系统的硬件组成
- 总线:携带信息字节在各部件中传输
- I/O设备:系统与外界联系的通道
- 主存:用一组dram组成,用来存放程序以及程序运行中的数据
- 处理器:解释执行指令的引擎
1.5 高速缓存
-
引入:处理器与主存之间的速度差异
-
存储器的层次结构图
1.6 操作系统中的抽象
- 文件是对io设备的抽象
- 虚拟内存是对主存以及磁盘io的抽象
- 进程是对处理器、主存、io设备的抽象
1.7 操作系统中的几个概念
-
上下文切换:操作系统实现进程间切换的机制
-
上下文:跟踪进程运行所需的所有状态信息
-
内核:操作系统代码常驻内存的部分 注:内核并不是一个独立的进程,而是管理全部进程所用代码和数据结构的集合
1.8 进程的虚拟内存空间
由低地址往上:
-
程序代码和数据区:可执行目标文件初始化的区域,运行时就被指定了大小
-
堆:当调用malloc和free等标准库函数时,堆区大小可动态扩大和缩小
-
共享库:存放类似c标准库这样的共享库代码和数据区域
-
栈:编译器用其实现函数调用,大小是动态的
-
内核虚拟内存:位于地址空间顶部,为内核保留 不允许应用程序读写
1.9 重要主题
1.9.1 Amdahl定律
- 描述了改善任何过程的一般原则
- 主要观点:要想加速整个系统,必须提升系统中相当大的部分的速度
1.9.2 并发和并行
- 超线程:超线程(hyper-threading)其实就是同时多线程(simultaneous multi-theading),是一项允许一个CPU执行多个控制流的技术
- 超标量处理器:可以达到一个周期一条指令更快的执行速率
- SIMD并行(单指令 多数据):允许一条指令产生多个可以并行执行的操作
参考链接