新闻详情

新闻详情

首页 / 资讯中心 / 详情

pgd_page_vaddr、p4d_page_vaddr、pud_page_vaddr、pmd_page_vaddr

发布时间:2026/9/18 10:03:38来源:尧图网络
pgd_page_vaddr、p4d_page_vaddr、pud_page_vaddr、pmd_page_vaddr
pgd_page_vaddr、p4d_page_vaddr、pud_page_vaddr、pmd_page_vaddr是一组功能相似的函数它们的作用简单直接从给定层级的页表项中提取出下一级页表的虚拟地址。核心功能页表遍历的钥匙在Linux内核的4级或5级页表结构中每一级页表项都记录着下一级页表的物理地址。当内核需要从当前层级例如PUD向下遍历到下一层级例如PMD时pud_page_vaddr(pud)就负责将这个物理地址转换为内核可以直接访问的虚拟地址。统一的实现原理尽管不同架构如x86和ARM64的实现略有差异但其核心逻辑可以概括为两个步骤提取物理页框号 (PFN)通过*_val系列宏如pud_val获取页表项中的原始数值然后使用预定义的掩码如PTE_PFN_MASK提取出下一页表的物理页框号PFN。转换为虚拟地址将上一步得到的PFN物理地址通过__va()宏转换为内核虚拟地址。以x86架构的pgd_page_vaddr为例其定义为static inline unsigned long pgd_page_vaddr(pgd_t pgd) { return (unsigned long)__va((unsigned long)pgd_val(pgd) PTE_PFN_MASK); }pud_page_vaddr和pmd_page_vaddr也采用完全相同的模式只是操作的页表项类型不同。主要用途页表遍历这些函数最直接的应用场景是页表遍历。例如在从pgd定位pud时pud_offset函数内部正是通过pgd_page_vaddr获取PUD页表的虚拟地址然后加上索引计算出目标条目。static inline pud_t *pud_offset(pgd_t *pgd, unsigned long address) { return (pud_t *)pgd_page_vaddr(*pgd) pud_index(address); }历史演进从宏到内联函数在早期的内核版本中pgd_page_vaddr等函数曾被实现为宏。后来为了提升代码的可读性、类型安全性并消除宏带来的副作用内核开发者通过一系列补丁将其逐步重构为静态内联函数static inline统一了x86架构下的实现。除了x86架构这些函数的概念在其他架构如ARM64上也被以类似的方式实现和应用。
网站建设高端定制企业官网
RELATED

相关资讯

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

较早相关资讯

最新相关资讯

Debian 12 安装与配置实战:从启动盘到Docker部署全指南 2026/9/18 10:01:34

Debian 12 安装与配置实战:从启动盘到Docker部署全指南

1. 为什么我现在还在推荐 Debian 12,以及你该怎么选版本玩 Linux 这么多年,我装过发行版的数量两只手数不过来,但如果是给服务器、给生产环境、给不想天天折腾的日用机器选系统,Debian 一直是我心里最稳的那一个。2023 年年中正式…

阅读更多 →
TaoToken 管 Key,长期运行智能体的记忆校验怎么跑 2026/9/18 10:01:34

TaoToken 管 Key,长期运行智能体的记忆校验怎么跑

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

阅读更多 →
DeepSeek Harness Code Mode 子调用渲染:Trajectory 的 subtool 交错单元与 Waterfall 的真实计时子泳道 2026/9/18 10:01:34

DeepSeek Harness Code Mode 子调用渲染:Trajectory 的 subtool 交错单元与 Waterfall 的真实计时子泳道

DeepSeek Harness Code Mode 子调用渲染:Trajectory 的 subtool 交错单元与 Waterfall 的真实计时子泳道 【免费下载链接】deepseek-harness DeepSeek Harness: Everything is a Plugin. 项目地址: https://gitcode.com/gh_mirrors/de/deepseek-harness 本文…

阅读更多 →
领域专家管上下文,Agent 跑任务用 TaoToken Key 2026/9/18 10:01:34

领域专家管上下文,Agent 跑任务用 TaoToken Key

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

阅读更多 →
Shell脚本编程基础与实战技巧 2026/9/18 10:01:34

Shell脚本编程基础与实战技巧

1. Shell脚本基础编程概述作为一个在Linux环境下工作多年的系统管理员,我深刻体会到Shell脚本在日常工作中的重要性。Shell脚本就像一把瑞士军刀,能够自动化处理各种重复性任务,从简单的文件操作到复杂的系统管理,几乎无所不能。S…

阅读更多 →
NocoBase 区块插件实战:定义 SimpleBlockModel、注册模型并用 Flow 实现可配置渲染 2026/9/18 9:58:34

NocoBase 区块插件实战:定义 SimpleBlockModel、注册模型并用 Flow 实现可配置渲染

NocoBase 区块插件实战:定义 SimpleBlockModel、注册模型并用 Flow 实现可配置渲染 【免费下载链接】nocobase NocoBase is an open-source AI no-code platform for building business systems fast. Instead of generating everything from scratch, AI works on…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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