物理内存组织架构与Buddy分配器关系分析

物理内存组织架构与Buddy分配器关系分析

在Linux内核中,物理内存的管理是一个分层级的复杂系统。为了高效地应对不同硬件架构(如NUMA)和不同的内存需求(如DMA访问限制),Linux建立了严密的物理内存组织架构。而Buddy分配器(伙伴算法)则是这个架构中用于管理空闲页面的核心机制。本文将分析物理内存的组织方式以及Buddy分配器是如何嵌入其中发挥作用的。

引导内存分配器(memblock):启动早期使用,记录物理内存与保留区;系统起来后把可用内存交给 buddy。
zone:物理内存的分区视图(DMA/NORMAL/MOVABLE),是 buddy 运行的“管理边界”。
buddy 分配器:每个 zone 内的页级分配器,提供物理页(连续页)给上层。
slab/SLUB:对象级分配器,从 buddy 申请页,然后切成对象缓存给 kmalloc 等使用。
一句话:memblock 早期 → buddy 管页(按 zone) → slab 管对象。

一、物理内存组织架构

Linux内核采用Node(节点) -> Zone(区域) -> Page(页)的三级结构来描述物理内存。

1. 节点 (Node)

在NUMA(非一致性内存访问)架构中,内存被划分为多个节点。每个CPU都有其本地内存节点,访问速度最快。

  • 数据结构:struct pglist_data(typedef为pg_data_t)。
  • 作用:它是内存管理的最高层级容器。

2. 区域 (Zone)

为了适应硬件限制,每个Node内的内存被进一步划分为不同的区域。

  • 数据结构:struct zone
  • 常见的Zone包括:
    • ZONE_DMA/ZONE_DMA32:用于旧式硬件或32位设备进行DMA操作的低地址内存。
    • ZONE_NORMAL:内核可以直接映射的普通内存区域。
    • ZONE_HIGHMEM:32位系统中无法直接映射的高端内存。
    • ZONE_MOVABLE:用于可热插拔或通过内存碎片整理可移动的内存。

3. 页 (Page)

物理内存管理的最小单位,通常为4KB、8KB或更大。

  • 数据结构:struct page
  • 所有的物理页都在内存映射数组mem_map中有一个对应的描述符。

二、Buddy分配器 (伙伴算法)

Buddy分配器是Linux内核中用于解决外部碎片问题的一种物理内存管理算法。它不直接管理单个字节,而是页框(Page Frame)为基本单位。

核心原理

Buddy分配器将空闲内存分为不同阶(Order)的块链表进行管理。

  • 阶 (Order):表示内存块包含2 n 2^n2n个连续物理页。通常n nn的范围是 0 到MAX_ORDER-1(默认为11,即最大支持2 10 = 1024 2^{10}=1024210=1024个页的连续块,约4MB)。
  • 分配:当请求分配2 k 2^k2k个页时,检查第k kk阶是否有空闲块。如果有,直接分配;如果没有,则查找k + 1 k+1k+1阶,将2 k + 1 2^{k+1}2k+1的块分裂为两个2 k 2^k2k的块(互为伙伴),一个分配,一个插入第k kk阶链表。
  • 释放:释放内存块时,检查其物理地址相邻的“伙伴”块是否也空闲。如果空闲,则合并成更大的块,并向高阶递归合并,直到无法合并为止。

三、组织架构与Buddy分配器的关系

Buddy分配器并非独立存在,而是直接“寄生”在物理内存组织架构的Zone(区域)层级之上。

1. Buddy 是 Zone 的一部分

Buddy分配器的数据结构直接定义在struct zone中。

structzone{/* ... 前面的统计字段 ... *//* free areas of different sizes */structfree_areafree_area[MAX_ORDER];/* ... */};
  • 每个struct zone都有自己独立的一套free_area数组。
  • 这意味着:内存分配是在特定的Zone中进行的。例如,申请DMA内存时,内核会明确在ZONE_DMA的Buddy系统中查找空闲页。

2.free_area数组是连接点

free_area[MAX_ORDER]数组是物理内存组织与Buddy算法的物理连接点。

structfree_area{structlist_headfree_list[MIGRATE_TYPES];// 空闲块链表unsignedlongnr_free;// 该阶空闲块的数量};
  • 数组下标:对应Buddy算法的阶 (Order)free_area[0]存放单页块,free_area[1]存放2页块,以此类推。
  • MIGRATE_TYPES:为了解决内存碎片问题(反碎片机制),同一阶的空闲块还会根据迁移类型(如MIGRATE_UNMOVABLE,MIGRATE_MOVABLE)挂入不同的链表。

3. 工作流示例

当内核调用alloc_pages(gfp_mask, order)申请内存时:

  1. 确定Node和Zone:根据gfp_mask(如GFP_KERNEL)和内存策略,内核决定在哪个Node的哪个Zone(如ZONE_NORMAL)进行分配。
  2. 访问Zone的Buddy系统:内核锁定该Zone的自旋锁,访问该Zone结构体中的free_area数组。
  3. 查找空闲块:从free_area[order]开始查找。如果为空,则遍历order+1,order+2… 直到MAX_ORDER-1
  4. 分裂与服务:找到并分裂高阶块(如果需要),更新free_area链表和nr_free计数,返回物理页。

4. 总结

层级职责与Buddy的关系
Node解决NUMA访问延迟包含多个Zone,间接管理多个Buddy实例。
Zone解决硬件寻址限制Buddy分配器的宿主。每个Zone维护独立的Buddy系统来管理自己的空闲页。
Page最小物理单位Buddy分配器的管理对象。Buddy系统负责将Page组织成2 n 2^n2n的链表。

综上所述,物理内存组织架构提供了硬件抽象的容器(Node/Zone),而Buddy分配器则是填充在这些容器中的管理逻辑,两者结合实现了高效、有序的物理内存分配。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1125954.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据分享】2025年全国范围各城市的公交路线及站点数据(分省/分城市)

本文分享一份2025年全国范围各城市的路线及站点数据。包含:安徽省、澳门、北京市、重庆市、福建省、甘肃省、广东省、广西省、贵州省、海南省、河北省、河南省、黑龙江、湖北省、湖南省、吉林省、江苏省、江西省、辽宁省、内蒙古、宁夏省、青海省、山东省、山西省、…

Agent2Agent (A2A) Protocol( A2A 协议)简介、组件

Agent2Agent (A2A) Protocol(简称 A2A 协议)是旨在让不同 AI 代理(agents)之间互联互通、协作的开放标准。内容包括协议的主要组件(building blocks)、各组件作用,以及这些组件在一个典型流程中…

期货反向跟单—从小白到高手进阶历程 六十三(研究人性不是重点)

在期货反向跟单领域,“研究人性” 似乎成了多数团队的共识性动作。不少团队投入大量人力、物力搭建心理干预体系,从资金奖惩机制到每日口头引导,试图通过干预盘手的心理状态来优化跟单效果。然而现实往往事与愿违,多数团队耗费数月…

系列教程十三 | 探索阿里云 Wan 2.1:零基础入门文本生成视频教程

一.背景介绍近年来,人工智能内容生成(AIGC)在视频创作领域取得了突破性进展,其中文本到视频(Text-to-Video)生成技术因其在内容创作、广告营销和教育可视化等方面的巨大潜力而备受关注。Wan 2.1作为阿里云推…

系列教程十四 | 基于CosyVoice 2.0实现语音风格迁移

一.背景介绍 随着生成式人工智能的快速发展,语音合成(Text-to-Speech, TTS)技术正在迈向更自然、更智能、更具情感表达的新时代。过去的 TTS 模型虽然已在音质和语义准确度方面取得显著进步,但在跨语言、情感表达、个性化模拟等方…

外包开发三年

外包开发的三年:困在代码牢笼里的日子这三年就像被困在一座没有出口的迷宫,每天重复着同样的路线,却永远走不到尽头。刚入行时还带着点期待,想着好歹能攒点经验,可现实像一盆冷水,从头顶浇到脚底。外包公司…

解析ASTM D4169:运输包装性能测试的核心标准有哪些

ASTM D4169 是国际公认的运输集装箱和系统性能测试标准,通过模拟真实分销环境中的各类危险元素,为包装运输性提供统一评估依据。该标准包含多个分配周期(DC),其中 DC4、DC6、DC12、DC13 是医疗行业界最常选用的周期&am…

提示工程的认知架构设计:架构师的深度思考

提示工程的认知架构设计:架构师的深度思考 引言:AI时代的认知革命 在人工智能技术迅猛发展的今天,提示工程(Prompt Engineering)已经从一项简单的交互技巧演变为一门系统的工程学科。作为架构师,我们需要超越表面的指令编写,深入思考提示工程背后的认知架构设计。这不仅…

Java Web 企业客户管理系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

摘要 随着信息技术的快速发展,企业客户管理系统的需求日益增长,传统的手工管理模式已无法满足现代企业对高效、精准客户管理的需求。企业客户管理系统能够有效整合客户信息,优化业务流程,提升客户满意度和企业竞争力。当前&#x…

网上超市设计与实现信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】

摘要 随着互联网技术的快速发展和电子商务的普及,网上超市逐渐成为消费者购物的主要渠道之一。传统的线下超市面临着租金成本高、管理效率低、客户覆盖面有限等问题,而网上超市能够突破时间和空间的限制,为消费者提供更加便捷的购物体验。同时…

Java SpringBoot+Vue3+MyBatis 在线文档管理系统系统源码|前后端分离+MySQL数据库

摘要 随着信息技术的快速发展,文档管理已成为企业和个人高效工作的核心需求。传统的文档管理方式依赖本地存储或简单的文件共享工具,存在版本混乱、协作效率低、安全性不足等问题。在线文档管理系统通过云端存储和实时协作功能,能够有效解决这…

大数据诊断性分析:从入门到精通的完整指南

大数据诊断性分析:从入门到精通的完整指南 一、引言:为什么你做了一堆报表,却还是找不到问题的根因? 你有没有过这样的经历? 月底盯着复购率下降20%的报表抓耳挠腮,翻了几十张用户行为折线图,…

【2025最新】基于SpringBoot+Vue的甘肃非物质文化网站管理系统源码+MyBatis+MySQL

💡实话实说:CSDN上做毕设辅导的都是专业技术服务,大家都要生活,这个很正常。我和其他人不同的是,我有自己的项目库存,不需要找别人拿货再加价,所以能给到超低价格。摘要 非物质文化遗产作为中华…

快速排序 - 原理、时空分析、优化

过程 快速排序分为三个过程: 将数列根据划分值 mmm 划分为两部分;递归到两个子序列中分别进行快速排序;不用合并,因为此时数列已经完全有序。 具体来说,第一步要是要把数列分成两个部分,然后保证前一个子…

Java SpringBoot+Vue3+MyBatis 教师工作量管理系统系统源码|前后端分离+MySQL数据库

💡实话实说:CSDN上做毕设辅导的都是专业技术服务,大家都要生活,这个很正常。我和其他人不同的是,我有自己的项目库存,不需要找别人拿货再加价,所以能给到超低价格。摘要 随着教育信息化的快速发…

企业级企业客户管理系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】

💡实话实说:CSDN上做毕设辅导的都是专业技术服务,大家都要生活,这个很正常。我和其他人不同的是,我有自己的项目库存,不需要找别人拿货再加价,所以能给到超低价格。摘要 随着信息技术的快速发展…

2. 假新闻检测 - 《FakingRecipe: Detecting Fake News on Short Video Platforms from the Perspective of ...》

前言 本文阅读论文《FakingRecipe: Detecting Fake News on Short Video Platforms from the Perspective of Creative Process》。现有的假新闻检测方法主要侧重于分析所呈现内容,而文章的实证分析揭示了假新闻视频在素材选择和编辑方面的独特特征。 核心内容细节…

Java SpringBoot+Vue3+MyBatis 网上超市设计与实现系统源码|前后端分离+MySQL数据库

💡实话实说:CSDN上做毕设辅导的都是专业技术服务,大家都要生活,这个很正常。我和其他人不同的是,我有自己的项目库存,不需要找别人拿货再加价,所以能给到超低价格。摘要 随着互联网技术的快速发…

1. 假新闻检测 - 《Modality Perception Learning-Based Determinative Factor Discovery ...》

前言 本文阅读论文《Modality Perception Learning-Based Determinative Factor Discovery for MultimodalFake News Detection》。虚假新闻通常依赖夸张的语言风格、篡改的图像、不一致的多模态上下文等特征。虚假新闻检测应遵循“逻辑与”原则,即便大部分内容合理…