- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 数据存储与管理;3.1 概述;3.1 概述;3.1.1 存储系统的结构;3.1.1 存储系统的结构;3.1.2 程序的装入和链接;3.1.2 程序的装入和链接;3.1.2 程序的装入和链接;3.1.2 程序的装入和链接;3.1.2 程序的装入和链接;3.1.2 程序的装入和链接;3.1.2 程序的装入和链接;3.1.2 程序的装入和链接;3.1.2 程序的装入和链接;链接的含义
源程序经过编译后,可得到一组目标模块,再利用链接程序将这组目标模块链接形成装入模块。
链接方式(链接的时机)
静态链接(Static linking)
装入时动态连接(Load-time Dynamic Linking)
运行时动态链接(Runtime Dynamic Linking)
;静态链接
在程序运行之前,先将各目标模块及它们所需的库函数,链接成一个完整的装配模块(又称执行模块),以后不再拆开。
静态链接需要解决的两个问题
相对地址的修改
由编译程序产生的所有目标模块中,使用的都是相对地址,其起始地址都为0,在链接成一个装入模块时修改模块的相对地址。
变换外部引用地址
将每个模块中所用的外部调用符号也都变换为相对地址。;静态链接方式示意图
;静态链接方式的缺点
不利于代码共享
不利于模块的独立升级
可能链接一些不会执行的模块,浪费存储空间和处理机时间。
;装入时动态链接
目标模块在装入内存时,采用边装入边链接的链接方式。
装入时动态链接方式的优点
便于各个模块的独立升级
便于实现模块的共享
装入时动态链接方式的缺点
可能链接一些不会执行的模块,浪费存储空间和处理机时间。
模块装入后不能移动位置;运行时动态链接
对某些目标模块的链接,是在程序执行中需要该目标模块时,由操作系统去找到该模块并将之装入内存,随后把它链接到调用者模块上。
运行时动态链接方式的优点
凡在执行过程中未被用到的目标模块,都不会被调入内存和被链接到装入模块上,这样不仅可加快程序的装入过程,而且可节省大量的内存空间。;装入的任务
将可装入模块装入内存
地址重定位
将执行文件中的逻辑地址转化为内存物理地址的过程。
装入方式分类(地址映射建立方式)
绝对装入方式
可重定位(静???重定位)装入方式
运行时重定位(动态重定位)装入方式
;绝对装入方式
在编译时就知道程序将驻留在内存中的具体位置,编译程序产生绝对地址的目标代码。
绝对装入程序按照装入模块中的地址,将程序和数据装入内存。装入模块在装入内存时,由于程序中的逻辑地址与实际内存地址完全相同,故不需对程序和数据的地址进行修改。
为了便于程序的修改,对编译的程序采用符号地址,然后在编译或汇编时,再将这些符号地址转换为绝对地址。;3.1.2 程序的装入和链接;绝对装入方式的优点
实现简单,无须进行逻辑地址到物理地址的变换。
绝对装入方式的缺点
程序每次必须装入同一内存区;
程序员必须事先了解内存的使用情况,根据内存情况确定程序的逻辑地址;
不适于多道程序系统。;可重定位装入方式
编译时采用相对地址,即编译器假设是装入到从零开始的内存位置。
允许将程序装入与逻辑地址不同的物理内存空间。即程序可以装入到内存的任何位置,其逻辑地址与装入内存后的物理地址无直接关系。
必须进行重定位,即装入程序根据装入的位置将逻辑地址转换为物理地址。
静态重定位技术:地址映射在程序装入时进行,以后不再更改程序地址。;3.1.2 程序的装入和链接;可重定位装入方式的优点
易实现,无需硬件支持。
可重定位装入方式的缺点
程序重定位后就不能移动,因而不能重新分配内存,不利于内存的有效利用。
程序在存储空间中只能连续分配,不能分布在内存的不同区域。
难于共享;运行时重定位(动态重定位)装入方式
程序的地址转换不是在装入时进行,而是在程序运行时动态进行。
运行时动态装入需要硬件支持,即重定位寄存器,用于保存程序在内存中的起始地址。
程序被执行时,通过重定位寄存器内的起始物理地址和指令或数据的逻辑地址计算其物理地址。
;3.1.2 程序的装入和链接;运行时重定位装入方式的优点
程序不必连续存放在内存中,可分散存储,可移动;
便于共享;
有利于紧凑、碎片问题的解决;
主流方式。
缺点
需要硬件支持,实现存储管理的软件算法比较复杂;
同一地址,可能多次转换。;程序装入方法小结
绝对装入-编译时执行: 编译时就知道进程将在内存中的驻留地址,生成绝对代码?即在可执行文件中记录内存地址,装入时直接定位在该内存地址。
如果将来开始地址发生变化,就必须重新编译代码。
可重定位装入(加载时执行:静态地址重定位):地址绑定在装入内存时才进行
文档评论(0)