Skip to content

408

操作系统

程序的链接与装入


一、定位信息

  • 所属圈层:核心层
  • 前置知识:了解程序编译的基本过程(预处理→编译→汇编→链接),了解内存地址空间的基本概念
  • 知识网络位置:本单元是理解内存管理(地址映射、重定位)的前置基础,与OS-02章进程管理中进程的创建过程也有直接关联
  • 考点热度等级M级(中频常考)——近5年真题中出现约2–3次,以选择题考查链接方式和装入方式的区别

二、知识点讲解

2.1 程序从编写到运行的过程

源代码→编译→目标模块(.obj)→链接→装入模块(.exe)→装入→内存中运行

2.2 程序的链接

链接是将多个目标模块和所需的库函数合并为一个装入模块的过程。

链接方式时机优点缺点
静态链接程序运行前(装入前)运行时速度快,无额外链接开销不能共享库函数,修改需重新链接
装入时动态链接程序装入内存时便于共享目标模块,修改方便装入时间较长
运行时动态链接程序执行到需要该模块时节省内存(未用到的模块不装入),支持运行时加载运行时有链接开销

关键区别:静态链接是"一次性全部链接好";装入时动态链接是"装入时才链接";运行时动态链接是"用到时才链接"。

2.3 程序的装入

装入是将装入模块放入内存并使其可执行的过程。三种装入方式的核心区别在于地址转换(重定位)的时机

装入方式地址绑定时机是否可移动特点
绝对装入编译时确定不可移动程序必须装入指定物理地址,灵活性差
可重定位装入(静态重定位)装入时一次性转换装入后不可移动由装入程序完成逻辑地址→物理地址的转换
动态运行时装入(动态重定位)执行时每次访存转换可移动通过基址寄存器实现,支持程序在内存中移动

2.4 逻辑地址与物理地址

  • 逻辑地址(相对地址/虚拟地址):程序中使用的地址,从0开始编址
  • 物理地址(绝对地址):内存中实际的地址
  • 地址重定位:将逻辑地址转换为物理地址的过程

重定位寄存器(基址寄存器):存放程序在内存中的起始地址,动态重定位时每次访存都要加上该值完成地址转换。

2.5 三种装入方式对比表

维度绝对装入静态重定位动态重定位
地址转换时机编译/汇编时装入时执行时
逻辑→物理由编译器完成由装入程序完成由硬件(基址寄存器)完成
程序是否可移动装入后否
硬件支持不需要不需要基址寄存器
灵活性最差中等最好
现代OS采用少用是(主流)

三、记忆与理解辅助

  1. 口诀记忆三种链接:"静装运"——静态链接(装入前)、装入时动态链接、运行时动态链接
  2. 口诀记忆三种装入:"绝静动"——绝对装入(编译时定死)、静态重定位(装入时转换)、动态重定位(执行时转换)
  3. 一句话区分:链接解决"模块怎么合并",装入解决"程序怎么放内存"
  4. 对比记忆:静态链接+绝对装入是最古老的方式;运行时动态链接+动态重定位是最灵活的现代方式

四、例题与精解

例题1(基础巩固)

题目:采用动态运行时装入方式时,程序中指令的地址是( )

A. 物理地址 B. 逻辑地址 C. 内存绝对地址 D. 外存地址

命题意图:考查动态重定位中地址的性质。

精解

  1. 审题分析:动态运行时装入意味着地址转换在执行时进行
  2. 解题思路:如果转换在执行时才做,那程序中的地址必须是未转换的逻辑地址
  3. 完整步骤
    • 动态运行时装入的程序在装入内存时不做地址转换
    • 程序中的地址是从0开始的逻辑地址(相对地址)
    • 每次执行访存指令时,由硬件(基址寄存器)将逻辑地址转换为物理地址
    • 因此程序中的指令地址是逻辑地址
  4. 方法反思:三种装入方式的核心区别就是地址转换时机——越早转换,程序中的地址越接近物理地址;越晚转换,越接近逻辑地址

答案:B

例题2(中等提升)

题目:以下关于程序链接方式的叙述,错误的是( )

A. 静态链接在程序运行前完成所有链接 B. 装入时动态链接便于多个程序共享同一目标模块 C. 运行时动态链接可以节省内存空间 D. 静态链接的程序运行速度最慢

命题意图:考查三种链接方式的特征和优缺点。

精解

  1. 审题分析:题目要求选出"错误"的叙述
  2. 解题思路:逐项分析三种链接方式的特点
  3. 完整步骤
    • A选项:正确。静态链接在装入内存前就完成了所有模块的链接和重定位
    • B选项:正确。装入时动态链接的各模块独立存放,多个程序可以共享同一目标模块
    • C选项:正确。运行时动态链接只在需要时才加载模块,未使用的模块不占用内存
    • D选项:错误。静态链接在运行前已完成所有链接工作,运行时不需要额外的链接开销,速度反而最快
  4. 方法反思:静态链接以空间(不能共享)换时间(运行最快),动态链接以时间(链接开销)换空间(按需加载)

答案:D


五、考情分析

  • 考查频次:近5年约2–3次
  • 常见题型:选择题
  • 分值占比:2分/题
  • 命题趋势:倾向于考查三种链接/装入方式的对比,特别是动态重定位与静态重定位的区别。可能与内存管理中的地址映射结合出题

六、易错点提醒

  1. 错误表现:混淆"链接"和"装入"两个阶段 错误原因:两者都涉及地址处理,容易混淆 正确理解:链接是合并模块生成装入模块,装入是将装入模块放入内存。链接解决"模块合并",装入解决"内存放置"

  2. 错误表现:认为动态重定位需要每次修改程序中的地址 错误原因:将硬件地址转换误解为软件修改 正确理解:动态重定位由硬件(基址寄存器+加法器)自动完成,程序中的逻辑地址保持不变

  3. 错误表现:认为静态链接的程序不能使用库函数 错误原因:误解了"不能共享"的含义 正确理解:静态链接是将库函数的代码复制到装入模块中,可以使用但不能多个程序共享同一份库函数副本

  4. 错误表现:将逻辑地址等同于物理地址 错误原因:在绝对装入方式下二者确实相同,但这是特例 正确理解:一般情况下逻辑地址≠物理地址,需要通过地址重定位进行转换


七、来源标注

  • 依据2026考研统考408大纲
  • 依据《计算机操作系统》(汤小丹/汤子瀛版)第2章
  • 依据《操作系统概念》(Silberschatz版)第8章

考研全科复习资料 - 基于2026考研统考大纲