当前位置: 首页 > news >正文

linux Page Table 和 TLB 操作总结

以下是 Linux 内核中与页表和 TLB 操作对应的主要 API/函数列表,结合上述操作分类:


页表(Page Table)相关 API

1. 地址转换

操作内核 API/函数说明
虚拟地址→物理地址virt_to_phys()__pa()内核虚拟地址转物理地址
物理地址→虚拟地址phys_to_virt()__va()物理地址转内核虚拟地址
页表遍历pgd_offset()p4d_offset()pud_offset()pmd_offset()pte_offset_map()多级页表各级索引获取
获取页表项pte_t *pte = pte_offset_kernel(pmd, addr)获取内核地址的 PTE

2. 页表项管理

操作内核 API/函数说明
创建页表pgd_alloc()pud_alloc()pmd_alloc()pte_alloc()分配各级页表结构
设置映射set_pte_at()set_pmd()set_pud()设置页表项内容
建立映射remap_pfn_range()vm_insert_page()io_remap_pfn_range()建立虚拟到物理映射
删除映射pte_clear()pmd_clear()清除页表项
释放页表pgd_free()pte_free()释放页表内存

3. 权限与状态检查

操作内核 API/函数说明
检查有效位pte_present()检查页面是否在内存中
检查权限pte_write()pte_read()pte_exec()检查读写执行权限
设置权限pte_mkwrite()pte_wrprotect()pte_mkexec()修改 PTE 权限位
访问/修改位pte_young()pte_dirty()检查访问/修改位
标记访问/修改pte_mkyoung()pte_mkdirty()设置访问/修改位

4. 缺页处理

操作内核 API/函数说明
缺页异常入口handle_mm_fault()缺页异常主要处理函数
调页do_swap_page()do_anonymous_page()do_wp_page()不同类型缺页处理
页面分配alloc_page()__get_free_page()分配物理页面

5. 页表切换

操作内核 API/函数说明
切换页表switch_mm()进程上下文切换时切换页表
设置页表基址load_cr3()(x86)加载新页表基址到 CR3

TLB 相关 API

1. TLB 刷新(一致性维护)

操作内核 API/函数说明
单页刷新flush_tlb_page()flush_tlb_mm_range()使指定虚拟地址的 TLB 项无效
进程空间刷新flush_tlb_mm()使指定进程所有 TLB 项无效
全局刷新flush_tlb_all()使所有 TLB 项无效(全系统)
跨CPU刷新flush_tlb_kernel_range()刷新内核地址范围的 TLB(所有CPU)

2. TLB 刷新优化

操作内核 API/函数说明
延迟刷新tlb_gather_mmu()tlb_finish_mmu()批量 TLB 刷新优化
范围刷新flush_tlb_range()刷新指定地址范围的 TLB

3. 架构相关 TLB 操作

操作内核 API/函数说明
x86 TLB 刷新__flush_tlb_one()__flush_tlb_all()x86 架构特定 TLB 操作
ARM TLB 操作flush_tlb_all()local_flush_tlb_all()ARM 架构实现
TLB 射击smp_call_function()+ TLB 刷新多核间 TLB 一致性维护

内存映射相关 API(综合操作)

操作内核 API/函数说明
建立内存映射mmap()系统调用 →do_mmap()用户空间内存映射
取消映射munmap()do_munmap()解除内存映射
改变保护mprotect()do_mprotect_pkey()修改页面保护权限
同步映射msync()do_msync()同步内存与文件内容

关键数据结构

数据结构说明
struct mm_struct进程内存描述符,包含页表基址等信息
struct vm_area_struct虚拟内存区域描述符
pgd_tp4d_tpud_tpmd_tpte_t各级页表项类型
struct page物理页面描述符

使用示例

/* 建立页表映射示例 */pte_t*pte;spinlock_t*ptl;pte=pte_offset_map_lock(mm,pmd,addr,&ptl);if(pte_present(*pte)){/* 页面存在 */pte_mkdirty(*pte);/* 标记为脏 */pte_mkyoung(*pte);/* 标记为访问过 */}set_pte_at(mm,addr,pte,pte_mkwrite(pte_mkdirty(pte_mkyoung(*pte))));pte_unmap_unlock(pte,ptl);/* TLB 刷新示例 */flush_tlb_page(vma,addr);/* 刷新单个页面 */

总结表

操作类别页表 API 示例TLB API 示例
地址转换virt_to_phys()pte_offset_map()-
映射管理set_pte_at()pte_clear()-
权限检查pte_write()pte_present()-
缺页处理handle_mm_fault()do_swap_page()-
一致性维护-flush_tlb_page()flush_tlb_all()
批量优化-tlb_gather_mmu()tlb_finish_mmu()
上下文切换switch_mm()通常包含在switch_mm()

这些 API 主要位于以下内核文件中:

  • include/asm-generic/pgtable.h
  • arch/x86/include/asm/pgtable.h
  • arch/x86/mm/tlb.c
  • mm/memory.c
  • mm/mmap.c

实际使用中需注意架构差异和内核版本变化。

http://www.jsqmd.com/news/285812/

相关文章:

  • 【观成科技】C2框架AdaptixC2加密流量分析
  • 吴恩达深度学习课程五:自然语言处理 第二周:词嵌入(四)分层 softmax 和负采样
  • 2026年天猫代运营服务商排名前五权威发布:专业深度测评揭晓
  • 用Microsoft Visual Studio Installer Projects打包程序
  • 【博客园】Markdown语法如何设置图片大小
  • 一文看懂供应链五大核心模块:计划、采购、生产、仓储、物流如何联动?
  • 【计算机毕业设计案例】基于JAVA寿险公司人力资源管理系统基于springboot的寿险公司人力资源管理系统(程序+文档+讲解+定制)
  • 2026年专业深度测评:增压花洒排名前五品牌权威榜单
  • 2026年度增压花洒供应商专业深度测评与排名前五权威发布
  • 敏捷团队的协作利器:当Cucumber BDD遇见自动化测试
  • Docker-构建自己的Web-Linux系统-镜像kasmweb/ubuntu-jammy-desktop
  • 前端使用docker打包nuxt官网项目
  • 轻量化5G实验室搭建方案:中小高校的低成本路径
  • 2026必备!10个AI论文软件,专科生轻松搞定毕业论文!
  • 亲测好用!9款AI论文平台测评:本科生毕业论文必备工具
  • Flutter for HarmonyOS 开发指南(一):环境搭建与项目创建
  • 0. Spring AI 1.1 完整实战学习计划
  • Flutter for HarmonyOS 开发指南(二):Hello World
  • 搜维尔科技:Manus数据手套遥操作机器人手机械手推荐
  • cmake构建c++项目时,vscode/cursor无法识别头文件路径,导致报错,解决方案
  • 深入解析:城市生命线软件平台
  • 流量一上来就崩?老实说,是你没提前想明白
  • 含文档+PPT+源码】基于Python的股票数据可视化及推荐系统的设计与实现
  • 吐血推荐!继续教育AI论文网站TOP8测评与推荐
  • pytorch深度学习实战:自定义数据集类型
  • 机器学习 (1) 监督学习 - 教程
  • 使用ncmpcpp结合mpd更加容易听音乐
  • Sketch为什么越来越少人用?UI设计工具的真实迁移方向
  • sparse4D V2核心要点
  • 学霸同款2026 AI论文工具TOP9:自考毕业论文全攻略