精华内容
下载资源
问答
  • 移动某些已分配区的内容,使所有进程的分区紧凑在一起,而把...采用紧凑技术的可变分区法称为动态重定位分区法。该论文为学校学期期末小论文,格式并非标准论文格式。部分资源来源于网络,若有侵权请联系作者删除!
  • 静态重定位和动态重定位

    万次阅读 多人点赞 2018-06-04 18:50:31
    区别这两个概念之前,要知道 重定位 的概念。重定位,通常来说把在装入时对目标程序中指令和数据地址修改的过程称为重定位。...各个用户进程很难共享内存中同一程序的副本动态重定位:动态运行的...

    区别这两个概念之前,要知道 重定位 的概念。

    重定位,通常来说把在装入时对目标程序中指令和数据地址修改的过程称为重定位。

    静态重定位就是,在逻辑地址转换为物理地址的过程中,地址变换是在进程装入时一次完成的,以后不再改变。

    优点是无需增加硬件地址转换机构,便于实现程序的静态连接。在早期计算机系统中大多采用这种方案。 

    缺点:内存空间不能移动;各个用户进程很难共享内存中同一程序的副本

    动态重定位:动态运行的装入程序把转入模块装入内存之后,并不立即把装入模块的逻辑地址进行转换,而是把这

    种地址转换推迟到程序执行时才进行,装入内存后的所有地址都仍是逻辑地址。这种方式需要寄存器的支持,其中

    放有当前正在执行的程序在内存空间中的起始地址。

    优点:内存空间可以移动;各个用户进程可以共享内存中同一程序的副本。

    缺点增加了机器成本,而且实现存储管理的软件算法比较复杂。 

    展开全文
  • 地址重定位:静态重定位和动态重定位

    万次阅读 多人点赞 2014-09-19 09:33:13
    地址重定位就是操作系统将逻辑地址转变为物理地址的过程。。。也就是对目标程序中的指令和数据进行修改的过程 将逻辑地址空间重定位到物理地址空间的时机有三种:  1、程序编译连接时。  2、程序装入内存...

    地址重定位就是操作系统将逻辑地址转变为物理地址的过程。。。也就是对目标程序中的指令和数据进行修改的过程

    将逻辑地址空间重定位到物理地址空间的时机有三种:

      1、程序编译连接时。

      2、程序装入内存时。

      3、程序执行时。


    以下内容转自:http://bbs.pediy.com/showthread.php?t=76876

      在这之前我一直对地址重定位的细节不是很了解。以下文章摘自《操作系统原理DOS篇(第二版)》。是我目前看过的关于重定位的最好的文章。与大家分享 一下。
      以下介绍程序是如何装入内存,从而变成在计算机内可执行的形式的。
      在用汇编语言或高级语言编写的程序中,是通过符号名来访问子程序和数据的,我们把程序中符号名的集合叫做“名字空间”。汇编语言源程序经过汇编,或者高级语言源程序经过编译,得到的目标程序是以“0”作为参考地址的模块,然后多个目标模块由连接程序连接成一个具有统一地址的装配模块,以便最后装入内存中执行。我们把
    目标模块obj中的地址称为相对地址(或逻辑地址),而把相对地址的集合叫做“相对地址空间”或简单地叫做“地址空间”。
      装配模块虽然具有统一的地址空间,但它仍是以“0”作为参考地址,即是浮动的。要把它装入内存执行,就要确定装入内存的实际物理地址,并修改程序中与 地址有关的代码,这一过程叫做地址重定位。
      地址空间的程序和数据经过地址重定位处理后,就变成了可由CPU直接执行的绝对地址程序。我们把这一地址集合称为“绝对地址空间”或“存储空间”。

      地址重定位完成的相对地址转换成内存的绝对地址工作又称为地址映射(map)、按照重定位的时机,可分为静态重定位和动态重定位。


    一、静态重定位
      静态重定位是在程序执行之前进行重定位,它根据装配模块将要装入的内存起始位置,直接修改装配模块中的有关使用地址的指令。
      例如,一个以“0”作为参考地址的装配模块,要装入以100为起始地址的存储空间。显然,在装入之前要做某些修改,程序才能正确执行。例如,MOV  EAX,[500]这条指令的意义,是把相对地址为500的存储单元内容1234装入EAX号累器。现在内容为1234的存储单元的实际地址为1500, 即为相对地址(500)加上装入的地址(1000),因此,MOV EAX,[500]这条指令中的直接地址码也要相应地加上起始地址,而成为MOV  EAX,[1500]。
      程序中涉及直接地址的每条指令都要进行这样的修改。需要修改的位置称为重定位项,所做的加实际装入模块起始地址修改中的块起始地址称为重定位因子。
      为支持静态重定位,连接程序在生成统一地址空间和装配模块时, 应产生一个重定位项表,连接程序此时还不知道装配模块将要装入的实际位置,故重定位表 所给出的需修改位置是相对地址所表示的位置。
      操作系统的装入程序要把装配模块和重定位项表一起装入内存。由装配模块的实际装入起始地址得到重定位因子,然后实施如下两步:
      (1)取重定位项,加上重定位因子而得到欲修改位置的实际地址;
      (2)对实际地址中的内容再做加重定位因子的修改,从而完成指令代码的修改。
      对所有的重定位项实施上述两步操作后,静态重定位才完成,尔后可启动程序执行。使用过的重定位项表内存副本随即被废弃。
      静态重定位有着无需硬件支持的优点,但存在着如下的缺点:一是程序重定位之后就不能在内存中搬动了;二是要求程序的存储空间是连续的,不能把程序放在若干个不连续的区域内。

    二、动态重定位
      动态重定位是指,不是在程序执行之前而是在程序执行过程中进行地址重定位。更确切地说,是在CPU每次访问内存单元前才进行地址变换。动态重定位可使装配模 块不加任何修改而装入内存,但是它需要硬件——定位寄存器的支持。
      程序的目标模块装入内存时,与地址有关的各项均保持原来的相对地址不进行任何修改。如MOV 1,[500]这条指令仍是相对地址500。当此模块被 操作系统调度到处理机上执行时,操作系统将把此模块装入的实际起始起始地址减去目标模块的相对基地址,然后将其差值装入定位寄存器中。当CPU取得一条访 问内存的指令时,地址变换硬件逻辑自动将指令中的相对地址与定位寄存器中的值相加,再依此和值作为内存绝对地址去访问该单元中的数据。
      由此可见,进行动态重定位的时机是在指令执行过程中,每次访问内存前动态地进行。采取动态重定位可带来两个好处:
      (1)目标模块装入内存时无需任何修改,因而装入之后再搬迁也不会影响其正确执行,这对于存储器紧缩、解决碎片问题是极其有利的;
      (2)一个程序由若干个相对独立的目标模块组成时,每个目标模块各装入一个存储区域,这些存储区域可以不是顺序相邻的,只要各个模块有自己对应的定位寄存器就行。

      动态重定位技术所付出的代价是需要硬件支持。


    总结:

    静态地址重定位:即在程序装入内存的过程中完成,是指在程序开始运行前,程序中的各个地址有关的项均已完成重定位,地址变换通常是在装入时一次完成的,以后不再改变,故成为静态重定位。

    优点:无需硬件支持

    缺点:1)程序重定位之后就不能在内存中搬动了;2)要求程序的存储空间是连续的,不能把程序放在若干个不连续的区域中。

     

    动态地址重定位:不是在程序执行之前而是在程序执行过程中进行地址重定位。更确切的说,是在每次访问内存单元前才进行地址变换。动态重定位可使装配模块不加任何修改而装入内存,但是它需要硬件一定位寄存器的支持。

    优点:1)目标模块装入内存时无需任何修改,因而装入之后再搬迁也不会影响其正确执行,这对于存储器紧缩、解决碎片问题是极其有利的;2)一个程序由若干个相对独立的目标模块组成时,每个目标模块各装入一个存储区域,这些存储区域可以不是顺序相邻的,只要各个模块有自己对应的定位寄存器就行。

    缺点:需要硬件支持。

    
    展开全文
  • 静态重定位与动态重定位

    千次阅读 2015-07-02 16:49:26
    对程序进行重定位的技术按重定位的时机可分为两种:静态重定位和动态重定位。 1.静态重定位 静态重定位是在目标程序装入内存时,由装入程序对目标程序中的指令和数据的地址进行修改,即把程序的逻辑地址都改成...

    程序和数据装入内存时需对目标程序中的地址进行修改。这种把逻辑地址转变为内存的物理地址的过程叫重定位

    对程序进行重定位的技术按重定位的时机可分为两种:静态重定位和动态重定位。

    1.静态重定位

    静态重定位是在目标程序装入内存时,由装入程序对目标程序中的指令和数据的地址进行修改,即把程序的逻辑地址都改成实际的地址。对每个程序来说,这种地址变换只是在装入时一次完成,在程序运行期间不再进行重定位。

    优点是:无需增加硬件地址转换机构,便于实现程序的静态连接。在早期计算机系统中大多采用这种方案。

    缺点是:(1)程序的存储空间只能是连续的一片区域,而且在重定位之后就不能再移动。这不利于内存空间的有效使用。(2)各个用户进程很难共享内存中的同一程序的副本。

    2.动态重定位

    动态重定位是在程序执行期间每次访问内存之前进行重定位。这种变换是靠硬件地址变换机构实现的。通常采用一个重定位寄存器,其中放有当前正在执行的程序在内存空间中的起始地址,而地址空间中的代码在装入过程中不发生变化。

    此工作由硬件地址映射机制来完成。硬件支持,软硬件结合完成) 硬件上需要一对寄存器的支持。程序放在不连续的实际物理空间中,要进行逻辑地址到物理地址的转换,实现动态重定位一般需要页式存储管理,页式存储管理用的不是寄存器,使用的是称为page table(页表)的数据结构page table记录了所有逻辑地址到物理地址的转换信息,进程切换的时候需要冲洗硬件上的page table 。 

    优点是:(1)程序占用的内存空间动态可变,不必连续存放在一处。(2)比较容易实现几个进程对同一程序副本的共享使用。
    缺点是:需要附加的硬件支持,增加了机器成本,而且实现存储管理的软件算法比较复杂。
    现在一般计算机系统中都采用动态重定位方法。

    展开全文
  • 对程序进行重定位的技术按重定位的时机可分为两种:静态重定位和动态重定位。静态重定位:是在目标程序装入内存时,由装入程序对目标程序中的指令和数据的地址进行修改,即把程序的逻辑地址都改成实际的地址。对每个...

    对程序进行重定位的技术按重定位的时机可分为两种:静态重定位和动态重定位

    静态重定位: 是在目标程序装入内存时,由装入程序对目标程序中的指令和数据的地址进行修改,即把程序的逻辑地址都改成实际的地址。对每个程序来说,这种地址变换只是在装入时一次完成,在程序运行期间不再进行重定位。 
    优点:是无需增加硬件地址转换机构,便于实现程序的静态连接。在早期计算机系统中大多采用这种方案。 
    缺点:(1)程序的存储空间只能是连续的一片区域,而且在重定位之后就不能再移动。这不利于内存空间的有效使用。
    (2)各个用户进程很难共享内存中的同一程序的副本。 

    动态重定位: 是在程序执行期间每次访问内存之前进行重定位。这种变换是靠硬件地址变换机构实现的。通常采用一个重定位寄存器,其中放有当前正在执行的程序在内存空间中的起始地址,而地址空间中的代码在装入过程中不发生变化。 
    优点:(1)程序占用的内存空间动态可变,不必连续存放在一处。
    (2)比较容易实现几个进程对同一程序副本的共享使用。 
    缺点:是需要附加的硬件支持,增加了机器成本,而且实现存储管理的软件算法比较复杂。 
    现在一般计算机系统中都采用动态重定位方法。

    展开全文
  • 动态重定位执行过程

    千次阅读 2017-06-21 23:10:01
    ld-linux.so.2的_dl_runtime_resolve函数,这个函数解析出puts的绝对地址,回填到GOT[5]。 所有动态库函数在第一次...动态重定位执行过程 linux 动态链接器提供动态重位功能,所有外部函数只有调用时才做重定位
  • 地址重定位就是操作系统将逻辑地址转变为物理地址的过程。。。也就是对目标程序中的指令和数据进行修改的过程 将逻辑地址空间重定位到物理地址空间的时机有三种:  1、程序编译连接时。  2、程序装入...
  • 重定位概念:程序在装入内存时将逻辑地址转换为物理地址。 重定位分类— 静态重定位:在程序装入内存时就将逻辑地址转换为物理地址 优势:操作简单,不需要额外的机构...动态重定位:在程序运行期间,需要某一内...
  • 实现方法:为使地址的转换不会影响到指令的执行速度,必须有硬件地址变换机构的支持,在系统中设置一个重定位寄存器,用他来存放程序在内存中的起始地址,在执行时,真正访问的时相对地址与重定位寄存器中的地址相加...
  • 动态重定位、分段、分页

    千次阅读 2019-05-13 17:25:07
    1动态重定位 作用 把每个进程的地址空间映射到物理内存的不同部分 实现 每个CPU配置2个特殊的硬件寄存器,叫作基址寄存器和界限寄存器,当一个程序运行时,程序的起始物理地址装载到基址寄存器中,程序的长度...
  • 静态地址重定位动态地址重定位

    千次阅读 2011-09-07 11:23:03
    静态地址重定位:即在程序装入内存的过程中完成,是指在程序开始运行前,程序中的各个地址有关的项均已完成重定位,地址变换通常是在装入时一次完成的,以后不再改变,故成为静态重定位。 优点:无需硬件支持 缺点...
  • 在程序装入过程中随即进行的地址变换方式称为...这种重定位实现需要硬件的支持。最简单的硬件机构是一个重定位寄存器。 区别: 1、 地址转换时机不同。静态地址重定位是在程序装入内存前完成从逻辑地址到物理...
  • 重定位

    千次阅读 2017-08-29 11:27:50
    由于重定位过程的两个步骤,判断程序地址计算最初的非空段,和解析外部符号的引用,是依次、共同处理的,所以我们讲重定位即同时涉及这两个过程。 链接器的第一次扫描会列出各个段的位置,并收集程序中全局符号与段...
  • 动态共享对象的装载时重定位

    千次阅读 多人点赞 2015-01-15 20:23:23
    最近读程序员的自我修养--链接 装载与库,其中有句话:动态链接模块被装载映射到虚拟空间后,指令部分是在多个进程之间共享的,由于装载时重定位的方法需要修改指令,所以没有办法做到同一份指令被多个进程共享,...
  • plt和got引入延迟重定位机制之后,方案复杂度就更高了。为了让大家对延迟机制有深入的理解,将Linux方案写成C语言伪代码。
  • 重定位的原理&实现

    千次阅读 2008-04-15 12:01:00
    重定位 病毒自身的重定位是病毒代码在得以顺利运行前应解决的最基本问题。病毒代码在运行时同样也要引用一些数据,比如API 函数的名字、杀毒软件的黑名单、系统相关的特殊数据等,由于病毒代码在宿主进程中运行时的...
  • Linux动态库原理(二)重定位

    千次阅读 2016-08-12 14:21:14
    Linux动态库原理(二)重定位  前面一章《Linux动态库工作原理详解》比较简单浅显的对 Linux 的工作原理进行了阐述,今天打算从 Linux 动态库在加载过程中符号的重定位(Relocation)的角度,更加深入的讲解 ...
  • PE文件重定位

    千次阅读 2014-09-12 22:10:38
    PE格式是Windows环境下可执行文件(如:exe,dll)的格式,而Windows下面的程序,例如动态链接库无法加载到它本身期望加载的地址的时候,便会发生重定位。那么,重定位是如何实现的呢?   一.PE文件格式的结构 ...
  • 重定位就是在链接地址跟运行地址不同的情况下,执行一段位置无关码,这段位置无关码的作用就是将原来的那份代码全部复制到链接地址那里去,然后自己再长跳转到新的那份代码的刚刚执行的那个位置。这样就实现了链接...
  • 编译过程和符号表重定位问题:转载至:点击打开链接 对于代码的编译问题千头万绪从何说起呢,首先来说一下计算机是如何处理应用程序的,实质上应用程序是通过操作系统来应用机器指令操控硬件设施完成各种任务的,...
  • 存储器的重定位

    千次阅读 2012-03-10 11:06:17
    在操作系统中存储器的重定位分为两种:静态重定位和动态重定位。所谓的重定位即把逻辑地址转换成绝对地址。  (1)静态重定位 在装入一个作业时,把作业中的指令地址和数据地址全部转换成绝对地址。这种转换...
  • 1. 病毒程序:1)宿主:被病毒感染的程序。例如:exe dll office文档  2)重定位:在病毒体中使用绝对位置规定的变量或入口地址,病毒...3)重定位实现: 病毒代码重定位: call @@1 @@1:pop edx ……….
  • 重定位和链接

    千次阅读 2016-07-10 11:32:44
    链接和重定位是嵌入式C中很重要的部分,对于这一块掌握的越精细越好。 指令位置分类 指令分为两种: 位置无关编码(PIC):汇编源文件被编码成二进制可执行程序时编码方式与位置(内存地址)无关 位置相关编码:...
  • 重定位处理

    千次阅读 2008-12-12 10:37:00
    但是,在创建动态可执行文件或共享库时,许多重定位无法在链接编辑时完成。这些重定位需要仅在目标文件装入内存时才知道的逻辑地址。在这种情况下,链接编辑器将在输出文件映像中生成新的重定位记录。然后,运行时...
  • ARM之重定位和链接脚本

    千次阅读 2018-05-14 16:52:42
     2、动态重定位动态重定位是指,不是在程序执行之前而是在程序执行过程中进行地址重定位。更确 切地说,是在每次访问内存单元前才进行地址变换。动态重定位可是装配模块不加任何修改而装入内 存...
  • ELF重定位分析

    千次阅读 2013-10-22 10:26:43
    ELF文件执行过程中, 重定位动态链接是两个重要的步骤; 本文原文描述了重定位类型对应的原C程序的语句情景, 和重定位类型指示linker editor和dynamic llinker尤其是前者所做的重定位修正. 可以做为ELF File Format...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 99,969
精华内容 39,987
关键字:

动态重定位如何实现