将源程序变成可执行文件需要以下三个步骤。
- 编译,由编译程序(Compiler)对用户源程序进行编译,形成若干个目标模块(Object Module);
- 链接,由链接程序(Linker)将编译后形成的一组目标模块以及它们所需要的库函数链接在一起,形成一个完整的装入模块(Load Module);
- 装入,由装入程序(Loader)将装入模块装入内存。
程序的装入
将一个装入模块装入内存时,可以有如下三种装入方式:
绝对装入式
当计算机系统很小,且仅能运行单道程序时,完全有可能知道程序将驻留在内存的什么位置。此时可以采用绝对装入方式。用户程序经编译后,将产生**绝对地址(即物理地址,存储单元的实际地址)**的目标代码。
可重定位装入方式
绝对装入方式只能将目标模块装入到内存中事先指定的位置,这只适用于单道程序环境。而在多道程序环境下,编译程序不可能预知经编译后所得到的目标模块应放在内存的何处。因此,对于用户程序编译所形成的若干个目标模块,它们的起始地址通常都是从0开始的,程序中的其它地址也都是相对于起始地址计算的。