序言
- 学习计算机系统的内部运作,以期望写出更好的程序。
- 学习系统最有效的方法就是do,在真正的系统上解决问题,编写和运行程序。
- 先略过数学细节,获得高层次(整体轮廓),然后可以在回头推导数学证明。
C语言源程序至可执行程序
hello.c -> hello.i -> hello.s -> hello.o -> hello可执行程序
- 预处理:预处理器处理源程序文件hello.c,引入如 #include<studio.h>头等。
- 编译:编译器将hello.i,翻译为汇编指令hello.s。
- 汇编:汇编器将hello.s,翻译为机器指令hello.o。
- 链接:链接器链接或合并用到的公共函数。
系统硬件组成
- 总线:计算机各个组件之间传递数据的桥梁,通常总线被设计为传输单位为定长字节。
- I/O设备:键盘、鼠标(输入) 显示器(输出)等。
- 主存:DRAM芯片组成,可看作线性的大字节数组。(磁盘、光盘、磁带等同)
- CPU:
- 程序计数器:保存CPU将要执行的下一条指令地址。
- 寄存器:保存一些计算过程中的中间变量。
- 高速缓存:l1、l2、l3 cache等。
POSIX标准
IEEE(电气和电子工程师协会)规定了标准化的Unix开发,后来由Richard Stallman命名为"Posix"。
这套标准涵盖了很多方面,比如Unix系统调用的C语言接口、shell程序和工具、线程及网络编程等。
这些标准化工作的结果是Unix Distribution之间的差异已经基本消失。
Amdahl定律
Amdahl定律描述了改善任何过程的一般原则。
以计算机系统中的应用程序为例,若某个应用程序执行的时间为,现将该程序的
比例其性能提升
倍。
则有= (1-
)
+ (
) /
,由此可得
加速比: =
/
=
并行
- 线程级并行:超线程,允许一个CPU执行多个控制流。(Intel core i7处理器每个核心可以同时执行两个线程)
- 指令级并行:处理器一个周期可执行的指令
多于一条
,又称作超标量。 - 单指令多数据并行:SIMD并行,单条指令可并行操作多条数据。
网友评论