新闻详情

新闻详情

首页 / 资讯中心 / 详情

init remove_pte_table

发布时间:2026/9/29 11:50:01来源:尧图网络
init remove_pte_table
remove_pte_table是 x86-64 架构中用于拆除 PTE 层级页表映射的核心函数位于arch/x86/mm/init_64.c。它负责在内存热移除或 vmemmap 回收时将指定虚拟地址范围内的 PTE 条目清除并处理页表页的释放。核心作用逐页清除与条件释放这个函数遍历一个 PTE 页表中的所有条目对每个有效的 PTE 执行清除操作。它的关键设计在于区分 direct mapping内核直接映射和 non-direct mapping如 vmemmap因为两者的页表页释放策略完全不同。核心逻辑解析根据搜索到的补丁和源码函数的核心逻辑如下static void __meminit remove_pte_table(pte_t *pte_start, unsigned long addr, unsigned long end, bool direct) { unsigned long next, pages 0; pte_t *pte; phys_addr_t phys_addr; pte pte_start pte_index(addr); for (; addr end; addr next, pte) { next pte_addr_end(addr, end); if (!pte_present(*pte)) continue; /* 跳过低端物理地址 */ phys_addr pte_val(*pte) (addr PAGE_MASK); if (phys_addr (phys_addr_t)0x40000000) return; if (PAGE_ALIGNED(addr) PAGE_ALIGNED(next)) { /* * Do not free direct mapping pages since they were * freed when offlining, or simply not in use. */ if (!direct) free_pagetable(pte_page(*pte), 0); spin_lock(init_mm.page_table_lock); pte_clear(init_mm, addr, pte); spin_unlock(init_mm.page_table_lock); pages; } /* 后续版本移除了 !PAGE_ALIGNED 分支 */ } flush_tlb_all(); if (direct) update_page_count(PG_LEVEL_4K, -pages); }关键设计细节direct参数的作用这是最核心的区分。direct true内核线性映射不释放PTE 指向的页面。注释明确指出“direct mapping pages 在 offlining 时已被释放或根本不在使用中”。direct mapping 的页面从未被“分配”过它们只是物理内存的直接映射因此无需释放。direct falsevmemmap 等非直接映射调用free_pagetable()释放 PTE 指向的页面。pte_clear的锁保护清除 PTE 条目时持有init_mm.page_table_lock防止并发修改。update_page_count仅在direct true时更新页表统计因为只有 direct mapping 的页面计数才有意义。历史演进根据 2021 年的补丁函数中原本存在的!PAGE_ALIGNED分支被移除。该分支用于处理 vmemmap 中不完整的页面用PAGE_INUSE标记未使用的struct page但后来被简化。这意味着现代内核中remove_pte_table只处理页对齐的完整页面清除。在页表拆除链条中的位置remove_pte_table是页表拆除递归调用链的最底层remove_pagetable → remove_p4d_table → remove_pud_table → remove_pmd_table → remove_pte_table上层函数如remove_pmd_table在调用完remove_pte_table后会继续调用free_pte_table()释放 PTE 页表本身。这种分层设计确保了从顶层 PGD 到底层 PTE 的逐级清理和释放。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

先定问题模型再动手:J-Space Cognition Suite五步法防止AI误读需求(Commit/Move/Hidden/World/Success) 2026/9/29 13:01:16

先定问题模型再动手:J-Space Cognition Suite五步法防止AI误读需求(Commit/Move/Hidden/World/Success)

先定问题模型再动手:J-Space Cognition Suite五步法防止AI误读需求(Commit/Move/Hidden/World/Success) 【免费下载链接】J-Space-Cognition-Suite J-Space Cognition Suite — a model-agnostic inference-time control suite for deep reas…

阅读更多 →
改进YOLO论文的确定性配方:从模块组合到实验验证 2026/9/29 13:01:16

改进YOLO论文的确定性配方:从模块组合到实验验证

1. 先说结论:这30篇论文到底在改什么刚入坑目标检测那会儿,我也跟很多人一样,满脑子都是“怎么把YOLO改出一个新结构”。结果翻了几十篇中文核心期刊的改进YOLO论文之后,我发现绝大多数论文做的根本不是“结构发明”,而…

阅读更多 →
Laya 预测 Hooks 实战指南:生产级模式与反模式全解析 2026/9/29 13:01:09

Laya 预测 Hooks 实战指南:生产级模式与反模式全解析

人工智能NLP强化学习 【免费下载链接】laya Non-autoregressive System 1 decision engine. Typed choice, score and yes/no decisions over any text in a single forward pass, in 100 languages, with a router that picks the right checkpoint per request. 项目地址&…

阅读更多 →
网络分层与抓包分析:用Wireshark和Scapy快速定位故障层 2026/9/29 13:00:50

网络分层与抓包分析:用Wireshark和Scapy快速定位故障层

简介:《网络传输过程及各层次分析》是一份面向计算机网络初学者、需要系统梳理网络分层知识的讲解型文档,以数据封装与传递为主线,完整覆盖OSI七层模型和TCP/IP四层协议栈。文档从应用层HTTP、传输层TCP/UDP、网络层IP,到数据链路…

阅读更多 →
达梦数据库同步工具(DMDRS)常见报错汇总与解决方案 2026/9/29 13:00:50

达梦数据库同步工具(DMDRS)常见报错汇总与解决方案

一、内置库无法正常启动DM的内置库是在安装包dmdrs_rev231374_x86_rh6_64_20260909.bin中的,解压之后可以直接使用,默认为企业版。但是如果主机原本安装了DM数据库,并且配置了环境变量,内置库会受到环境变量的影响。解决方案&…

阅读更多 →
交换芯片控制通路解析:从报文上送到可编程流水线 2026/9/29 13:00:37

交换芯片控制通路解析:从报文上送到可编程流水线

上篇聊数据通路的时候,我把交换芯片比作一条昼夜不停的高速公路:报文从入端口进来,经过解析、查表、修改、排队,再从出端口离开,全程不需要“大脑”参与。这篇把视角转到控制通路上,情况就完全不一样了。控…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉