CSAPP学习笔记 第一章 计算机系统漫游
Ch 1.0
1.计算机系统是由硬件和系统软件组成的
2.本书阐述了计算机组件是如何工作的以及执行组件是如何影响程序正确性和性能的。
3.通过跟踪hello程序的生命周期来开始对系统的学习。
#include <stdio.h>
int main() {
printf("Hello World\n");
return 0;
}
Ch 1.1 信息就是 位+上下文
1.hello程序的生命周期始于源程序;源程序是由一系列的位序列组成的,8个位被组织成一组,称为字节;每个字节表示程序中的某些文本字符;hello.c程序是以字节序列的方式存储在文件中的。
2.只由ASCII字符组成的文件称为文本文件,所有其他文件称为二进制文件。
Ch 1.2 程序被其他程序翻译成不同的格式
1.每条C语言指令都必须被其他程序转化为一系列的低级机器语言指令。
2.编译系统:
一个现代编译器的主要工作流程如下:
源代码(source code)→ 预处理器(preprocessor)→ 编译器(compiler)→ 汇编程序(assembler)→ 目标代码(object code)→ 链接器(Linker)→ 可执行文件(executables)
对应至Hello程序:
hello.c => cpp => hello.i(修改了的源程序) => ccl => hello.s(汇编) => as => hello.o(二进制程序) + printf.o => ld => hello(executable)
Ch 1.3 了解编译系统如何工作是大有益处的
为什么要了解编译系统?
1.优化程序性能
2.理解链接时出现的错误
3.避免安全漏洞
Ch 1.4 CPU读并解释存储在内存中的指令
1.4.1 系统的硬件组成
- Bus总线
传送定长的字节块(字,word)
- I/O设备
I/O设备是系统与外界世界的联系通道;
通过一个控制器或者适配器与I/O相连
- 主存
临时存储设备,由一系列动态随机存取存储器DRAM组成;
逻辑上来说,存储器是一个线性的字节数组
- 处理器CPU
解释和执行存储于主存中指令的引擎;
处理器的核心是程序计数器(Program Counter, PC),PC记录主存中机器指令的地址;
系统运作时,处理器一直不断地执行PC指向的指令,再更新PC,使其指向下一个地址;
处理器的工作模型:指令集模型,围绕着主存、寄存器文件、算术/逻辑运算单元(ALU)进行。
处理器指令集架构和处理器微体系架构的区别:1)指令集架构描述每条机器指令的效果;2)处理器微体系架构描述的是处理器实际如何处理。