news 2026/9/25 7:00:27

math PFN_DOWN

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
math PFN_DOWN

PFN_DOWN是 Linux 内核中用于将物理地址转换为页帧号(PFN,Page Frame Number)的宏。它定义在include/linux/pfn.h中,是内存管理中地址转换的基础工具。

定义与原理

#define PFN_DOWN(x) ((x) >> PAGE_SHIFT)

它的核心逻辑是将地址右移PAGE_SHIFT位,相当于除以PAGE_SIZE(通常是 4096 字节)。

在 x86 架构下,PAGE_SHIFT为 12,因此:

PFN_DOWN(addr) = addr / 4096

核心作用

将物理地址转换为它所在的页帧号。页帧号是物理内存管理的基本单位,内核用 PFN 来索引struct page数组(即vmemmap)。

表达式结果说明
PFN_DOWN(0)0地址 0 属于第 0 页
PFN_DOWN(4095)0仍在第 0 页内
PFN_DOWN(4096)1进入第 1 页
PFN_DOWN(0x100000)2561MB 地址对应第 256 页

配套宏

PFN_DOWN通常与以下宏配合使用:

宏作用示例
PFN_DOWN(x)地址 → 页帧号(向下取整)PFN_DOWN(4095) = 0
PFN_UP(x)地址 → 页帧号(向上取整)PFN_UP(4095) = 1
PFN_PHYS(x)页帧号 → 物理地址PFN_PHYS(1) = 4096
PFN_ALIGN(x)地址向上对齐到页边界PFN_ALIGN(4095) = 4096

它们之间的关系可以用一个公式概括:

PFN_PHYS(PFN_DOWN(addr)) <= addr < PFN_PHYS(PFN_UP(addr))

内核中的典型用途

  1. 建立页帧号与struct page的映射:

    struct page *page = pfn_to_page(PFN_DOWN(phys_addr));
  2. 计算内存区域包含的页数:

    nr_pages = PFN_DOWN(end) - PFN_DOWN(start);
  3. DMA 和内存映射:将设备物理地址转换为页帧号,以便进行内存管理操作。

使用注意

  • PFN_DOWN是向下取整,意味着地址落在某页的任意位置,都返回该页的页帧号。

  • 如果需要向上取整(例如计算覆盖某段内存所需的页数),应使用PFN_UP。

  • 该宏假设输入是物理地址,不适用于虚拟地址。虚拟地址到页帧号的转换需要使用virt_to_pfn等函数。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/25 6:59:12

微信小程序房屋租赁系统开发全攻略:从技术选型到上线避坑

简介&#xff1a;围绕微信小程序房屋租赁管理系统的毕业设计完整资料包&#xff0c;面向计算机专业学生在课程设计、毕业答辩或SSM框架实践中的需求&#xff0c;覆盖房源管理、租房订单、账单、用户及中介角色等核心功能&#xff0c;实现房屋租赁业务的系统化流程。压缩包共106…

作者头像 李华
网站建设 2026/9/25 6:56:54

电商API接口接入前准备清单:鉴权、沙箱与数据同步避坑指南

先说点实在的。做电商系统的接口对接&#xff0c;很多人上来就打开文档写代码&#xff0c;结果三天两头被鉴权失败、字段对不上、回调地址不通这些问题卡住。我见过不少团队&#xff0c;明明天天都在跟订单、商品、库存打交道&#xff0c;真到要对接平台API的时候&#xff0c;反…

作者头像 李华
网站建设 2026/9/25 6:55:07

ESP32上WASM无法直接调用硬件的根本原因解析

/* 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 6:54:23

TypeDoc 文档校验:validation 选项族与警告转错误机制详解

开发工具文档 【免费下载链接】typedoc Documentation generator for TypeScript projects. 项目地址&#xff1a; https://gitcode.com/gh_mirrors/ty/typedoc 点击查看 免费下载 本篇指南围绕 TypeDoc 的文档校验&#xff08;validation&#xff09;子系统展开&#xff0c;系…

作者头像 李华