操作系统_链接与重定位


链接与重定位

逻辑地址空间

引入

如果没有引入抽象的逻辑地址空间,直接使用物理地址,那么,没有重定位操作势必破坏系统和其他应用的内存,如果实现重定位,其实现复杂(每次运行都需要重新编译进行重定位),浪费时间,所以需要新增一层在程序和实际物理地址之间,这一层就是逻辑地址空间,这样只需要建立逻辑地址到物理地址的映射即可,不需要每次都修改文件.

辨别

  • 物理地址:
    • 内存中一系列存储信息的物理地址的集合
  • 逻辑地址
    • 对内存空间的抽象
    • 是一个进程用来范文内存的一组地址
    • 不同进程之间的地址空间相对独立,每个进程访问的地址是自己的逻辑地址,不会访问到其他进程的空间.

      地址映射

      程序的逻辑地址空间只是针对进程而言,实际操作系统需要访问物理地址,逻辑地址到实际物理地址的转化就是地址映射,由存储管理单元(MMU)完成.

      动态重定位

      在装载程序时,直接将程序装入到分配的内存中,执行的时候,基址寄存器存放程序的首地址,界限寄存器存放程序的长度,这样每一次地址访问都经过基址寄存器的转换,访问到真正的内存.

      装入和链接

      代码源文件先经过编译,变成机器码文件,再把几个程序之间链接,以使用依赖的库,然后再一起装入内存.

      链接

      链接分为静态链接和动态链接,分别如下
  • 静态链接:在编译阶段把静态库复制加入到可执行文件中,导致可执行文件较大.
  • 动态链接:假装链接完毕,其实只是加入了描述信息,等到执行到这里的时候去访问相应动态库载入内存执行.

Author: Dovahkiin
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source Dovahkiin !
  TOC