STEP_1
用户空间和内核空间的分离是安全边界:用户程序无法直接访问内核内存,只能通过系统调用陷入内核态。内核空间在所有进程中映射到相同的物理地址,这让系统调用时不需要切换页表(提高性能),但也意味着内核漏洞可访问所有进程数据(Spectre/Meltdown 利用了此特性)。进程的内存视图 — PROCESSING
address-space.log
// Linux 进程地址空间布局(64位,简化)
// 0x0000000000000000 - 0x00007fffffffffff 用户空间(128TB)
// 0x400000 代码段(.text) 只读可执行
// 0x600000 数据段(.data) 全局变量
// 堆(向上增长,malloc 从这里分配)
// ...
// mmap 区域(共享库 .so 映射在此)
// ...
// 栈(向下增长,函数调用栈)
// 0xffff800000000000 - 0xffffffffffffffff 内核空间(128TB)
// 查看进程地址空间
// cat /proc/<pid>/maps
// 7f8a3b200000-7f8a3b400000 r-xp 共享库代码段
// 7f8a3b400000-7f8a3b600000 r--p 共享库只读数据
// 7ffe12345000-7ffe12367000 rw-p 栈
// [vdso] 内核快速系统调用映射虚拟地址空间:64 位系统中,每个进程看到的是 0 到 2^48(约 256TB)的连续虚拟地址空间,分为用户空间(低地址)和内核空间(高地址)。代码段、数据段、堆、栈、mmap 区域各占一段,互不重叠。实际物理内存远小于此,通过按需分配实现。
实时沙盒SANDBOX
FAULT_INJECTED
快速场景
手动调节
页大小
影响 TLB 覆盖范围和碎片
4KB 标准页,灵活但 TLB 覆盖范围小
TLB 条目数
TLB 容量决定命中率
1024项
TLB 极小,频繁 Page Table Walk,性能崩溃
启用 Swap
物理内存不足时换出到磁盘