计算机系统漫游
信息就是位+上下文
程序被其他程序翻译成不同的格式
预处理器、编译器、汇编器、链接器一起构成了编译系统。
- 预处理阶段,预处理器cpp会修改原始的C程序,比如会把
#include <stdio.h>
命令告诉预处理器读取系统头文件stdio.h的内容,并插入程序文本中,得到了另一个c程序,通常以.i为扩展名 - 编译阶段,编译器ccl将.i文件翻译成.s文件,包含一个汇编语言程序。
- 汇编阶段,汇编器as会将.s翻译成机器语言指令,把这些指令打包成一种叫做可重定位目标程序的格式,并将结果保存在目标.o文件中。.o文件是一个二进制文件。
- 链接阶段,链接器ld负责将程序中调用标准库的函数同函数所在的预编译文件进行链接,得到一个可执行的目标文件,此文件可以被加载到内存中,由系统执行。
了解编译系统如何工作是大有益处的
处理器读并解释存储在内存中的指令
系统的硬件组成
- 总线,它携带信息字节并负责在各个部件间传递。
- I/O设备,每个I/O设备都通过一个控制器或适配器与I/O总线相连。控制器是I/O设备本身或系统的主板上的芯片组,适配器是一块插在主板插槽上的卡。
- 主存,是临时存储设备。物理上来说,主存是一组动态随机存取存储器DRAM芯片组成的。从逻辑上说,存储器是一个线性的字节数组,每个字节都有其唯一的地址,地址从零开始。
- 处理器,CPU,是解释或执行存储在主存中指令的引擎,处理器核心是一个大小为一个字的存储设备(寄存器),称为程序计数器PC,任何时刻PC都指向主存中某条机器语言指令。
例子,CPU在指令的要求下可能会执行这些操作:
- 加载:从主存复制一个字节或一个字到寄存器,以覆盖寄存器原来的内容。
- 存储:从寄存器复制一个字节或一个字到主存的某个位置,以覆盖原来的内容。
- 操作:把两个寄存器的内容复制到ALU,ALU对这两个字做算术运算,并将结果放到一个寄存器中,以覆盖该寄存器中原来的内容。
- 跳转:从指令本身中抽取一个字,并将这个子复制到程序计数器PC中,以覆盖PC中原来的值。
执行hello程序
高速缓存至关重要
存储设备形成层次结构
进程
进程是操作系统对一个正在运行的程序的一种抽象。
线程
虚拟内存
- 程序代码和数据
- 堆
- 共享库
- 栈
- 内核虚拟内存
文件
文件就是字节序列。
系统之间利用网络通信
重要主题
并发和并行
- 线程级并发
- 指令级并行
- 单指令、多数据并行