操作系统_内存管理_程序的装入和链接

程序的装入和链接


1.概述

程序要运行,先得为这个程序创建进程。创建进程的第一件事就是将程序和程序需要用到的数据装入内存。由用户编写的源代码如何变成一个存放在内存中的程序?步骤如下:
1. 编译、汇编:将源代码,通过编译程序汇编程序,编译和汇编成若干个目标模块(目标文件)
2. 链接:将若干个目标模块(目标文件)和若干个程序所需库函数,通过链接程序,链接成装入模块(可执行文件)
3. 装入:将装入模块(可执行文件),通过装入程序,装入到内存

该处理步骤流程图:

     编译程序、汇编程序    若干个程序所需库函数+    链接程序                       装入程序
源代码---------------->若干个目标模块(目标文件)----------->装入模块(可执行文件)---------->内存

实际上,上面的流程图省略了一些步骤(编译预处理、编译优化,将其笼统归为编译)。


2.程序的装入

程序在装入内存的时候,按照确定绝对地址时所处的步骤阶段可以将装入模式分为3类:
1. 绝对装入方式
2. 可重定位装入方式
3. 动态运行时装入方式

2.1绝对装入方式

分类依据:在绝对装入方式下,确定绝对地址时所处的步骤阶段为源代码阶段(绝对地址由程序员直接赋予)、汇编代码阶段(经过编译后的代码表现形式)或目标模块(目标文件)代码阶段(经过汇编后的代码表现形式)。相当于,在代码的任何表示形式下都不存在相对地址(不过有符号地址的概念)。
特点:这种装入模式只适用于单道程序环境,不适用于多道程序环境。

2.2可重定位装入方式

分类依据:在可重定位装入方式下,确定绝对地址时所处的步骤阶段为装入阶段,装入模块装入内存后,会立即将其相对地址转换为绝对地址。相当于,程序进入内存后其所有相对地址都会变成绝对地址。
特点:这种装入模式使用适用于多道程序环境。

2.3动态运行时装入方式

分类依据:在动态运行时装入方式下,确定绝对地址时所处的步骤阶段为程序运行阶段,装入模块装入内存后,不会立即将其相对地址转换为绝对地址,而是在程序要真正运行时才进行地址转换。
特点:这种装入模式使得程序可以在内存中移动。


3.程序的链接

按照链接程序将目标模块(目标文件)和程序所需的库函数链接成装入模块(可执行文件)的时间(简单点:链接时间),可以将链接方式分为3类:
1. 静态链接方式
2. 装入时动态链接方式
3. 运行时动态链接方式

3.1静态链接方式

目标模块装入内存之前进行链接,链接成一个装入模块(可执行文件)后不再拆开。

3.2装入时动态链接方式

目标模块装入内存时,边装入边链接。即在装入了一个目标模块后,发现其要调用的目标模块不在内存中,则由装入程序找到相应的外部模块并将其装入内存

相较于静态链接方式的优势:
1. 方便目标模块的修改和更新。
2. 便于实现目标模块的共享。

3.3运行时动态链接方式

程序执行时才将目标模块链接到装入模块中。即在程序的执行过程中,若发现被调用的目标模块未被装入内存时,则操作系统将立即找到该目标模块并将其装入内存,最后将其链接到调用这个目标模块的目标模块上。

较于装入时动态链接方式的优势:
有些目标模块可能并不会被程序执行(错误处理模块),但是装入时动态链接方式会将其链接到装入模块中,这显然是对性能的损害。但是运行时动态链接解决了这个问题。

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值