各种地址(绝对地址,相对地址,线性地址,虚拟地址,物理地址,逻辑地址)

一、基本概念

1. 物理地址 (Physical Address)

  • 定义硬件内存芯片(如RAM)上的实际地址,CPU通过总线直接访问的物理位置。

  • 特点

    • 唯一且固定,由内存硬件决定。

    • 操作系统和用户程序通常不直接操作物理地址(由内存管理单元 MMU 自动转换)。

  • 示例:内存条上第 0x0000FF00 字节的位置。


2. 虚拟地址 (Virtual Address)

  • 定义进程视角中的地址空间,由操作系统通过内存管理机制(如分页、分段)映射到物理地址。

  • 特点

    • 每个进程拥有独立的虚拟地址空间(如32位系统的0x000000000xFFFFFFFF)。

    • 通过 MMU 转换为物理地址,实现内存隔离和保护。

  • 示例:程序代码中访问的变量地址 0x0804A000 是虚拟地址。


3. 逻辑地址 (Logical Address)

  • 定义程序编译后生成的地址,通常由 段基址 + 偏移量 组成(在分段内存模型中)。

  • 特点

    • 在x86架构中,逻辑地址通过 分段机制 转换为线性地址。

    • 现代操作系统(如Linux/Windows)通常弱化分段,逻辑地址与线性地址等价。

  • 示例:汇编指令 mov eax, [0x1234] 中的 0x1234 是逻辑地址的偏移量。


4. 线性地址 (Linear Address)

  • 定义:在分段机制后、分页机制前的中间地址。如果没有分段,线性地址等于逻辑地址。

  • 转换过程

    • 逻辑地址 →(分段机制)→ 线性地址 →(分页机制)→ 物理地址

  • 特点

    • 在启用分页的系统中,线性地址需要通过页表映射到物理地址。

  • 示例:分段后的地址 0x0804A000 可能是一个线性地址。


5. 绝对地址 (Absolute Address)

  • 定义:直接指向物理内存位置的固定地址,无需任何转换。

  • 特点

    • 常见于早期无虚拟内存的系统,或嵌入式系统的直接内存访问。

    • 与物理地址等价,但更强调“无需计算”的固定性。

  • 示例:BIOS固件中硬编码的地址 0xFFFF0(CPU复位后执行的第一条指令地址)。


6. 相对地址 (Relative Address)

  • 定义:相对于某个基址(如代码段基址、当前指令指针)的偏移量。

  • 特点

    • 用于重定位和动态链接,使程序可以在不同内存位置加载。

    • 程序中的跳转指令(如jmp +0x20)常用相对地址。

  • 示例:可执行文件中某函数的偏移量 0x200,实际地址为 基址 + 0x200

二、核心关系链

程序视角
逻辑地址 →(分段机制)→ 线性地址 →(分页机制)→ 物理地址
进程视角
虚拟地址(逻辑地址的抽象) → 物理地址
硬件视角
绝对地址(直接物理地址) vs. 相对地址(基于基址的偏移)


三、详细关系解释

1. 逻辑地址 → 线性地址 → 物理地址(x86 分段+分页模型)
  • 逻辑地址(段选择符 + 偏移量):
    程序编译后生成的地址,例如 CS:0x1234(代码段基址 + 偏移)。

  • 分段机制
    通过段描述符表(GDT/LDT)将逻辑地址转换为 线性地址(段基址 + 偏移)。

  • 分页机制
    通过页表将线性地址转换为 物理地址(实际内存位置)。

2. 虚拟地址 ≈ 线性地址(现代操作系统简化模型)
  • 虚拟地址
    进程看到的连续地址空间(如 0x08048000),本质是逻辑地址的抽象。

  • 现代系统
    采用平坦内存模型(段基址设为0),逻辑地址直接等于线性地址,再通过分页映射到物理地址。
    虚拟地址 → 线性地址 → 物理地址(分段机制被弱化)。

3. 绝对地址 vs. 物理地址(固定与动态映射)
  • 绝对地址
    直接指向物理地址的固定值(如 0xFFFF0),无需转换。

  • 物理地址
    可能通过分页动态映射,而绝对地址是物理地址的子集(静态映射部分)。

4. 相对地址 → 逻辑地址(程序可重定位性)
  • 相对地址
    基于基址的偏移(如 jmp +0x20),程序加载时基址被动态分配。

  • 基址重定位
    相对地址加上基址后形成逻辑地址(或直接映射为虚拟地址)。


四、实际系统中的简化流程(现代操作系统)

  1. 进程视角
    使用 虚拟地址(如 0x7FFF89AB),由编译器生成。

  2. 操作系统视角
    通过页表将虚拟地址(即线性地址)转换为 物理地址

  3. 硬件视角
    MMU自动完成虚拟→物理地址的转换,程序无需感知物理地址。

五、关键关系示意图

程序代码中的相对地址(偏移量)
    │
    ▼
逻辑地址(段选择符:偏移量) → 分段机制 → 线性地址 → 分页机制 → 物理地址
    │                                │                   │
    │                                ▼                   ▼
    └─── 虚拟地址(进程视角)───────┘               绝对地址(硬件固定地址)

六、不同场景下的关系总结

  1. 传统x86分段+分页
    逻辑地址 → 线性地址 → 物理地址,虚拟地址=线性地址。

  2. 现代平坦内存模型
    虚拟地址(逻辑地址) → 物理地址,分段机制被隐藏。

  3. 嵌入式系统/无MMU
    直接使用 绝对地址(物理地址),无虚拟地址概念。

  4. 动态链接/重定位
    相对地址 + 基址 → 逻辑地址,支持代码灵活加载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘子13

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值