版权声明: https://blog.csdn.net/Ha1f_Awake/article/details/85388752
主要内容
基本过程
用户程序要在系统中运行,必须先装入内存,然后再转变为可执行程序。
1)编译
由编译程序(Compiler)对用户源程序进行编译,形成若干个目标模块(Object Module);
2)链接
由链接程序(Linker)将编译后形成的一组目标模块以及它们需要的库函数链接起来,形成一个可装入模块(Load Module);
3)装入
由装入程序(Loader)将可装入模块装入内存。
链接
静态链接(Static Linking)
在程序运行前完成链接,以后不再拆开。
装入时的动态链接
边装入,边链接。
在装入一个目标模块时,若发生一个外部模块调用事件,装入程序将找到外部目标模块,将其装入内存,修改地址。
运行时的动态链接
将某些模块的链接推迟到程序执行时才进行。
装入
绝对装入(Absolute Loading)
只能将可装入模块装入到内存中事先指定的位置,这只适用于单道程序环境。
可重定位装入(Relocation Loading)
在多道程序环境中,编译程序不可能预知编译后得到的目标模块(→可装入模块)存放在内存中的位置。采用可重定位装入可以根据内存的具体情况,将可装入模块装入到内存中适当的位置。
装入时对目标程序中指令和数据地址的修改称为重定位。又因为地址变换通常是在装入进程时一次完成的,以后不再改变,故称为静态重定位。
运行时的动态装入
装入程序在把装入模块装入内存后,并不立即把装入模块中的逻辑地址转换为物理地址,而是把地址转换推迟到程序开始执行时进行。