当前位置: 首页 > article >正文

【Linux】【内存】Buddy内存分配基础 NUMA架构

【Linux】【内存】Buddy内存分配基础 NUMA架构

NUMA架构

在 NUMA 架构中,计算机的多个 CPU 被划分为不同的处理单元,每个处理单元有一个本地内存。这些内存被称为内存节点(memory node)。处理器尽量访问自己的本地内存

node_data[]

全局数组用来存储pg_data_t 也就是内存结点数据
node_data[0]访问的就是第一个memory node(内存结点)

pg_data_t

Linux 使用 pg_data_t 结构体来表示每个memory node(内存节点)的信息,并将其保存在全局数组node_data[]中。为了让内核能高效地管理和调度内存

struct pg_data_t *node_data[MAX_NUMNODES];

内核将memory node划分为不同的zone(区域)

区域作用
DMA zone硬件直接内存访问区域
normal zone普通区域
high memory zone针对于32位系统 目前基本用不到
struct pg_data_t {
    struct zone *node_zones[MAX_NR_ZONES];   // 保存该节点上所有内存区域(zone)的指针
    unsigned long node_id;                    // 节点的 ID
    // 其他节点相关信息
};

zone

每一个zone(区域)里面均有自己的free_area Buddy内存分配算法主要就是针对于free_area 区域进行管理的

struct zone
{
     /* free areas of different sizes */
    struct free_area        free_area[MAX_ORDER];
};

free_area

每一个free_area(这里是按照2的阶数进行区分free_area) 里面有自己的free_list[] ,free_list[] 来确保这块内存区域的状态 是否是可更改或者不可更改

struct free_area {
	struct list_head	free_list[MIGRATE_TYPES];//迁移类型 会根据这个类型区分不同内存页面
	unsigned long		nr_free;
};

free_list

free_list 通常是用来存储当前系统中所有可用(即空闲)的内存块的链表。free_list 的管理是先通过 区分不同状态(如moveable、unmoveable,等),然后再将具有相同状态的内存页通过双向链表连接起来。

参考文章:
https://mp.weixin.qq.com/s?__biz=Mzg4NDQ0OTI4Ng==&mid=2247487669&idx=1&sn=04a41539fcb0c6a56675d6607e53b6ff&chksm=cfb959dcf8ced0cac13acc54a764a69447f41122924140286c2157bf1324dbc17fdff9916ca4&scene=21#wechat_redirect


http://www.kler.cn/a/503554.html

相关文章:

  • 【update 更新数据语法合集】.NET开源ORM框架 SqlSugar 系列
  • 数据仓库基础常见面试题
  • 《盘古大模型——鸿蒙NEXT的智慧引擎》
  • Elasticsearch ES|QL 地理空间索引加入纽约犯罪地图
  • Angular-生命周期及钩子函数
  • [Flutter] 使用ScrollController配合EasyRefresh实现列表预加载:在还未滑动到底部时加载下一页数据
  • HarmonyOS NEXT边学边玩,从零开发一款影视APP(二、首页轮播图懒加载的实现)
  • 用css 现实打字机效果
  • 嵌入式系统Linux实时化(四)Xenomai应用开发测试
  • Spring Boot 2 学习指南与资料分享
  • PHP优校管理系统
  • primitive 的 Appearance编写着色器材质
  • IMX6U Qt 开发环境
  • C++实现设计模式---原型模式 (Prototype)
  • C# XPTable 日期字段处理(XPTable控件使用说明十三)
  • 日常工作之 Elasticsearch 常用查询语句汇总
  • 想法分享,利用html通过求输入框中用户输入数组的最大值
  • linux自动分区后devmappercentos-home删除后合并到其它分区上
  • 【微服务】面试 4、限流
  • 目标检测跟踪中的Siamese孪生网络与普通卷积网络(VGG、ResNet)有什么区别?
  • 如何将原来使用cmakelist编译的qt工程转换为可使用Visual Studio编译的项目
  • LCUS型 USB继电器模块 电脑串口控制开关 PC智能控制器在pc端使用Qt程序进行串口控制
  • vector的模拟实现(C++)
  • 软考信安18~网络安全测评技术与标准
  • Axure9笔记
  • 【CTFHub】REC-命令注入