第一章讲的比较浅显, 罗列一下
- 源文件以文本文件的方式保存
- 不同的上下文中, 同一个字节序列表示不同的意思
- 源文件被编译系统编译成目标程序, 供系统上执行
- C语言经过预编译, 编译器, 汇编器, 链接器, 生成目标程序
- 了解编译原理, 可以帮助我们优化程序性能, 理解链接出错, 避免安全漏洞
- 计算机内部包括CPU, 存储器, I/O桥, 外设, 他们之间用总线进行通信
- CPU是个搬运工, 几乎所有的操作都需要CPU参与, 将数据从一个地方搬运到另一个地方
- DMA可以不需要CPU参与, 直接将数据从磁盘运到主存
- 各个设备间访问速度的巨大差异, 导致了缓存的诞生, CPU > L1 Cache > L2 Cache > L3 Cache > 内存 > 磁盘 > 网络
- 操作系统连接应用和硬件, 给应用提供隔离的硬件抽象, 进程, 虚拟存储器和文件
- 任何时刻, CPU只能执行一个进程, CPU在多个进程间切换来模拟多进程, 切换时需要把当前寄存器的值保存起来, 加载另一个进程的上下文信息到寄存器
- 实际上, 一个进程由多个线程组成, 线程间共享上下文的代码和数据资源, 线程与CPU直接对应
- 虚拟存储器使得每个进程都认为只有自己在操作内存, 包含程序代码和数据, 堆, 栈, 共享库, 内核虚拟存储器
- Linux中, 所有I/O都是文件, 包括磁盘, 键盘, 显示器, 网络
- 在计算机的发展历史, 有2个目标, 做的更多, 运行的更快
- CPU单核, 多核, 超线程. 超线程是CPU的一个核同时拥有2套寄存器和高速缓存, 提供2个逻辑线程的抽象
- CPU中使用流水线技术, 可以大大缩短任务的运行周期
- 程序抽象的概念是伟大的, 人脑同时容纳的内容是有限的, 只有通过一层一层的抽象, 屏蔽底层细节, 才能做出更多庞大的系统