mcpField
V
virtual-memory-paging-and-tlb

virtual-memory-paging-and-tlb

github.com/mohitmishra786开发269328 次安装18 周前更新
代码仓库

关于 virtual-memory-paging-and-tlb

面向操作系统、嵌入式系统和性能分析领域开发者的系统技能,讲解地址转换、页表、TLB、缺页,以及基于 MMU 的分页与 Cortex-M MPU 的差异。

主要功能

  1. 01虚拟地址到物理地址转换
  2. 02多级页表解析
  3. 03缺页类型与成因
  4. 04TLB 压力及缓解方法
  5. 05Cortex-M MPU 对比
  6. 06Linux 内存检查命令

适用场景

  1. 01理解 mmap 工作负载中的按需分页
  2. 02排查段错误和保护页
  3. 03分析 TLB 压力与大页
  4. 04比较嵌入式 MPU 和 MMU 系统

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mohitmishra786/low-level-dev-skills --skill virtual-memory-paging-and-tlb

安装后在 Claude Code 中输入/virtual-memory-paging-and-tlb确认已加载。

详细介绍

虚拟内存、分页和 TLB

目的

说明虚拟内存:分页、多级页表、TLB 的作用、缺页和地址转换,串联操作系统内核、嵌入式 MPU 与性能分析。

适用场景

  • 理解 mmap、brk 和按需分页
  • 调试段错误和保护页
  • 调优大页 / TLB 压力
  • 对比 Cortex-M MPU 与完整 MMU 系统

工作流

1. 转换概览
Virtual address (VA)
├── TLB lookup → physical on hit
└── TLB miss → page table walk → fill TLB
        ├── valid PTE → physical address
        └── invalid → page fault (OS handles)
2. 页表(x86-64 四级示例)
CR3 → PML4 → PDPT → PD → PT → physical frame

Linux 在 x86_64 上使用 4 KiB 页(默认),并可选使用 2 MiB / 1 GiB 大页。

3. 缺页类型(简化版)
故障常见原因
主要缺页磁盘读取——文件支持的页面不在 RAM 中
次要缺页零填充或 COW 拆分
保护故障用户访问内核页面、违反 W^X
# Linux page fault stats
grep pgfault /proc/vmstat
4. TLB 压力

大型稀疏地址空间 + 随机指针追逐 → TLB 未命中占主导。

缓解措施:

  • mmap 大页(MAP_HUGETLB、madvise(MADV_HUGEPAGE))
  • 缩小工作集 / 提高局部性
  • NUMA 使用 numactl --membind
5. 嵌入式对比(Cortex-M)

许多 MCU 使用基于区域的 MPU,而非完整分页——没有 TLB,区域数量固定。应用处理器使用 MMU + 操作系统。

参见 skills/platform/riscv-privileged,了解 Sv39/Sv48。

6. 用户空间检查(Linux)
cat /proc/self/maps
pmap -x $$
7. Agent 用法
/virtual-memory-paging-and-tlb Explain why 4 KiB random access hurts TLB and hugepage helps

常见问题

症状原因修复方法
段错误VA 未映射修正指针;检查 maps
mmap 工作负载缓慢TLB 抖动使用大页;减少区域
fork 后 COW 激增共享页面在写入时拆分这是预期行为;可考虑 MAP_POPULATE
W^X 故障JIT 未正确执行 mprotect 流程将 RW 和 RX 映射分开
MCU 上物理地址错误没有 MMU——线性映射使用链接脚本地址

相关技能

  • skills/computer-architecture/memory-hierarchy-and-caches — 地址转换后的缓存
  • skills/kernel-dev/kernel-memory-management — 内核页分配器
  • skills/kernel/os-dev-scratch — 从零构建分页
  • skills/platform/riscv-privileged — Sv39 页表
  • skills/allocators/numa-programming — NUMA 与迁移

评论

支持 Markdown