程序的装入和链接
用户程序变成可执行程序,需要先将其装入内存,一般有三个步骤
- 编译(compile):由编译程序对用户源程序进行编译,形成若干个目标模块(object module)
- 链接(link):由链接程序将目标模块和它们所需的库函数链接在一起,形成一个完整的装入模块(load module)
- 装入(load):由装入程序将装入模块装入内存
1. 程序装入
无需链接的单个目标模块的装入方式有三种
- 绝对装入方式:当计算机系统很小且仅能运行单道程序时,编译程序能够预测程序将驻留的内存地址,可在编译后产生物理地址的目标代码。
- 可重定位装入方式:用户程序编译所形成目标模块的起始地址通常为0,程序中的其他地址也相对于起始地址计算;装入后将逻辑地址平移至物理地址,且不可改变。
- 动态运行时的装入方式:把模块装入内存后,所有地址都是逻辑地址,等程序真正执行时才将逻辑地址转换为物理地址。
2. 程序链接
根据链接时间不同,分为三种方式
- 静态链接:在程序运行前将各目标模块及它们所需的函数库链接成一个完整的装配模块(即可执行文件),将相对地址和外部调用符号都修改成可执行文件的相对地址,不再拆开。
- 装入时动态链接:在目标模块装入内存时,若发生一个外部调用,则同时装入相应的外部目标模块(目标模块可共享),并修改目标模块的相对地址。
- 运行时动态链接:仅当程序执行时才将被调用的模块装入内存。
3. ChangeLog
2018.08.29 初稿