网站大量收购独家精品文档,联系QQ:2885784924

连接器与加载器都做些什么.docVIP

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
连接器和加载器都做些什么 连接器和加载器都做些什么?地址绑定:一个历史性观点连接VS加载两遍连接目标代码库重定位和代码修正编译器驱动器连接器命令语言连接:一个真实的例子练习连接器和加载器都做些什么?所有连接器或加载器的基本工作都非常多简单:将更加抽象的名字绑定(binding)到更加具体的名字,以允许程式员能使用更加抽象的名字来编写程式。也就是说,他能将程式员写的一个名字如getline绑定到从模块iosys中的可执行代码的开始处定位612字节。或能将一个更加抽象的数值地址如从该模块的静态数据之后定位450个字节绑定到一个具体的数值地址上。地址绑定:一个历史性观点观察连接器和加载器都做什么的一个有用的方法是研究他们在计算机程式系统的研发中所处的地位。最早的计算机程式完全用机器语言编写。程式员将符号化的程式写在纸张上,再将他们汇编为机器代码并将这些机器代码制成计算机中的触发器,或可能将他们打孔到纸带或卡片上。(真正刺激的是直接用开关构成代码。)如果程式员使用了符号地址,程式员必须通过他自己的手动翻译将这些符号绑定到地址上。如果发现一条指令必须被添加或删除,整个程式都必须手动地进行检查并且调整所有受指令添加或删除影响的地址。这里的问题是将名字绑定到地址的时机太早了。汇编器通过让程式员使用符号名字来编写程式,而由汇编器将名字绑定到机器地址来解决这一问题。如果程式发生了变化,程式员只需重新汇编他,而地址分配的工作由程式员转到了计算机。代码库使得地址分配的问题更加复杂。由于计算机能执行的基本操作非常简单,有用的程式通常由子程式组成以执行更高级和更复杂的操作。计算机中通常保存了预先编写好并通过调试的子程式库,这样程式员在编写新程式时就能利用他们,而不是自己编写这些子程式。程式员将这些子程式加载到主程式中就能得到一个完整的工作程式。程式员使用子程式库甚至先于使用汇编器。1947年,主持过ENIAC项目的John Mauchly写了一些能加载从磁带上存储的程式目录中选择的子程式的加载程式,这需要重定位子程式代码来反映他们加载的地址。这也许非常令人吃惊,两个基本的连接器功能?重定位和库有哪些信誉好的足球投注网站,居然先于汇编器出现,因为Mauchly希望程式和子程式都是用机器语言编写的。带重定位的加载器允许自程式的作者和用户在编写每一个子程式时都能假设他们从位置0开始,并且将实际地址的绑定推迟到子程式被连接到一个特定的主程式中时。随着操作系统的出现,带重定位的加载器有必要从连接器和库中分离出来。在操作系统出现之前,每个程式在其处理过程中都拥有机器的整个内存,计算机中的所有地址都是可用的,因此程式能使用固定的内存地址来汇编和连接。但操作系统出现之后,程式必须和操作系统甚至可能是和别的程式共享计算机的内存。这意味着直到操作系统将程式加载到内存中以前是不可能知道程式运行的实际地址的,最终的地址绑定从连接时推迟到了加载时。连接器和加载器目前分割了这个工作,连接器负责部分的地址绑定?在每个程式中分配相关的地址,而加载器完成最终的重定位步骤以分配实际地址。由于系统变得越来越复杂,他们需求连接器完成越来越复杂的名字管理和地址绑定。Fortran程式使用多个子程式和公共块,数据区域由多个子程式共享,他需求连接器来布置存储并为子程式和公共块分配地址。连接器越来越需要对目标代码库进行处理。这既包括用Fortran和其他语言编写的应用库,又包括通过调用已编译的代码来处理I/O和其他高级操作的编译器支持库。程式非常快变得比可用内存还要大,因此连接器提供复用?一种允许程式员协调程式的不同部分来共享相同内存的技术,每个复用都在程式的其他部分调用他们的时候才加载。从1960年左右磁盘出现,到二十世纪70年代中期虚拟存储的推广,存储复用一直广泛应用于大型机;之后在二十世纪80年代早期又再次以完全相同的形式出目前微型机中,最后再二十世纪90年代虚拟存储出目前PC机上之后慢慢隐退。他依然存在于内存有限的嵌入式环境中,并且可能由于考究的程式员或编译器需要控制存储以提高性能而出目前其他地方。随着硬件重定位和虚拟存储的出现,连接器和加载器变得不再复杂,因为每个程式又能获得整个的地址空间了。能按照使用固定地址加载的形式来连接程式,通过硬件而不是软件重定位来处理加载时重定位。不过具有硬件重定位的计算机总是要运行多于一个的程式,常常是个程式的多个副本。当一台计算机运行一个程式的多个实例时,在程式所有的运行实例之间有某些部分是相同的(特别是可执行代码),而其他部分对于每个实例是唯一的。如果不变的部分能从变化的部分中分离出来,操作系统就能只使用不变部分的一个副本,这能节省相当可观的内存。编译器和汇编其变为能用不同的节(section)来建立目标代码,一个节中只放有只读代码,而其他节中放入可写代码,连接器必须能够合并各

文档评论(0)

3471161553 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档