操作系统:程序进入内存前的链接方式与装入方式

前提知识:

一个用户源程序变成可以在内存中执行的程序,需要进行以下三步:

——编译:由编译程序将用户源代码编译为若干个目标模板。

——链接:由链接程序将编译之后的目标模板以及它们所需要的库函数链接在一起,形成一个装入模板。

——装入:由装入程序将装入模板装入内存。

 

一、程序的链接(三种方式):

①静态链接方式——在程序运行以前,将各个目标模块及它们所需要的库函数,链接成一个完整的装入模块,又可称为可执行文件,通常不再拆开。

使用该方法需要解决两个问题:

  • 问题一:对于目标模板中的相对位置进行修改。在编译程序所产生的的所有的目标模板中,使用的都是相对于本模板起始地址0的相对地址。在连接成为一个装入模板之后,需要把地址更改为相对于装入模板起始地址0的新的相对地址。

  • 问题二:变换目标模板中外部调用符号。将每个目标模板中所用的外部调用符号也都变换为相对于装入模板起始地址0的相对地址。
操作系统:程序进入内存前的链接方式与装入方式_第1张图片 程序连接示意图

 

装入时动态链接——用户源程序经编译后所得的目标模块,在装入内存时,边装入边链接,即在装入一个目标模块时,如果发生一个外部模块调用事件,将引起装入程序去找出相应的外部目标模块,并将它装入内存,进行链接。

  • 优点:①便于修改和更新。②便于实现对目标模块的共享。

 

运行时动态链接——这种链接方式是将对某些模块的链接推迟到执行时才进行。在执行过程中,当发现一个被调用模块尚未调入内存时,立即由操作系统去找到该模块并装入内存,再把它链接到调用者模块上。

  • 凡在执行过程中未使用到的目标模板,都不会调入内存和链接到装入模板上,这样不仅可以提高装入的速度,还可以节省大量的内存空间。

 

二、程序的装入(三种方式):

绝对装入方式(绝对地址与物理地址相同):逻辑地址转换成物理地址的过程发生在程序编译或汇编时, 必须将程序装入到内存固定的位置。

 

可重定位装入方式(静态重定位):逻辑地址转换成物理地址的过程发生在程序装入到内存时进行。装入后地址不能再变,因此程序不能移动。

操作系统:程序进入内存前的链接方式与装入方式_第2张图片 静态重定位示意图

 

动态运行时装入方式(动态重定位):逻辑地址转换成物理地址的过程推迟到程序真正执行时。可以通过重定位寄存器实现。

  • 程序和数据所在存储区的起始地址送入重定位寄存器中。在程序执行时,用逻辑地址加上重定位寄存器中的地址得到相应的物理地址。
操作系统:程序进入内存前的链接方式与装入方式_第3张图片 动态重定位示意图

 

Ending... ... 

你可能感兴趣的:(#,操作系统,操作系统)