几种不同的装入方式

静态装入

定义:程序在编译链接后,将完整的可执行映像一次性装入内存,且在程序运行期间不再进行装入操作。需要在编程阶段就把物理地址计算好

静态重定位(Static Relocation)或可重定位

定义:​静态重定位是在装入时,由链接器(linker)或装载器(loader)将程序中的逻辑地址转换为物理地址。装入后不能改变。

动态重定位(Dynamic Relocation)

定义:​动态重定位是在程序执行时再决定装入的地址并装入,装入后有可能换出,所以同一个模块在内存中的物理地址有可能改变。需要硬件支持(如内存管理单元 MMU)。

装入方式比较

特性静态装入静态重定位动态重定位
装入时机执行前一次性装入执行前地址转换运行时动态转换
地址绑定时机编译时/装入时装入时执行时
内存连续性要求必须连续必须连续可不连续
程序移动能力不可移动不可移动可移动
内存保护
硬件需求无特殊要求无特殊要求需要 MMU 支持
典型应用简单嵌入式系统早期单任务系统现代操作系统
虚拟内存支持不支持不支持支持
动态链接支持不支持不支持支持

📌 页式存储管理

内存分页存储

重定位方式适用性分析
静态重定位❌ 不适用。页式管理要求程序可分页加载到不连续的物理页框,静态重定位无法满足这种动态映射需求
动态重定位✅ 最佳匹配。通过页表机制实现运行时地址转换,完美支持分页特性

📌 段式存储管理

分段式存储管理

重定位方式适用性分析
静态重定位⚠️ 有限适用。仅当所有段加载后不再移动时可用,但会丧失段式管理的灵活性
动态重定位✅ 标准配置。段表机制天然支持动态重定位,允许段在内存中移动和共享

📌 段页式存储管理

重定位方式适用性分析
静态重定位❌ 完全不适用。段页式结合了两种动态特性,静态方式无法满足双重映射需求
动态重定位✅ 必需方案。需要同时维护段表和页表,实现段级和页级的双重地址转换

关键结论:

  1. 现代操作系统普遍采用动态重定位
  2. 静态重定位仅适用于早期简单系统或特殊嵌入式场景
  3. 段页式管理必须依赖动态重定位硬件(如 MMU)

补充说明:动态重定位虽然实现复杂,但能完美支持虚拟内存、内存保护和共享等现代 OS 核心功能。