分享

程序怎么在系统中运行,详细解读程序在系统中的装入和链接

 紫微o太微o天市 2019-02-27

我们平时运用计算机,主要就是使用用户程序,而用户程序要在系统中运行,必须将它装入内存,然后转换成一个可执行的程序。步骤如下:编译,由编译程序对用户源程序进行编译,形成若干个目标模块。链接,有链接程序将编译后形成的一组目标模块以及它们所需要的库函数链接在一起,形成一个完整的装入模块。装入,由装入程序将装入模块装入内存。

程序的链接,源程序经过编译后,可得到一组目标模块。而链接程序的功能就是将这组目标模块以及它们所需要的库函数装备成一个完整的装入模块。而连接方式又可分为三种。

程序怎么在系统中运行,详细解读程序在系统中的装入和链接

静态链接方式,在程序运行前先将目标模块以及它们所需的库函数链接成一个完整的装配模块,不过需要解决两个重要问题:对相对地址进行修改,在编译程序所产生的所以目标模块中,使用的都是相对地址,起始地址都为0,每个模块中的地址都是相对于起始地址计算的。所以就需要对后面模块的地址加上它自身的长度,在后面的模块依次累加。变换外部调用符号,将每个模块中所用的外部调用符号也都变换为相对地址。我们通常将这种事先链接而不拆开的链接方式称为静态链接方式。

程序怎么在系统中运行,详细解读程序在系统中的装入和链接

装入时动态链接方式,将用户源程序编译后所得到的一组目标模块装入内存时,采用边装入边链接方式。即在装入一个目标模块时,若发生外部模块调用事件,将引起装入程序去找出相应的外部目标模块,并将它装入内存。这种方式具有两点优势:

便于修改和更新,对于静态链接装配在一起的装入模块,如果需要修改或更新其中的某个目标模块,要求重新打开装入模块。而动态链接时的各个目标模块时彼此分开的,所以更新或修改是件非常容易的事。

便于实现对目标模块的共享,在采用静态链接方式时,每个应用模块都必须含有其目标模块的拷贝,而动态链接方式可以将一个目标模块链接到几个应用模块上。

运行时动态链接方式,就是在执行过程中,当发现一个被调用模块尚未装入内存时,立即由OS去找到该模块,并将之装入内存,将其链接到被调用者模块上。未使用到的目标模块都不会被调入内存和被链接到装入模块上,不仅能加快程序的装入过程,而且可以节省大量的内存空间。

程序怎么在系统中运行,详细解读程序在系统中的装入和链接

而链接完成后的模块,我们就需要将他装入内存了。程序装入到内存,也有如下三种方式:

绝对装入方式,用户程序经编译后,将产生绝对地址的目标代码,绝对装入程序便可按照装入模块中的地址,将程序和数据装入内存。由于程序中的相对地址与实际内存地址完全相同,故不需要进行数据和地址的修改。

可重定位装入方式,由于现代计算机大多数是在多程序环境下运行的,编译程序不可能预知经编译后所得到的目标模块应放在内存何处,因此编译形成的若干目标模块中,它们的起始地址都是从0开始的,其他地址都是相对于起始地址计算的。而这种方法,它可以根据内存的具体情况将装入模块装入到内存的适当位置。这种在装入时对目标程序中指令和数据地址的修改过程称为重定位,而地址编会通常在进程装入时一次完成,以后不再改变,故被称为静态重定位。

程序怎么在系统中运行,详细解读程序在系统中的装入和链接

动态运行时的装入方式,动态运行时的装入程序在把装入模块装入内存后,并不立即把装入模块中的逻辑地址转换为物理地址,而是把这种地址转换推迟到程序真正要执行时才进行。

用户程序转换成可以执行的程序的过程大概如此,下一篇文章就会介绍关于程序在内存中的分配空间。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多