页表与地址空间

这页讲的是:程序看到的地址并不是物理内存地址,Linux 通过地址空间和页表把“程序眼中的连续世界”和“机器真实的物理页”连接起来。学这页的重点,是理解虚拟地址为什么是现代操作系统的基础幻觉之一。

这块是什么

页表与地址空间,讲的是每个进程为什么都像拥有自己独立、连续的内存世界,以及内核怎样把这个世界映射到真实物理内存上。程序写下一个指针地址时,它并不是直接在和某块固定物理内存打交道,而是在一个受内核管理的虚拟空间里活动。

可以先把它理解成:程序拿到的是“房间号码”,真正对应哪间物理房子、什么时候安排、能不能进去,都要靠内核的映射规则来决定。

它负责什么

给进程独立视图

  • 让不同进程看到彼此隔离的地址世界
  • 减少相互踩内存的风险
  • 帮助系统组织代码、数据、栈、映射区域
  • 让程序不必直接关心物理布局

建立虚拟到物理映射

  • 把虚拟地址翻译成物理页
  • 按需建立和更新映射关系
  • 支撑共享、复制、缺页等行为
  • 把抽象地址世界真正落到机器资源上

支撑保护和管理

  • 控制哪些区域可读写执行
  • 帮助实现共享库、内存映射文件等机制
  • 隔离用户和内核空间
  • 让地址不只是“位置”,也是权限和边界的一部分

为什么需要地址空间这层“中间世界”

如果没有它会发生什么地址空间的价值
所有程序直接看物理内存彼此容易冲突,重定位和隔离都极其麻烦。每个进程都能像拥有自己的内存世界一样运行。
程序必须知道真实物理布局程序可移植性和装载灵活性都会很差。应用可以只面向虚拟地址编程。
共享和保护都很粗糙代码共享、权限控制、只读保护等会变得困难。映射机制让共享和保护更精细。
扩展系统能力很困难很多现代内存管理技巧都难以成立。虚拟地址让操作系统拥有更强的资源调度空间。

关键概念

概念现在怎么理解
地址空间进程看到的那整套虚拟地址世界,不等于真实物理内存布局。
页表记录虚拟地址如何映射到物理页的重要结构。
缺页访问的地址当前没有现成可用映射或数据,需要内核介入补齐。
用户空间 / 内核空间同样是地址世界的一部分,但权限和用途不同。
内存映射把文件或设备等内容纳入地址空间的一种组织方式。

为什么重要

常见误解

它不负责什么

和其他模块的关系

相关模块关系
内存管理这页把内存管理里最基础的“视图和映射关系”单独拆出来看。
系统调用边界用户传进来的地址为什么要仔细检查,和地址空间边界直接相关。
调度器任务切换常伴随地址空间切换或共享关系变化。
页缓存 / 回收映射只是第一步,后续页面会继续讲数据在内存里如何保留、回收和写回。

读完这页后,你应该能回答

后面适合继续问:缺页具体意味着什么?共享库为什么依赖这套映射思路?地址空间切换为什么会影响系统开销?