操作系统_程序的链接

  程序经过编译后,得到一组目标模块(Object
Module),再经过链接程序将这组目标模块链接起来,形成一个完整的装入模块。如图。经过编译后得到三个目标模块A,B,C,它们的长度分别为L,M,N。其中B和C属于外部调用符号。根据链接时间的不同,程序的链接可分为三种方式:静态链接,装入时动态链接,运行时动态链接
 
  

  1:静态链接。在程序运行之前,首先将各个目标模块以及所需要的库函数链接成一个完整的装入模块,又称为可执行文件,运行时可直接将它装入主存。

  2:装入时链接。用户源程序经过编译后得到一组目标模块,在装入主存时,采用边装入边链接分方式,即在装入一个目标模块时,若需要调用另一个模块,则找出该模块,将它装入主存,并修改目标模块的逻辑地址。

  3:运行时动态链接。在很多情况下,由于应用程序每次运行时的条件不同,故需要调用的模块有可能是不相同的。如果将所有目标模块装入主存并链接在一起,就会得到一个非常大的装入模块,其中某些目标模块可能根本就没有条件运行,这样会引起程序装入时间上和主存空间上的浪费。运行时动态链接是指程序执行过程中当需要该目标模块时,才把该模块装入主存并进行链接。

时间: 2024-10-16 00:48:59

操作系统_程序的链接的相关文章

操作系统_程序的装入

我们知道,程序要执行,必须被CPU调用执行,而前提是装入到主存中.所以程序的装入对于操作系统来说,是一件非常重要的工作.要了解程序是如何装入到主存中,我们首先来了解下逻辑地址和物理地址. 主存的存储单元以字节为单位编址,每个存储单元都有一个地址与其对应.假定主存的容量是256M,即256*1024*1024=2^28个字节(256M=256*2^10K=256*2^10*2^10B),则该主存就有2^28个字节的存储空间,起地址编号为0,1,2,----2^28-1.这些地址称为主存的物理地址(

程序的链接和装入及Linux下动态链接的实现

http://www.ibm.com/developerworks/cn/linux/l-dynlink/ 程序的链接和装入及Linux下动态链接的实现 程序的链接和装入存在着多种方法,而如今最为流行的当属动态链接.动态装入方法.本文首先回顾了链接器和装入器的基本工作原理及这一技术的发展历史,然后通过实际的例子剖析了Linux系统下动态链接的实现.了解底层关键技术的实现细节对系统分析和设计人员无疑是必须的,尤其当我们在面对实时系统,需要对程序执行时的时空效率有着精确的度量和把握时,这种知识更显重

【深入理解计算机系统03】程序的链接

第三篇:程序的链接 > 链接器的由来 高级语言出现之后,需要多人开发不同模块. 链接步骤: 1) 确定符号引用关系 确定符号的定义 2) 合并相关.o文件 同一地址空间,安排虚拟地址空间 3) 确定每个符号的地址 4) 在指令中填入新的地址 使用链接的好处: 1. 模块化 2. 提高编译效率和节省内存空间(共享库的复用) 只需要重新编译被修改的源程序文件 > 目标文件格式 分类: 1. 可重定位目标文件:.O文件,地址和数据从0开始 2. 可执行目标文件:可以直接被复制到内存中执行.这里发生了

Breaseman算法绘制圆形|中点算法绘制圆形_程序片段

Breaseman算法绘制圆形|中点算法绘制圆形_程序片段 1. Breaseman算法绘制圆形程序 由于算法的特殊性,限制绘制第一象限部分,其他部分通过旋转绘制. 1 void CCGProjectWorkView::bresenHam_1P4Circle(int radium, const float lineColor[]) 2 { 3 int pointX, pointY, deltD, deltHD, deltDV, direction; 4 pointX = 0; 5 pointY

逻辑运算_三元运算符_程序流程控制

 //逻辑运算符   /*       逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6 .      "&"和"&&"的区别: 单&时,左边无论真假,右边都进行运算:       双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算.       "|"和"||"的区别同理,||表示:当左边为真

转载:ios程序编译链接参数 all_load 的 ld duplicate symbol _main 的 bug及修复

转载自:http://www.cnblogs.com/dabaopku/archive/2012/12/12/2813940.html ios程序编译链接参数 all_load 的 ld duplicate symbol _main 的 bug及修复 问题 -all_load 是在Objective-C 编译时常用到的一个参数,比如这篇文章所介绍的,生成静态库的一些问题-all_load.但是我们在加入这个参数后,有时会出现"ld: duplicate symbol _main"的错误

键值转换--复杂按键事件识别程序(链接层)

复杂按键事件识别程序(链接层) 复杂按键包括多个按键的单按事件.长按事件.连按事件.组合按键事件等 本程序为链接层程序,处理和识别按键驱动层扫描到的按键信息g_u8KeyValue.(g_u8KeyValue的每一位表示一个按键) 单按事件在按下键松开时判定,其它按键情况在达到规定的时间后触发相应按键事件. 宏定义: //宏定义各按键按下时的bit值 #define KEY_EVENT_NULL_CLICK 0x00 #define KEY_EVENT_CLOCK_CLICK 0x01 #def

黑帽seo程序内部链接的分布原理

本文来讲一下内链的分布原理,其实黑帽seo很简单,尤其是当你了解了它的做法原理之后,那么只需要会代码编程就可以实现很多的黑帽seo手法.链接是seo中比较重要的一个内容,今天我们着重讲一下程序内部链接的分布原理. 内部链接指的是网站内的链接,是同一个域名之间的链接,简称内链.如果排除了内容和反链,影响排名的又一因素就是内链,在众多的黑帽SEO程序中,对内部链接都有一个标准.这个标准和正常的网站内链是一样的,如正常网站的栏目页都链接到不同的文章,黑帽SEO程序也是,正常的文章中有相关文章,推荐文章

主机屋----常用程序安装链接数据库教程

常用程序安装链接数据库教程