三种链接方式以及三种装入方式

提示:独怜幽草涧边生,上有黄鹂深树鸣

文章目录

  • 一.程序的链接
    • 1.静态链接
    • 2.装入时动态链接
    • 3.运行时动态装入
  • 二.程序的装入
    • 1.绝对装入
    • 2.可重定位装入
    • 3.动态运行时装入
  • 三种链接优缺点
  • 三种装入的优缺点


一.程序的链接

1.静态链接

在程序运行之前,把所有的目标模块链接在一起

2.装入时动态链接

在装入内存时,边装入边链接

3.运行时动态装入

在程序的执行过程中,发现某个被调用模块未被装入内存时,立即装入内存,并将其链接到调用模块上

二.程序的装入

1.绝对装入

绝对装入只适合于单道程序设计,用户知道程序将调入内存的什么位置,不需要进行地址的映射。但这对程序员的要求较高,需要完全了解内存的使用情况

2.可重定位装入

适用于多道程序程序设计,会有地址的映射过程,

3.动态运行时装入

如果程序在运行的过程中位置发生变化,那么适合动态运行时装入。作业转入内存后并不立即发生地址映射,到程序执行的时候才进行地址映射。需要重定位寄存器(用来存放程序或数据在内存中的起始地址)的帮助。。这种装入方式为动态可重定位分区分配提供了支持。

三种链接优缺点

源程序经过编译后,可得到一组目标模块,再利用链接程序将这组目标模块链接,形成装入模块。根据链接时间的不同,可把链接分成如下三种,静态链接方式就是将在程序运行之前,先将各目标模块及它们所需的库函数,链接成一个完整的装配模块,以后不再拆开。但是这样也就意味着不能修改或跟新其中某个目标模块,就要求重新打开装入模块。这不仅是低效的,而且有时是不可能的,并且每个应用模块都必须含有其目标模块的拷贝,所以也会导致每一个文件较大,人们就想到了将编译得到的目标模块暂时先不链接,因为可能有的功能块用到的是同一个目标模块,若是等装入内存的时候进行链接不仅方便对模块的修改,而且也稍微节省一点外存空间,
但是在许多情况下,应用程序在运行时,每次要运行的模块可能是不相同的。但由于事先无法知道本次要运行哪些模块,故只能是将所有可能要运行到的模块都全部装入内存,并在装入时全部链接在一起。显然这是低效的,因为往往会有些目标模块根本就不运行。比较典型的例子是作为错误处理用的目标模块,如果程序在整个运行过程中都不出现错误,则显然就不会用到该模块。 近几年流行起来的运行时动态链接方式,是对上述在装入时链接方式的一种改进。这种链接方式是将对某些模块的链接推迟到程序执行时才进行链接,亦即,在执行过程中,当发现一个被调用模块尚未装入内存时,立即由OS去找到该模块并将之装入内存,把它链接到调用者模块上。凡在执行过程中未被用到的目标模块,都不会被调入内存和被链接到装入模块上,这样不仅可加快程序的装入过程,而且可节省大量的内存空间。
但是要注意其实就速度而言静态链接是最快的但是所用的空间较大并且不易修改,运行时动态链接印象执行速度,但是确是最省空间的

三种装入的优缺点

绝对装入在编译的时候就要求内存这一片空间就给我留下了,但是多道程序中这个位置可能已经有数据了,所以也就需要进行迁移,单道程序中因为内存都是它的,它在编译的时候就许诺这个地方就是你的,所以人就想到了一个办法就是等装的时候再看看内存可有一块空闲的区域,若是有此时再许诺给它,若是没有这这样一个连续的区域,则只有通过将数据进行移动,空出一片连续的空间,这也是要消耗大量的资源的,所以somebody想到了一个办法就是既然一个程序的运行并不需要所有的数据都装入内存,只需要部分便可,那就只装部分,然后其中的逻辑地址也不进行修改了,我们再加一个重定位寄存器来结合找物理地址

你可能感兴趣的:(笔记,考研,操作系统,408)