操作系统 程序装入与链接

存储器的层次结构

操作系统 程序装入与链接_第1张图片

  • 从上到下:存储空间越来越大,但是调用的速度越来越慢
  • 为什么需要多级存储体系?
    这样我们可以实现用最小的成本换最大的资源

程序的装入(地址变换)

  • 为什么需要装入程序
    因为程序在执行的过程中,只能从实际地址中读取变量的内容,跳转目标指令,但是我们程序在编写的时候,使用的都是相对地址,我们认为地址都是从零开始的,所以需要程序装入来实现从逻辑地址到物理地址的映射

根据装入的时机不同,分为三种装入方式
1、绝对装入

  • 在程序编译的时候,直接确定各个指令或者变量的物理地址,再产生汇编语言,生成目标代码
    缺点:实现需要知道存储器的内部结构,对开发人员要求很高
    应用:单片机

2、可重定位装入方式

  • 程序装入的时候根据转入位置修改程序中访存的地址,再用物理地址替换逻辑地址
    缺点:不允许程序运行时候再内存中移动位置
    应用:在多道程序环境

3、动态运行时装入方式

  • 程序装入的时候不修改存储位置,等待取程序或者实际访问的时候再转换逻辑地址到物理地址,再读写存储器
    缺点:复杂度增加
    应用:程序可以在内存中移动

程序的链接

  • 为什么要链接:多个源程序会产生一组目标代码模快,加上访问到的库文件的模块,一起链接成一个可以执行的程序。但是每个模块的逻辑地址都是从0开始的,链接的时候需要给不同的模板代码重新安排不同的逻辑地址

根据链接的时间不同,分为三种

1、静态链接

  • 程序运行之前,将目标模块和库函数模块一起链接成一格完整的模块

链接时代码修改工作包括:
1、对相对地址进行修改:很多模块相对地址范围发生了变化,相应访存地址也需进行修改。
2、变换外部调用符号:将模块中所用的外部调用符号也都变换为相对地址。

缺点:静态链接简单,但将整个装入模块都装入内存,若其中多数代码并不执行,可能导致内存浪费

2、装入时动态链接

  • 在程序装入内存的时候,一边装入一边链接。也即是在装入模块的时候,如果有需要用到一个模块,就开始调用这个模块,进行链接
    好处:实现多目标模块的共享,可以将一个目标模块链接到多个应用中

3、运行时动态链接

  • 程序装入的时候,只是将最近的模块装入内存,更多的模块,推迟到执行相关函数的时候才将模块载入,进行链接
    优点:加快程序的装入、节省了内存,不需要的不用装入内存

你可能感兴趣的:(操作系统,操作系统)