新闻详情

新闻详情

首页 / 资讯中心 / 详情

linux kernel struct 之 ptdesc

发布时间:2026/9/30 11:25:48来源:尧图网络
linux kernel struct 之 ptdesc
struct ptdesc的定义在 Linux 内核的include/linux/mm_types.h文件中早期版本曾放在include/linux/pgtable.h。它的设计目标是将页表元数据从struct page中拆分出来目前通过完全覆盖overlaystruct page的内存布局来实现。定义代码根据内核补丁以 v6 版本为例其完整定义如下struct ptdesc { unsigned long __page_flags; union { struct rcu_head pt_rcu_head; struct list_head pt_list; struct { unsigned long _pt_pad_1; pgtable_t pmd_huge_pte; }; }; unsigned long _pt_s390_gaddr; union { struct mm_struct *pt_mm; atomic_t pt_frag_refcount; unsigned long _pt_pad_2; }; #if ALLOC_SPLIT_PTLOCKS spinlock_t *ptl; #else spinlock_t ptl; #endif unsigned int __page_type; atomic_t _refcount; #ifdef CONFIG_MEMCG unsigned long pt_memcg_data; #endif };核心字段说明字段说明__page_flags与page-flags相同页表场景下通常未使用pt_rcu_head用于延迟释放页表页的 RCU 回调与pt_list共用内存pt_list串联已使用的页表用于 s390 和 x86pmd_huge_pte受ptl保护用于透明大页THP场景_pt_s390_gaddr仅 s390 架构使用用于 gmap 地址追踪pt_mm仅 x86 架构使用用于 PGD页全局目录pt_frag_refcount仅 PowerPC 和 s390 使用用于碎片化页表追踪ptl页表锁保护页表操作ALLOC_SPLIT_PTLOCKS控制是指针还是内嵌_refcount引用计数与page-_refcount相同s390 页表使用pt_memcg_data内存 cgroup 数据追踪页表的内存使用关键设计约束定义末尾有一条静态断言这是整个设计的核心约束static_assert(sizeof(struct ptdesc) sizeof(struct page));这意味着ptdesc的大小不能超过struct page因为当前它完全复用struct page的内存空间。同时代码通过TABLE_MATCH宏断言关键字段的偏移量与struct page中对应字段完全一致确保两种类型可以安全地相互转换。在NOMMU配置下struct ptdesc的定义会被移到mm_types.h因为spinlock_t和struct page的定义顺序会影响编译。核心定位struct ptdesc目前完全覆盖overlay在struct page之上也就是说它暂时复用struct page的内存空间但以独立的类型存在。它的长期目标是让页表可以独立于struct page进行动态分配从而进一步精简struct page结构。与pgtable_t的关系在大多数架构上pgtable_t原本就是struct page *的 typedef。struct ptdesc的引入是为了逐步用struct ptdesc *替代pgtable_t使页表描述符的类型更加明确。不过这一转换面临架构差异的挑战在 s390、PowerPC、sparc 和 m68k除 SUN3上pgtable_t被定义为pte_t *因为每个页表可能小于一个PAGE_SIZE无法直接映射到单个struct page。因此struct ptdesc的推广需要各架构的配合。在内存管理中的角色struct ptdesc是页表操作分配、释放、遍历的核心载体。在___pmd_free_tlb中virt_to_ptdesc(pmd)就是将页表页的虚拟地址转换为struct ptdesc指针然后通过tlb_remove_ptdesc加入延迟释放队列。这种设计使得页表的生命周期管理可以与struct page解耦为未来更灵活的页表内存管理铺平道路。
网站建设高端定制企业官网
RELATED

相关资讯

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

较早相关资讯

最新相关资讯

SVM与SVR的本质区别:损失函数、支持向量与调参实战 2026/9/30 12:00:49

SVM与SVR的本质区别:损失函数、支持向量与调参实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
SRC 挖洞:Apache Tomcat 加密拦截器绕过深度复盘,CVE-2026-34486 fail-open 一行代码怎么打穿集群通信 2026/9/30 12:00:49

SRC 挖洞:Apache Tomcat 加密拦截器绕过深度复盘,CVE-2026-34486 fail-open 一行代码怎么打穿集群通信

作者 akihi(白帽攻防录讲师),某甲方网络安全工程师,合合 SRC 年度第一、腾讯 SRC 连续三年前十,单漏洞赏金 4w,擅长 Web/App/PC 客户端漏洞挖掘。专注中间件安全、反序列化漏洞、代码审计。本文基于公开 CV…

阅读更多 →
架构演进路径:从单机分库到微服务容器编排实战指南 2026/9/30 12:00:42

架构演进路径:从单机分库到微服务容器编排实战指南

读写分离、垂直分库、微服务、容器编排——这些词单独拿出来都能讲半小时,但真正让人头疼的是把它们串成一条演进路径时,每一步该怎么做、为什么要这么做。我经历过一个项目从单机部署一路走到容器编排的完整过程,途中踩了不少坑,…

阅读更多 →
TyHGB复合指标:基于CHARLS的胰岛素抵抗新标志物构建与验证 2026/9/30 12:00:42

TyHGB复合指标:基于CHARLS的胰岛素抵抗新标志物构建与验证

最近在CHARLS数据里折腾胰岛素抵抗相关指标的时候,我顺手去医院统计了一下PubMed上TyG类复合指标的发文量。坦白说,TyG-BMI、TyG-WC、TyG-WHtR这类组合已经被很多人做过了,CHARLS数据库上的相关论文一年比一年多,肉眼可见地卷起来…

阅读更多 →
Vue3 从入门到熟练:响应式、组件通信与工程化避坑指南 2026/9/30 12:00:42

Vue3 从入门到熟练:响应式、组件通信与工程化避坑指南

三年前我第一次把线上项目从 Vue2 迁到 Vue3, setup 里满屏的 ref 和 .value 让我一度怀疑这是不是同一个框架。后来陆续带过几个刚入行的同学,发现大家卡住的位置出奇地一致:不是语法写不出来,而是脑子里还留着 Vue2 那套 …

阅读更多 →
部门考核待处理模块全解析:流程逻辑、操作场景与清待技巧 2026/9/30 12:00:42

部门考核待处理模块全解析:流程逻辑、操作场景与清待技巧

部门考核页面上挂了几十条待办,点进去不知道先处理哪条;考核周期结束了,系统里还有一堆“待处理”没人管;明明已经评分了,流程却卡在“待处理”里不动。如果你也在被这些问题折腾,那这篇内容就是写给你的。…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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