首页/操作系统/03-memory/逻辑地址与物理地址 🔗 在 Obsidian 中打开
操作系统 · 03-memory

逻辑地址与物理地址

重要度 ⭐⭐⭐⭐⭐ 逻辑地址物理地址地址转换虚拟地址
速查
逻辑地址是 CPU 生成的虚拟地址(从 0 编址),物理地址是内存实际地址;转换由 MMU 硬件完成;页式:逻辑地址 $=$ 页号 $+$ 页内偏移,物理地址 $=$ 物理块号 $\times$ 页大小 $+$ 页内偏移。

速查

项目
逻辑地址CPU 生成的地址(虚拟地址),从 0 开始编址
物理地址内存中的实际地址(硬件地址)
地址转换由 MMU(内存管理单元)完成
地址空间逻辑地址空间 $\geq$ 物理地址空间(虚拟内存)

核心概念

逻辑地址(虚拟地址)

  • CPU 执行指令时生成的地址,从 0 开始编址
  • 每个进程有独立的逻辑地址空间
  • 进程看到的地址都是逻辑地址

物理地址

  • 内存条上的实际地址
  • 所有物理地址的集合构成物理地址空间
  • CPU 最终通过物理地址访问内存

地址转换(重定位)

  • 将逻辑地址转换为物理地址的过程
  • MMU(Memory Management Unit)硬件完成
  • 页式管理:逻辑地址 $=$ 页号 $+$ 页内偏移,通过页表转换
  • 段式管理:逻辑地址 $=$ 段号 $+$ 段内偏移,通过段表转换

地址空间

  • 逻辑地址空间:由地址位数决定(如 32 位 $\to 2^{32}$)
  • 物理地址空间:由实际内存大小决定
  • 逻辑地址空间可以大于物理地址空间(虚拟内存技术)

关键性质

对比项逻辑地址物理地址
生成者CPU
编址起点从 0 开始实际内存起始
独立性每个进程独立全局唯一
可见性程序员 / 编译器可见对程序员透明
转换由 MMU 转换

常见考法

考法解题套路
地址转换页式:页号查页表得物理块号,拼偏移得物理地址
逻辑地址空间大小由地址位数决定:$n$ 位 $\to 2^{n}$ 个地址
物理地址计算物理地址 $=$ 物理块号 $\times$ 页大小 $+$ 页内偏移
为什么要虚拟地址进程隔离、虚拟内存、简化编程

易错点

注意
  • 逻辑地址从 0 开始编址,物理地址从实际内存起始开始
  • 不同进程的逻辑地址可以相同,但映射到不同的物理地址
  • 地址转换由 MMU 硬件完成,不是 OS 软件——速度极快
  • 逻辑地址空间由地址总线位数决定,不是由内存大小决定
  • 程序员看到的地址都是逻辑地址,物理地址对程序员透明

核心结论

必背
  1. 逻辑地址是 CPU 生成的虚拟地址,物理地址是内存的实际地址
  2. MMU 负责将逻辑地址转换为物理地址(硬件完成,速度快)
  3. 每个进程有独立的逻辑地址空间,通过页表 / 段表映射到物理地址
  4. 逻辑地址空间可以大于物理地址空间(虚拟内存技术的基础)
  5. 引入逻辑地址的目的:进程隔离、简化编程、支持虚拟内存

记忆卡片

逻辑地址和物理地址的区别?
逻辑地址是 CPU 生成的虚拟地址(从 0 开始),物理地址是内存实际地址。
谁负责地址转换?
MMU(内存管理单元)硬件完成。
不同进程的逻辑地址可以相同吗?
可以——它们映射到不同的物理地址(进程隔离)。
逻辑地址空间由什么决定?
由地址总线位数决定(如 32 位 $\to 2^{32}$ 个地址)。
为什么要引入逻辑地址?
进程隔离、虚拟内存、简化编程。

交互动画 · MMU 地址转换

页大小 = 4KB | 逻辑地址 = 页号(4位) + 页内偏移(12位) = 0x1F20 → 页1 + 偏移0x20 CPU逻辑地址 0x1F20 MMU查页表 进程A页表页1 → 物理页5 进程B页表页1 → 物理页9 物理地址0x5020
点击「进程A 访问」或「进程B 访问」,观察相同逻辑地址如何映射到不同物理地址
逻辑地址空间 ≥ 物理地址空间(虚拟内存的基础)
每个进程有独立页表,相同逻辑地址在不同进程中映射到不同物理页框——这就是进程隔离。

相关知识点

paging-and-segmentation virtual-memory-management

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。