以下内容参考自data whale 组队学习
编译系统
1 怎么工作?
以C语言为例,你看到的以及背后的:


其中,汇编部分指的是将汇编程序翻译成机器指令,并按照固定的规则打包成二进制文件(还不可执行)
2 了解它有什么作用?
底层、复杂,那我们为什么还需要了解它:知其所以然
1. 优化程序性能
2. 理解链接过程出现的错误
3. 避免安全漏洞
系统硬件组成

程序执行流程
输入,命令解释程序(如shell)读入寄存器、内存-->数据代码复制到内存--> 代码执行,输出
涉及:磁盘、内存、处理器、IO设备,由此引出下一个问题:存储设备的利用、缓存
对于处理器而言,从磁盘上读取一个字所花费的时间开销比从内存中读取的开销大 1000 万倍。寄存器文件的只能存储几百个字节的信息,而内存的可以存放几十亿的 字节信息(GB 级),从寄存器文件读取数据比从内存读取差不多要快 100 倍。
所以:系统设计人员在寄存器文件和内存之间引入了高速缓存。
操作系统
应用程序和硬件之间的中 间层,所有的应用程序对硬件的操作必须通过操作系统来完成。

其中,我们常听的概念:
* 进程是对处理器、内存以及 IO 设备的抽象。(多个线程组成,每个线程都运行在进程的上下 文中,共享代码和数据)
* 虚拟内存是对内存和磁盘 IO 的抽象(程序代码数据-> 堆-> 共享库-> 用户栈-> 不可见区);
* 文件是对 IO 设备的抽象(Linux 系统的哲学思想是:一切皆为文件。);
并发和并行
1 线程级并发:当一个线程因为读取数据而进入等待状态时,CPU 可以去执行另外一个线程,其中线程之间的切换只需要极少的时间代价.
2 指令级并行:现代处理器可以同时执行多条指令的属性
3 单指令多数据并行:现代处理器拥有特殊的硬件部件,允许一条指令产生多个并行的操作
附录
系统加速几个定律
阿姆达尔定律 (Amdahl’s Law, 1967)
记 α ∈ [0, 1] 是某任务无法并行处理部分所占的比例. 假设该任务的工作量固定,则1对任意 n 个处理器,相比于 1 个处理器,能够取得的加速比满足:S(n) < α .
古斯塔法森定律 (Gustafson’s Law, 1988)
记 α ∈ [0, 1] 是某任务无法并行处理部分所占的比例. 假设该任务的工作量可以随着处理器个数缩放,从而保持处理时间固定. 则对任意 n 个处理器,相比于 1 个处理器,能够取得的加速比 S (n) 不存在上界.
孙-倪定律 (Sun-Ni’s Law, 1990)
记 α 是某任务无法并行处理部分所占的比例. 假设该任务的可并行部分随着处理器个数 n 按照因子 G(n) 缩放,则对任意 n,相比于 1 个处理器,能够取得的加速比 S∗(n) 满足S∗(n) = ( α + (1 − α)G(n) ) / ( α + (1 − α)G(n)/n )