首页/新闻资讯/正文详情

math PFN_ALIGN

发布时间:2026/9/25 4:28:41 来源:云帆数科 栏目:资讯中心
math PFN_ALIGN
PFN_ALIGN是 Linux 内核中用于将地址向上对齐到页边界的宏。它与PFN_DOWN、PFN_UP同属include/linux/pfn.h中的页帧号工具集但作用略有不同它直接操作地址返回对齐后的地址而不是页帧号。定义与原理#define PFN_ALIGN(x) (((x) (PAGE_SIZE - 1)) PAGE_MASK)或者等价地#define PFN_ALIGN(x) ((x PAGE_SIZE - 1) ~(PAGE_SIZE - 1))在 x86 架构下PAGE_SIZE为 4096PAGE_MASK为~4095因此PFN_ALIGN(x) (x 4095) ~4095核心作用将任意地址向上取整到最近的页边界。如果地址已经落在页边界上则返回该地址本身。表达式结果说明PFN_ALIGN(0)0已经是页边界PFN_ALIGN(1)4096向上对齐到下一页PFN_ALIGN(4095)4096仍在第 0 页内对齐到第 1 页起始PFN_ALIGN(4096)4096已经是页边界不变PFN_ALIGN(4097)8192向上对齐到下一页与其他宏的对比宏作用示例PFN_ALIGN(x)地址向上对齐到页边界返回地址PFN_ALIGN(4095) 4096PFN_DOWN(x)地址向下取整为页帧号返回PFNPFN_DOWN(4095) 0PFN_UP(x)地址向上取整为页帧号返回PFNPFN_UP(4095) 1PFN_PHYS(x)页帧号转换为物理地址PFN_PHYS(1) 4096它们之间的关系可以用一个公式概括PFN_ALIGN(x) PFN_PHYS(PFN_UP(x))也就是说PFN_ALIGN等价于先向上取整得到页帧号再将该页帧号转换回物理地址。内核中的典型用途内存分配确保分配的内存起始地址按页对齐满足硬件或 DMA 的要求。void *buf kmalloc(size PAGE_SIZE); void *aligned (void *)PFN_ALIGN((unsigned long)buf);计算映射范围确定一段内存区域需要映射的页边界。start_page PFN_DOWN(start); end_page PFN_DOWN(PFN_ALIGN(end) - 1);DMA 缓冲区对齐设备 DMA 操作通常要求缓冲区按页对齐PFN_ALIGN用于确保满足这一要求。使用注意PFN_ALIGN是向上取整可能返回比输入地址更大的值。该宏假设输入是地址物理或虚拟地址均可取决于上下文返回的是对齐后的地址。如果需要向下对齐到页边界可以使用PFN_DOWN(x) PAGE_SHIFT或直接x PAGE_MASK。与round_up(x, PAGE_SIZE)功能相似但PFN_ALIGN更明确地表达了页对齐的语义。

相关推荐

从零开始学硬件:用人体解剖学拆解电路板系统框架
从零开始学硬件:用人体解剖学拆解电路板系统框架

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

ESP32开启-O2优化后代码跑飞?三个根因与排查指南
ESP32开启-O2优化后代码跑飞?三个根因与排查指南

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

C语言经典100题全解析:从基础语法到指针与文件操作一次讲透
C语言经典100题全解析:从基础语法到指针与文件操作一次讲透

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

STM32嵌入式开发入门进阶:选型、外设实战与调试避坑指南
STM32嵌入式开发入门进阶:选型、外设实战与调试避坑指南

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

STM32CubeMX与Keil5联合开发环境搭建完整指南:从安装到点灯
STM32CubeMX与Keil5联合开发环境搭建完整指南:从安装到点灯

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

SQL Server 扩展安全更新(ESU)注册信息收集指南:T-SQL 与 PowerShell 脚本实战解析
SQL Server 扩展安全更新(ESU)注册信息收集指南:T-SQL 与 PowerShell 脚本实战解析

示例工程数据库教程后端 【免费下载链接】sql-server-samples Azure Data SQL Samples - Official Microsoft GitHub Repository containing code samples for SQL Server, Azure SQL, Azure Synapse, and Azure SQL Edge 项目地址: https://gitcode.com/gh_mirrors… · 2026/9/25 5:33:53

天猫复购预测:从离线高分到线上可干预的因果建模实践
天猫复购预测:从离线高分到线上可干预的因果建模实践

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

MikroORM 在 Babel 与 SWC 转译环境下的装饰器元数据配置完整指南
MikroORM 在 Babel 与 SWC 转译环境下的装饰器元数据配置完整指南

后端 【免费下载链接】mikro-orm TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, MariaDB, MS SQL Server, PostgreSQL and SQLite/libSQL databases. 项目地址: https://gitcode.com/gh_mir… · 2026/9/25 5:33:47

华为CE8800密码过期警告处理:机制、操作与排查实战
华为CE8800密码过期警告处理:机制、操作与排查实战

上周远程登一台 CE8850 做季度巡检,SSH 连上去之后,屏幕上除了正常的版本信息,还多了一行格外扎眼的提醒:Warning: The password will expire in 21 days. The password needs to be changed, Continue? [Y/N]:干网络这一行&… · 2026/9/25 5:33:41

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

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

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

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

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

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

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码