浅谈操作系统——程序的装入与链接

163 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情

用户源程序执行通常要经过的步骤:

  1. 编译:由编译程序将用户源代码编译成若干个目标模块
  2. 链接:由链接程序将编译后形成的目标模块以及他们所需要的库函数,链接在一起,形成一个装入模块
  3. 装入:由装入程序将装入模块装入主存的过程(加载)

程序的装入

把程序装入内存空间,采用三种方式

绝对装入方式

在可执行文件中记录内存地址,装入时直接定位在上述(即文件中记录的地址)内存地址

  • 优点:装入过程简单
  • 缺点,过于依赖于硬件结构,不适于多道程序系统

可重定位方式

  • 在可执行文件中,列出各个需要重定位的地址单元和相对地址值
  • 当用户程序被装入内存时,一次性实现逻辑地址到物理地址的转换,以后不再转换
    • 即装入时根据所定位的内存地址去修改每个重定位地址项,添加相应偏移量
    • 一般在装入内存时由软件完成

动态运行时装入方式

在装入模块装入主存后,并不立即把装入模块中的相对地址转换为绝对地址,而是把这种地址转换推迟到程序要真正执行时才进行。实现时需要重定位寄存器

动态运行时装入方式

优点:

  • 不需要一次装入
  • OS可以将一个程序分散存放于不连续的内存空间,可以移动程序
  • 能够支持程序执行中产生的地址引用,如指针变量

缺点

需要硬件支持,OS实现较复杂。他是虚拟存储的基础

程序的链接

  • 链接程序的功能是将经过编译或汇编后所得到的一组目标模块以及他们所需要的库函数,装配成一个完整的装入模块
  • 实现链接的方法有以下三种:
    • 静态链接:实现进行链接后不在拆开的链接方式
    • 装入时动态链接:用户源程序经过编译后所得到的目标模块,是在装入主存时边装入边链接的
    • 运行时动态链接:可将某些目标模块的链接推迟到执行时才进行

静态链接

动态链接

在装入或运行时进行链接,通常被链接的共享代码称为动态链接库或共享库

优点

  • 共享
  • 部分装入
  • 便于局部代码修改
  • 便于运行环境适应

缺点

  • 链接开销
  • 管理开销

貌似从调度过后就基本上没有需要计算的东西了,全是要记忆背诵的知识点,要好好打基础呀