`
飘零羽
  • 浏览: 25547 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

操作系统学习笔记-链接

阅读更多

    对于我们经过信心苦苦开发过后完成的代码往往需要经过编译,汇编,链接之后才能形成可执行的代码。其中链接过程指的是将程序所需要的代码与资源集成到一个可执行文件中的过程。其中链接过程能够发生在编译过程中,加载时和运行时,在这三种情况下的链接过程都有一定的差别。并且这三种链接过程与连接器处理的三种目标文件类型相关,他们分别为可重定位的目标文件,可执行的目标文件和共享的目标文件。下面来详细分析三种链接过程。

    首先对于发生在编译过程中的链接过程,这也是在编码之后经常会用到的链接过程,经过编译之后的文件被组织成了可重定位的目标文件格式。对于每个可重定位的目标文件,代码,数据,声明等信息以分段的形式存储于目标文件中。其中代码存储于代码段中,对应于全局变量或者方法的引用在这里被作为符号存储于符号段中,诸如此类各种信息呗存储于其所对应的段中。链接过程首先要做的便是进行符号的解析。所谓的符号解析过程便是将代码中的全局变量,方法等对应到符号表中的具体符号,以便后期利用符号替换为真正的内存地址。在完成符号的解析过程后便可以进行重定位,首先将各个目标文件的各个分段合并成一个,形成一个单独的可执行目标文件,之后便能够为符号表中的各个符号制定内存地址,这样之后每个全局变量,全局方法都会有自身的内存地址。最后将真实的变量和方法的引用替换为主存储器的地址便完成了整个连接过程,这样在可执行目标文件执行的过程中就能够直接利用主存储器地址运行相应的代码或者读取所需变量的值了。在这过程中不难发现一个问题,既然是先进行编译之后才进行连接,那么对于全局变量或者方法的非本地连接在编译过程中如何处理。编译器采取的策略是利用被称为重定位条目的数据结构在相应的引用处起到一个占位符号的作用,在连接完成之后进行替换。

    在实际的应用中编译过程连接并不能完全满足我们的需要,动态连接共享库在实际应用中广泛使用。人们将常用的功能或者代码编译好之后使之以共享目标文件的形式存在,再将多个共享目标文件打包形成共享库,在编写的代码中只需要引用共享库中的功能,但是在编译连接过程中并不把共享库中的代码连接致可执行目标文件中,而是在可执行目标文件载入内存时根据引用的内容在内存中将共享目标文件载入某个特定段中,这时再利用重定位条目重定位对于共享目标文件的引用,使之能够访问对应的引用,这样在运行时就能完整的完成程序的功能,而且有效的节省了主存储器的空间。这种连接过程便是加载时连接。

    最后一种连接形式更为灵活,那就是在运行时进行连接。运行时连接所涉及到的主要内容便是与位置无关代码,由于已经存在于内存中的程序需要对另一共享目标文件进行引用,然而此时目标文件有可能并未加载至内存,所以自然无法得知引用地址,但这时可以将共享目标文件加载,其内部代码是与位置无关的,所谓的与位置无关指的是代码内任何数据的存储地址与其代码值的差值是固定的,此时仅需维护一个每个变量位置与代码位置差值表,因此仅仅需要根据当前PC值利用这个差值进行一步转换便能够得到真正的目标地址,然而每次访问变量都进行一次转换显然增加了系统的负担,因此系统维护了另外一个变量与其绝对地址的映射表,当第一次访问特定变量之后其绝对地址便会存储致表中,之后的访问只需查找这个映射表即可。

    以上便是对全部连接过程的理解,所需注意的地方便是加载时连接,其连接顺序是根据命令从左向右进行连接,所以共享目标文件一定要在最后,否则会出现连接错误。

 

分享到:
评论

相关推荐

    Java学习笔记-个人整理的

    {7.1}Java的文件系统管理}{103}{section.7.1} {7.2}回调模式与FileFilter}{104}{section.7.2} {7.3}\ttfamily RandomAccessFile}{106}{section.7.3} {7.4}基本类型数据序列化}{108}{section.7.4} {7.5}String的...

    深度探索Linux操作系统:系统构建和原理解析.王柏生(带详细书签).part2.rar

    它颠覆和摒弃了传统的从阅读Linux内核源代码着手学习Linux操作系统原理的方式,而是基于实践,以从零开始构建一个完整的Linux操作系统的过程为依托,指引读者在实践中去探索操作系统的本质。这种方式的妙处在于,让...

    liunx学习笔记记录

    liunx学习笔记.txt内包含百度网盘下载链接 Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一...

    【TakeLionOS第六课】TakeLionOS汇编与C语言自学笔记-第五课.rar

    因为本身就是研究操作系统的一部分,所以要研究底层的汇编语言。 结果发现是AT&T格式的汇编语言风格,而且大量使用汇编宏。 所以启用了GCC的编译选项-fno-asynchronous-unwind-tables,直接预处理为cfi宏的汇编指令...

    JS学习笔记相关代码-测试代码

    JS学习笔记相关文档 Login.html学习 placeholder 属性规定可描述输入字段预期值的简短的提示信息(比如:一个样本值或者预期格式的短描述)。 该提示会在用户输入值之前显示在输入字段中。 注意:placeholder 属性...

    java jdk8 学习笔记

    Java编译语言将Java代码编译成.class文件(只有一种形式),而C/C++语言将代码编译成01码,不同的操作系统的01码指令不同,这造成了不能跨平台,而Java将这个任务交给JVM,不同操作系统上的JVM将.class文件编译成不同...

    learning-linux-mint:Linux Mint学习笔记

    Linux Mint 学习笔记 内容介绍 Linux Mint是一份基于Debian和Ubuntu的 Linux 发行版。其目标是提供一种更完整的即刻可用体验,这包括提供浏览器插件、多媒体编解码器、对DVD播放的支持、Java和其他组件,它也增加了...

    学习笔记之-Linux操作命令

    Linux常用命令学习笔记一、Linux文件及磁盘管理命令 一、Linux文件及磁盘管理命令 1.查看文件信息:ls ls是英文单词list的简写,其功能为列出目录的内容,是用户最常用的命令之一,它类似于DOS下的dir命令。 Linux...

    2009 达内Unix学习笔记

    集合了 所有的 Unix命令大全 ...telnet 192.168.0.23 自己帐号 ...可跨系统操作,冲破操作权限;也是快捷方式。 八、时间显示 date 显示时间,精确到秒 用法 date [-u] mmddHHMM[[cc]yy][.SS] date [-u] [+format] ...

    c#学习笔记.txt

    c#学习笔记(1) 51099在线学习网发布 文章来源:网络收集 发布时间:2006-05-25 字体: [大 中 小] 51099在线学习网 http://www.51099.com 1, 结构(struct) 与 类(class) [attributes] [modifiers] struct ...

    net学习笔记及其他代码应用

    6.如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理? 答 : this.Server.Transfer 7.请编程遍历页面上所有TextBox控件并给它赋值为string.Empty? ...

    计算机操作系统(第三版)

    《计算机操作系统》可作为计算机硬件和软件以及计算机通信专业的本科生教材,也可作为从事计算机及通信工作的相关科技人员的参考书。 目录 第一章 操作系统引论 1.1 操作系统的目标和作用 1 1.1.1 操作系统的...

    2009达内SQL学习笔记

    函数可能会带来系统的不可移植性(可移植性:所编写的代码可以在多个系统上运行)。 加入注释是一个使用函数的好习惯。 大多数SQL实现支持以下类型的函数: 文本处理, 算术运算, 日期和时间, 数值处理。 Null:...

    网络工程师资料学习笔记

    15、卸载不常用组件:XP默认给操作系统安装了一些系统组件,而这些组件有很大一部分是你根本不可能用到的,可以在"添加/删除Windows组件"中将它们卸载。但其中有一些组件XP默认是隐藏的,在"添加/删除Windows 组件...

    Linux运维学习笔记一

    > 在Linux操作系统中,与Windows不同,其文件的类型不是通过扩展名来进行区分的! 我们都知道,Windows 是依赖扩展名区分文件类型的,比如,".txt" 是文本文件、".exe" 是执行文件,但 Linux 不是。 Linux 系统...

    DOS学习笔记

    DOS最大的优点就是一个“小”字,在操作系统动辄以G来衡量容量的今天,DOS三个核心文件只有几百KB,却能提供丰富的文件操作功能,实在是令人无法不爱上它。 “小”带来的一个显而易见的好处就是“快”,正常启动DOS...

    《计算机病毒防治》考试重点/学习笔记

    按照计算机病毒攻击的操作系统分类 3 按照计算机病毒攻击的机型分类 3 按照计算机病毒的链接方式分类 3 按照病毒的破坏情况分类 3 按照计算机病毒的传播媒介分类 3 按照病毒的激发机制分类 4 按照病毒的驻留方式分类...

    vlan学习笔记

    <br>VLAN学习笔记大全(2):VLAN的访问链接 交换机的端口 <br> 交换机的端口,可以分为以下两种: <br> l 访问链接(Access Link) <br> l 汇聚链接(Trunk Link) <br> 接下来就让我们来依次...

    1000行 MySQL 学习笔记,不怕你不会,就怕你不学!

    原文链接: https://shockerli.net/post/1000-line-mysql-note/ Windows服务 -- 启动MySQL net start mysql-- 创建Windows服务 sc create mysql binPath= mysqld_bin_path(注意:等号与值之间有空格) 连接与断开...

    Awk学习笔记和指南

    awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它...下面介绍的awk是以GUN的gawk为例的,在 linux系统中已把awk链接到gawk,所以下面全部以awk进行介绍。

Global site tag (gtag.js) - Google Analytics