[toc]
1.1信息就是位+上下文
- 源程序 hello.c 是位(比特序列),8 位一组称字节
- ASCII码,一个字节大小整数(2^8^-1 = 255)表一字符,只有ASCII码字构成 称“文本文件”,其他文件都称 “二进制文件”。
1.2程序翻译
C语句 → 低级机器语言指令 →^可执行目标程序打包^ → 二进制磁盘文件
gcc -o hello hello.c
1.3为何要了解编译系统
- 优化程序性能
- 理解链接时出现的错误
- 避免安全漏洞
1.4处理器读解内存指令
- 运行磁盘的可执行文件
./hello
1.4.1系统硬件
- 总线:贯穿系统的电子管道i,携带字(word)(字节块),例:字长4个字节的电脑就是32位的。
- I/O设备 → 控制器(主板上)、适配器(插卡)→ I/O总线
- 主存:物理:一组动态随机存取存储器(DRAM)芯片组成。逻辑:一个线性字节数组(索引)即每个字节都有其唯一的地址(数组索引)。
- 处理器(CPU)
- 程序计数器(PC):大小一个字,任一时刻,PC中存的地址指向主存中的某条机器语言指令(不一定相邻)。
- 寄存器文件:一些单字长的寄存器组成。
- ALU:算术/逻辑单元,计算新的数据和地址值。
1.4.2运行hello程序
- shell读取hello:键盘→I/O桥→总线→寄存→I/O桥→主存 回车后加载到主存,运行可执行文件hello。
- 将所需的代码和数据从磁盘复制到主存(直接存储器存取技术(DMA)):磁盘→^磁盘控制器^I/O桥→主存
- 显示:主存→总线接口→寄存器→总线接口→I/O桥→图形
1.5高速缓存至关重要
高速缓存存储器(cache memory),L1、L2,静态随机访问存储器(SRAM)技术。
1.6存储层次
1.7操作系统管理硬件
操作系统抽象表示
1.7.1进程
CUP交错执行(多核并发)进程,称为上下文(进程所有状态信息)切换(系统内核(kernel)管理)、
1.7.2线程
一个进程可有多个线程
1.7.3虚拟内存
每个进程都独占主存的假象,虚拟地址空间,地址从小到大:程序代码和数据→堆→共享库→用户栈→内存虚拟内存
1.7.4文件
文件:字节序列,提供统一的视图
1.8 系统间网络通信
主存→网络适配器
1.9重要主题
1.9.1Amdahl定律
定义:我们对系统的某个部分加速时,其对系统整体性能的影响取决于该部分的重要程度。 加速比:
点击展开
>S = $\frac{T~old~}{T~new~}$ = $\frac{T~old~}{(1-\alpha)T~old~ + (\alpha *T~old~)/k}$ = $\frac{1}{(1 - \alpha) + \alpha/k}$ >$\alpha$:即为重要程度(某部分占总体)(某部分执行所用时间占总执行时间) k:性能提升比例,如速度由100m/s提升到150m/s,则k = $\frac{150}{100} = 1.5$ <1.9.2并发和并行
并发(concurrency):同时具有多个活动的系统 并行(parallelism) :用并发是系统运行的更快
点击展开
>1. 线程级并发 以往:单个进程不断切换 现在:多核**超线程(simultaneous multi-threading)** $\left \{\begin{matrix} 常规处理器:20 000个时钟周期切换 \\ 超:单个周期内选择线程执行,四核每核执行2线程的话,就四核八线程(i7) \end{matrix}\right.$-
指令级并行 同时执行多条指令,每阶段执行指令的不同部分,阶段可以并行操作 超标量处理器(superscalar):比一周期一指令更快
-
单指令、多数据并行(SIMD并行) 允许一条指令产生多个可以并行执行的操作
1.9.3抽象的重要性
执行模型一致,不同处理器可以执行同样的机器码(性能会不同) 抽象出虚拟机:操作系统、处理器、程序
Compilation System: