链接与加载[参归纳.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第 1 章 链接和加载 $Revision: 2.3 $ $Date: 1999/06/30 01:02:35 $ 链接器和加载器做什么? 任何一个链接器和加载器的基本工作都非常简单 : 将更抽象的名字与更底层的名字绑 定起来,好让程序员使用更抽象的名字编写代码。也就是说,它可以将程序员写的一个诸如 getline 的名字绑定到“ iosys模块内可执行代码的 612 字节处”或者可以采用诸如“这个 模块的静态数据开始的第 450 个字节处”这样更抽象的数字地址然后将其绑定到数字地址上。 地址绑定:从历史的角度 一个有助于深入理解链接器和加载器做了什么的方法就是看看他们在计算机编程系统 的发展中承担了什么角色。 最早的计算机完全是用机器语言进行编程的。程序员需要在纸质表格上写下符号化程 序,然后手工将其汇编为机器码,通过开关、纸带或卡片将其输入到计算机中(真正的高手 可以在开关上直接编码)。如果程序员使用符号化的地址,那他就得手工完成符号到地址的 绑定。如果后来发现需要添加或删除一条指令,那么整个程序都必须手工检查一遍并将所有 被添加或删除的指令影响的地址都进行修改。 这个问题就在于名字和地址绑定的过早了。汇编器通过让程序员使用符号化名字编写 程序,然后由程序将名字绑定到机器地址的方法解决了这个问题。如果程序被改变了,那么 程序员必须重新汇编它,但是地址分配的工作已经从程序员推给计算机了。 代码的库使得地址分配工作更加复杂。由于计算机可以执行的基本操作极其简单,有 用的程序都是由那些可以执行更高级、更复杂操作的子程序组成的。计算机在安装时都带有 一些预先编写好、调试好的子例程库,程序员可以将它们用在自己写的新程序中,而不需编 写所有的子程序。然后程序员可以将这些子例程加载到主程序中以构成一个完整的可以工作 的程序。 程序员们甚至在使用汇编语言之前就使用子程序库了。在 1947年,领导 ENIAC项目的 John Macuchly ,就写文章描述 了如何将主程序和 磁带中一系 列选 定的子程序一起加载到计 算机中,并通过将子程序代码重定 位 以反映实际 被加载的地址。 鉴 于 Mauchly 认为程序和子 程序都是由机器语言编写的, 因此我 们可 能会惊奇 的发现,甚至在汇编语言 出现之前,链接 器的 两个基本 功能重定 位和库查 询就已经 出现了。可重定 位 的加载器 允许 子例程的作者或用 户在编写子例程时 认为它们都起始于地址 0 ,并将实际 的地址绑定 延迟 到这些例程被链接到 某个特 定的程序中时。 随着操作系统的 出现,有必要将可重定 位 的加载器从链接器和库中分 离出 来。在有操 作系统之前,一个程序可以 支配机器所有的内 存 ,由于 知道 计算机中所有的地址都是可用的, 因此它 能 以固定的内 存 地址来汇编和链接。但是有了操作系统以后,程序就必须和操作系统 甚至其它程序 共享 计算机的内 存 。这意味着 在操作系统将程序加载到内 存 之前是 无法确定程 序运行的 确切 地址的,并将最 终 的地址绑定从链接时推 延到了加载时。现在链接器和加载器 已经将这个工作 划分开了,链接器 对每 一个程序的 部分地址进行绑定并分配 相对 地址,加载 器完成最后的重定 位步骤 并赋予 的实际 地址。 随着计算机系统变得 越 来愈复杂,链接器被用来做了更 多、更复杂的名字 管理和地址 绑定的工作。 For t r an 程序使用了 多个子程序和 公共块(被 多个子程序 共享 的数据 区域 ), 而它是由链接器来为这些子程序和 公共 数据块进行 存储布局 和地址分配的。 逐渐 地链接器 还 需要处理目 标代码库。 包括 用 For t r an 或其它语言编写的 应 用程序库,并 且 编译器也 支持 那 些可以从被编 译好的处理 I/ O或其它高级操作的代码中 隐含调用的库。 由于程序 很快就变得 比可用的内

文档评论(0)

朱素云 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档