尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
page_alloc zone_spans_last_pfn
zone_spans_last_pfn()是alloc_contig_pages()在扫描候选 PFN 范围时用于边界检查的辅助函数。它判断一个从start_pfn开始、长度为nr_pages的范围其最后一页是否仍然落在指定的 zone 内。核心实现static bool zone_spans_last_pfn(const struct zone *zone, unsigned long start_pfn, unsigned long nr_pages) { unsigned long last_pfn start_pfn nr_pages - 1; return zone-zone_start_pfn last_pfn last_pfn zone_end_pfn(zone); }逻辑解析1. 计算最后一页的 PFNunsigned long last_pfn start_pfn nr_pages - 1;范围是[start_pfn, start_pfn nr_pages)所以最后一页的 PFN 是start_pfn nr_pages - 1。减 1 是关键——nr_pages是页数不是结束 PFN。2. 判断最后一页是否在 zone 内return zone-zone_start_pfn last_pfn last_pfn zone_end_pfn(zone);zone-zone_start_pfnzone 的起始 PFN包含。zone_end_pfn(zone)zone 的结束 PFN不包含等于zone_start_pfn spanned_pages。两个条件都满足说明最后一页在 zone 内。为什么只检查最后一页因为alloc_contig_pages()的扫描是从 zone 起始位置按nr_pages对齐向上推进的pfn ALIGN(zone-zone_start_pfn, nr_pages); while (zone_spans_last_pfn(zone, pfn, nr_pages)) { if (pfn_range_valid_contig(zone, pfn, nr_pages)) { ... } pfn nr_pages; }pfn从对齐后的起始位置开始每次递增nr_pages。只要第一页在 zone 内由循环起点保证且最后一页也在 zone 内那么中间的页必然也在 zone 内因为 zone 是连续 PFN 区间。所以只检查最后一页就够了无需遍历整个范围。这是一个性能优化。与zone_spans_pfn()的关系前面在get_pfnblock_bitmap_bitidx()的VM_BUG_ON_PAGE中见过zone_spans_pfn()static inline bool zone_spans_pfn(const struct zone *zone, unsigned long pfn) { return zone-zone_start_pfn pfn pfn zone_end_pfn(zone); }zone_spans_last_pfn()就是对范围最后一页调用zone_spans_pfn()的逻辑只是没有直接调用它而是内联了相同的判断并多做了一步last_pfn的计算。在调用链中的位置alloc_contig_pages(nr_pages, gfp_mask, nid, nodemask) └── for_each_zone_zonelist_nodemask(zone, ...): ├── pfn ALIGN(zone-zone_start_pfn, nr_pages) └── while (zone_spans_last_pfn(zone, pfn, nr_pages)): // ← 这里 ├── if (pfn_range_valid_contig(zone, pfn, nr_pages)) │ └── __alloc_contig_pages(pfn, nr_pages, gfp_mask) └── pfn nr_pages为什么需要它alloc_contig_pages()需要确保候选范围不跨越 zone 边界——因为alloc_contig_range()要求所有页属于同一个 zonepfn_range_valid_contig()也会检查page_zone(page) ! z。zone_spans_last_pfn()作为循环条件当范围超出 zone 边界时自动终止扫描避免对无效范围调用pfn_range_valid_contig()。边界情况nr_pages 0last_pfn start_pfn - 1可能下溢或落在 zone 外但alloc_contig_pages()不会用 0 调用它。范围恰好到 zone 末尾last_pfn zone_end_pfn(zone) - 1满足条件返回true。范围恰好超出 zone 末尾last_pfn zone_end_pfn(zone)不满足 zone_end_pfn(zone)返回false循环终止。总结zone_spans_last_pfn()是alloc_contig_pages()扫描循环的边界守门人它计算候选范围的最后一页 PFN判断它是否仍在 zone 的[zone_start_pfn, zone_end_pfn)区间内。由于扫描是按nr_pages对齐递增的只需检查最后一页即可保证整个范围都在 zone 内。当范围超出 zone 边界时返回false循环自动终止避免对无效范围做后续检查。
RELATED

相关推荐

华东师大:从单纯堆环境到系统级自我进化

华东师大:从单纯堆环境到系统级自我进化

📖标题:WEFT: Scaling Tool-Use Post-Training for General-Purpose Agents 🌐来源:arXiv, 2609.36887v1 🛎️文章简介 🔸研究问题:如何在不只是简单增加可执行环境数量的情况下,通过优化整个代理交互系统来提升大模型使用工具的能力? 🔸主要贡献:论文提出了W…

📅 2026/10/21 2:30:45
AI落地的替代悖论:裁员预期如何摧毁AI最需要的经验供给

AI落地的替代悖论:裁员预期如何摧毁AI最需要的经验供给

【摘要】埃森哲《2026中国企业数字化转型指数》覆盖七个行业160余家中国企业,数据显示生成式AI规模化应用占比从2025年的46%升至2026年的88%,但实现显著业务成果的企业仅从9%升至14%,仅34%完成配套组织架构重构。围绕AI落地的核心替代悖论&am…

📅 2026/10/21 2:30:45
106.从中序与后序遍历序列构造二叉树

106.从中序与后序遍历序列构造二叉树

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

📅 2026/10/21 2:30:45
MORE NEWS

更多资讯

📰

VS Code高效开发指南:工作区、多光标与调试技巧

1. 第一次使用就该搞懂的工作区概念:文件夹与.code-workspace很多人上手VS Code,习惯就是点击"文件-打开文件夹",把一个项目目录拖进窗口就开始写代码。这个流程对单仓库项目完全没问题,直到你开始同时维护多个仓库、前…

📰

统信UOS服务器部署OpenClaw AI Agent完整避坑手册

刚在一台统信 UOS V2500 服务器上把 OpenClaw AI Agent 完整跑通,前后踩了大大小小七八个坑,这里把整个安装部署过程整理成一份可照着抄的手册。UOS 服务器版和常见的 x86 发行版不太一样,尤其涉及 Python 版本、动态库、编译工具链这几块&am…

📰

Kubernetes生产实战:HPA自动扩缩容与Helm编排实践

1. 先搞清楚这两个东西到底在解决什么问题1.1 扩容这件事,为什么不能靠手点我见过太多团队在 Kubernetes 上跑业务,第一年风平浪静,第二年一到流量高峰就全员进入“备战状态”。运维盯着 Grafana 看流量,流量一涨立刻 kubectl sca…

📰

HPA与Helm实战:Kubernetes自动扩缩容与模板化部署

如果你负责维护一个 Kubernetes 集群,或者正打算把业务往容器平台上迁移,那么 HPA 和 Helm 这两样东西早晚会一起出现在你的工作清单里。HPA 干的事情比较纯粹:让应用的副本数跟着流量自动变化,流量大了自动扩容,闲下来…

📰

单周期RISC-V CPU设计:Vivado实战与FPGA落地指南

简介:本资源是一套基于Verilog实现的单周期CPU完整FPGA设计工程,面向数字电路、计算机组成原理课程学习者及FPGA初学者,旨在通过可综合、可仿真的真实项目,直观呈现取指、译码、执行、写回等CPU核心流程,解决教学中抽象…

📰

用GDAL实现遥感影像裁剪:从范围裁剪到批量处理实战

搞遥感影像处理的人,迟早都会碰到影像裁剪这个需求。无论是从一幅标准景影像里切出研究区,还是按行政区边界做镶嵌裁剪,抑或是给深度学习模型准备训练切片,这一步几乎绕不开。GDAL 是我这些年用得最顺手的工具,没有之一…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬