操作系统知识整理 - 程序的链接与装入

版权声明: https://blog.csdn.net/Ha1f_Awake/article/details/85388752

主要内容

静态链接(Static Linking)

装入时的动态链接

运行时的动态链接

绝对装入(Absolute Loading)

可重定位装入(Relocation Loading)

运行时的动态装入


 

基本过程

用户程序要在系统中运行,必须先装入内存,然后再转变为可执行程序

1)编译

编译程序(Compiler)用户源程序进行编译,形成若干个目标模块(Object Module)

2)链接

链接程序(Linker)将编译后形成的一组目标模块以及它们需要的库函数链接起来,形成一个可装入模块(Load Module)

3)装入

装入程序(Loader)可装入模块装入内存

链接

静态链接(Static Linking)

在程序运行前完成链接,以后不再拆开。

装入时的动态链接

边装入,边链接。

在装入一个目标模块时,若发生一个外部模块调用事件,装入程序将找到外部目标模块,将其装入内存,修改地址。

运行时的动态链接

将某些模块的链接推迟到程序执行时才进行。

装入

绝对装入(Absolute Loading)

只能将可装入模块装入到内存中事先指定的位置,这只适用于单道程序环境

可重定位装入(Relocation Loading)

多道程序环境中,编译程序不可能预知编译后得到的目标模块(→可装入模块)存放在内存中的位置。采用可重定位装入可以根据内存的具体情况,将可装入模块装入到内存中适当的位置。

装入时对目标程序中指令和数据地址的修改称为重定位。又因为地址变换通常是在装入进程时一次完成的,以后不再改变,故称为静态重定位

运行时的动态装入

装入程序在把装入模块装入内存后,并不立即把装入模块中的逻辑地址转换为物理地址,而是地址转换推迟到程序开始执行时进行

猜你喜欢

转载自blog.csdn.net/Ha1f_Awake/article/details/85388752
今日推荐