1.编译过程
编译系统(compilation system):预处理器(pre-processor)、编译器(compiler)、汇编器(assembler)、链接器(linker)
预处理阶段:处理字符#
开头的命令,即:1)将头文件的内容插入程序文本中。2)宏定义替换。3)条件编译(#if
#ifdef
),不被编译的部分变为空行。4)删除注释
编译阶段:通过编译器将源程序翻译成汇编程序(assembly-language program)
汇编阶段:将汇编程序翻译成机器语言指令,并将其打包成可重定位目标程序(relocatable object program)
链接阶段:链接器将各个.o文件合并成可执行文件。链接器使得分离编译成为可能。在编写大型程序时,可将模块分小,由此达到独立修改和编译不同模块的目的:未被修改的模块不用重新编译,而只需将修改后的模块编译,重新链接即可。e.g. hello.c中的printf函数存在printf.o(已经单独预编译了的目标文件)中,链接器将其合并后得到可执行文件
2.系统的硬件组成
- 总线(buses):通常总线被设计成传送定长的字节块,也就是字。字中的字节数*(字长word size)*,是一个基本的系统参数,大多数机器为4个字节(32位)或8个字节(64位)
- I/O设备(I/O devices):每个I/O设备都通过一个*控制器(controller)或者适配器(adapter)*与