首页 理论教育 源程序编译链接-操作系统原理-程序链接方式

源程序编译链接-操作系统原理-程序链接方式

时间:2023-10-17 理论教育 版权反馈
【摘要】:源程序经过编译后所得到的目标模块,必须由链接程序将其链接成一个完整的可装入模块后,才能装入内存运行。图6-1程序链接示意图对于目标模块的链接,可以根据链接时间的不同分为以下三种不同的链接方式。上述三种链接方式中,使用较多的是运行时动态链接,这是因为它使某些模块的链接推迟到运行时才进行,这样凡是程序执行过程中未用到的模块都不会装入内存,因此也不会链接到运行模块上。

源程序编译链接-操作系统原理-程序链接方式

源程序经过编译后所得到的目标模块,必须由链接程序将其链接成一个完整的可装入模块后,才能装入内存运行。链接程序在将几个目标模块装配成一个装入模块时,需要解决以下问题。

(1)修改模块的相对地址编译程序产生的各个目标模块中的地址都是相对地址,其起始地址都是0。在将它们链成一个装入模块后,由于各模块不能放入同一段逻辑地址空间,故一些目标模块在装入模块中的起始地址不可能再是0(只能有一个模块的起始地址为0),因此要根据实际情况对模块中的相对地址进行修改。应将图6-1中模块B的所有相对地址都加上k(k为模块A的长度)。

(2)转换外部调用符号。在将目标模块装配成可装入模块时,应将原目标模块中的外部符号转变为相对地址。如应将模块A中的调用模块B(外部符号B)语句(CALL B)改为无条件转移到相对地址k语句(JMP K),如图6-1所示。

图6-1 程序链接示意图

对于目标模块的链接,可以根据链接时间的不同分为以下三种不同的链接方式。(www.xing528.com)

(1)静态链接。程序运行前把源程序编译成的所有目标模块及所需要的库函数链接成一个统一的装入模块,以后不再分开。

(2)装入时动态链接。目标模块的链接是在模块装入内存时进行的,即在模块装入过程中同时完成所有目标模块的链接。

(3)运行时动态链接。将一个目标模块装入内存后就启动运行该目标模块进程,在进程运行过程中如果需要调用其他模块,则将所需调用的模块装入内存并链接到调用模块上,然后进程继续运行。

上述三种链接方式中,使用较多的是运行时动态链接,这是因为它使某些模块的链接推迟到运行时才进行,这样凡是程序执行过程中未用到的模块都不会装入内存,因此也不会链接到运行模块上。显然,这种链接方式不仅可以节省内存空间,而且加快了程序目标模块的装入过程。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈