page_alloc free_contig_range

发布时间:2026/10/21 2:31:00

page_alloc free_contig_range free_contig_range()是alloc_contig_range()的配套释放函数用于释放通过连续内存分配接口获得的页块。核心作用与背景前面讲过alloc_contig_range()/alloc_contig_pages()通过隔离和迁移从伙伴系统中“挖”出一段连续的物理内存。这些页在分配时是独立的单页每页引用计数为 1非复合页因此不能用常规的free_pages()按阶数整体释放。free_contig_range()就是专门用来释放这类连续内存的逐页释放。核心实现实现非常直接/** * free_contig_range() - Free pages in a range * pfn: The start pfn of the pages being freed. * nr_pages: The number of pages being freed */ void free_contig_range(unsigned long pfn, unsigned long nr_pages) { unsigned long end pfn nr_pages; while (pfn end) __free_page(pfn_to_page(pfn)); } EXPORT_SYMBOL(free_contig_range);逐步解析1. 计算结束 PFNunsigned long end pfn nr_pages;把起始 PFN 和页数转换为[pfn, end)区间。2. 逐页释放while (pfn end) __free_page(pfn_to_page(pfn));遍历[pfn, end)中的每一页。对每页调用__free_page()等价于__free_pages(page, 0)作为order-0 单页释放回伙伴系统。每页的引用计数在分配时已被设为 1__free_page()会将其归零并归还。3.EXPORT_SYMBOL导出给模块使用因为 CMA、内存热插拔等子系统可能需要释放连续内存。与alloc_contig_range()的对称性函数操作alloc_contig_range()隔离 迁移 取走空闲页返回后页是独立的单页free_contig_range()逐页__free_page()归还给伙伴系统两者是严格配对的用alloc_contig_range()分配的连续内存必须用free_contig_range()释放不能用free_pages()。为什么不能整体释放alloc_contig_range()分配的页有几个特殊性非复合页没有__GFP_COMP没有 head/tail 关系不能作为一个整体处理。独立引用计数每页引用计数为 1独立管理。可能不对齐范围可能不是MAX_ORDER对齐的无法用单一的order描述。迁移类型可能混合释放时每页会根据自己的迁移类型归入对应链表。所以只能逐页释放让伙伴系统在每页释放时自行尝试合并。典型使用场景1. CMA 释放CMA 分配器在释放连续内存时调用free_contig_range()。2. 内存热插拔下线内存的流程中隔离出的页最终通过它归还。3. 驱动释放 DMA 缓冲某些驱动通过alloc_contig_pages()获取大块连续内存后用free_contig_range()释放。总结free_contig_range()是alloc_contig_range()的配套逐页释放函数它遍历[pfn, pfn nr_pages)中的每一页调用__free_page()作为 order-0 单页归还给伙伴系统。之所以不能整体释放是因为alloc_contig_range()分配的页是独立的非复合单页没有 head/tail 关系且范围可能不对齐、迁移类型可能混合。它是 CMA、内存热插拔和连续 DMA 缓冲等场景释放连续物理内存的标准接口。
延伸阅读

更多相关文章

2026/10/21 2:31:00

page_alloc zone_pcp_enable

PCP(Per-CPU Pages)缓存的禁用与启用函数,用于在内存热插拔等需要“冻结”PCP 缓存的场景中,临时关闭某个 zone 的 PCP 机制。一、zone_pcp_disable() —— 禁用 zone 的 PCP 缓存void zone_pcp_disable(struct zone *zone) {mute…

2026/10/21 2:31:00

page_alloc zone_pcp_reset

zone_pcp_reset() 是一个内部函数,用于在内存热移除(memory hot-remove) 时,释放某个 zone 已分配并排空的 per-CPU 页缓存(PCP)结构,并将其重置回 boot_pageset。核心作用:内存热移…

2026/10/21 2:31:00

page_alloc __offline_isolated_pages

__offline_isolated_pages 是内存热移除流程中的核心函数,用于在页面已被成功隔离的前提下,将它们从伙伴系统中彻底移除,并标记对应的内存段为离线状态。核心实现unsigned long __offline_isolated_pages(unsigned long start_pfn,unsigned l…

2026/10/21 5:11:20

NLP与无人船:从自然语言指令到自主靠泊的完整技术链路

去年我带着组里的几位同学把一个挺有意思的项目从零做到了仿真验证——给一艘无人船加一套自然语言操控链路,让操作员可以直接说“慢速驶向测试场北侧码头,左舷靠泊”或者“绕开右前方漂浮物,停到A区泊位”,船载系统自己去完成意图…

2026/10/21 5:11:20

鸿蒙+Flutter跨平台实战:桌面图标焕新方案全解析

桌面图标焕新大师这个名字,听起来像某个手机美化App的宣传语,但它本质上是一个很典型的跨平台实战项目:把视觉设计、资源管理、系统桌面机制和Flutter渲染能力串在一起,最终在鸿蒙设备上完成“一键切换桌面图标风格”的完整闭环。…

2026/10/21 5:11:20

从ReAct到龙虾架构:AI Agent编排演进与工程实践

这两年AI Agent架构的文章我看了不下几十篇,名字一个比一个唬人:ReAct、Plan-and-Execute、Reflexion、多Agent系统、图式编排、龙虾架构……但真能把“从A到B是怎么一步步走出来”讲明白的,确实不多。尤其对小程序员来说,最痛苦的…

2026/10/21 5:11:20

C++游戏服务器集群编译部署实战:14个组件从零到上线

做游戏服务器集群的编译和部署,最怕的不是代码本身出问题,而是十四五个进程一起上线时,依赖顺序、配置路径、端口占用、环境差异这些琐碎的事能把人磨到没脾气。我前阵子刚把一套基于 C 的模拟项目集群完整跑通,从零开始编译了 14…

2026/10/21 5:11:20

VS2026下C++游戏服务器集群化拆分与部署实战

我前后折腾了大概两周时间,才把一个原本耦合严重的单体游戏后端,拆成了由 14 个独立 C 进程组成的集群,然后在 VS2026 下完成了整套编译、部署和压测闭环。这个过程里踩过的坑,比我想象中多得多,但拆完之后回头看&…

2026/10/21 5:06:20

轻量地图组件库 lingbot-map:Canvas 2D架构设计与性能优化实践

1. 项目定位与设计思路1.1 lingbot-map 到底解决什么问题lingbot-map 是我目前在一套机器人业务系统里维护的地图组件库,最初立项时只有一个朴素需求:业务侧需要在一个 web 环境里展示机器人所在场地的实时位置、移动轨迹、工作状态,同时还要…

2026/10/21 4:53:08

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/21 0:00:35

交通流仿真实战:IDM跟驰与MOBIL换道模型参数调优与避坑指南

简介:这份资源是面向交通工程学习者与Python开发者的微观交通流仿真项目,核心实现智能驾驶模型(IDM)下的车辆跟驰与换道行为,可用于理解速度、密度与流量之间的动态关系,适合具备Python基础、希望深入交通模…

2026/10/21 0:00:35

揭穿智能体表面顺从:用追踪代码重建任务执行确定性

1. 表面顺从不是智能体的“礼貌”,而是任务执行链路上的隐性断点最近在调试一个跨平台长周期任务调度系统时,我反复遇到一种令人困惑的现象:智能体在用户指令发出后,几乎秒级响应“已收到”“正在处理”“请稍候”,UI上…

2026/10/21 0:00:35

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事:AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里,按宣传口径,本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”,而是这话背后的含金量——它把过去只能…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑