首页 > 系统相关 >引导时内存管理 【ChatGPT】

引导时内存管理 【ChatGPT】

时间:2023-12-09 16:55:17浏览次数:36  
标签:引导 函数 memblock 区域 内存 分配器 ChatGPT NUMA

"Boot time memory management"(引导时间内存管理)

早期系统初始化不能简单地使用“正常”的内存管理,因为它还没有设置。但是仍然需要为各种数据结构分配内存,例如物理页面分配器。

一种名为memblock的专门分配器执行引导时间内存管理。架构特定的初始化必须在setup_arch()中设置它,并在mem_init()函数中拆除它。

一旦早期内存管理可用,它提供了各种用于内存分配的函数和宏。分配请求可以指向第一个(可能也是唯一的)节点,或者指向NUMA系统中的特定节点。有一些API变体在分配失败时会触发panic,而另一些则不会。

Memblock还提供了各种控制其行为的API。

Memblock概述

Memblock是在通常的内核内存分配器尚未启动运行时管理内存区域的一种方法。

Memblock将系统内存视为连续区域的集合。这些集合有几种类型:

  • memory - 描述内核可用的物理内存;这可能与系统中实际安装的物理内存不同,例如当内存受到mem=命令行参数的限制时

  • reserved - 描述已分配的区域

  • physmem - 描述引导期间实际可用的物理内存,而不考虑可能的限制和内存热插拔;physmem类型仅在某些架构上可用。

每个区域由struct memblock_region表示,该结构定义了区域的范围、属性和NUMA系统上的NUMA节点ID。每种内存类型由struct memblock_type描述,其中包含一组内存区域以及分配器元数据。"memory"和"reserved"类型都很好地封装在struct memblock中。此结构在构建时静态初始化。区域数组最初大小为INIT_MEMBLOCK_MEMORY_REGIONS(对于“memory”)和INIT_MEMBLOCK_RESERVED_REGIONS(对于“reserved”)。"physmem"的区域数组最初大小为INIT_PHYSMEM_REGIONS。memblock_allow_resize()允许在添加新区域时自动调整区域数组的大小。应谨慎使用此功能,以免为区域数组分配的内存与应保留的区域重叠,例如initrd。

早期架构设置应该通过使用memblock_add()或memblock_add_node()函数告诉memblock物理内存布局是什么。第一个函数不会将区域分配给NUMA节点,适用于UMA系统。但是,也可以在NUMA系统上使用它,并在设置过程的后期使用memblock_set_node()将区域分配给NUMA节点。memblock_add_node()直接执行此类分配。

一旦设置了memblock,就可以使用以下API变体之一来分配内存:

  • memblock_phys_alloc*() - 这些函数返回分配内存的物理地址

  • memblock_alloc*() - 这些函数返回分配内存的虚拟地址。

请注意,这两种API变体都对允许的内存范围和回退方法进行了隐含假设。有关更详细的描述,请参阅memblock_alloc_internal()和memblock_alloc_range_nid()函数的文档。

随着系统引导的进行,特定于架构的mem_init()函数将所有内存释放给伙伴页分配器。

除非架构启用CONFIG_ARCH_KEEP_MEMBLOCK,否则在系统初始化完成后,memblock数据结构(除了“physmem”)将被丢弃。

函数和结构

以下是memblock数据结构、函数和宏的描述。其中一些实际上是内部的,但由于它们已经有文档记录,因此省略它们会显得愚蠢。此外,阅读内部函数的描述可以帮助理解底层发生了什么。
https://www.kernel.org/doc/html/v6.6/core-api/boot-time-mm.html#c.memblock_flags

标签:引导,函数,memblock,区域,内存,分配器,ChatGPT,NUMA
From: https://www.cnblogs.com/pengdonglin137/p/17891178.html

相关文章

  • 动态DMA映射使用通用设备 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/core-api/dma-api.html动态DMA映射使用通用设备作者[email protected]本文档描述了DMAAPI。要了解API的更详细介绍(以及实际示例),请参阅动态DMA映射指南。该API分为两部分。第一部分描述了......
  • 内存管理文档 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/mm/index.html内存管理指南这是关于Linux内存管理子系统的指南。如果您只是想了解如何分配内存,请参阅内存分配指南。有关控制和调整指南,请参阅管理员指南。物理内存页表进程地址引导内存页分配虚拟连续内存分配Slab分配高内存......
  • 内存分配指南 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/core-api/memory-allocation.html内存分配指南Linux提供了各种用于内存分配的API。您可以使用kmalloc或kmem_cache_alloc系列来分配小块内存,使用vmalloc及其衍生物来分配大的虚拟连续区域,或者直接使用alloc_pages从页面分配器请求页面。......
  • Volatility2.6内存取证工具安装及入门Linux和Windows下安装
    (Volatility2.6内存取证工具安装及入门Linux和Windows下安装)1-1.Volatility2.6简介Volatility是一个完全开源的工具,用于从内存(RAM)样本中提取数字工件。支持Windows,Linux,MaC,Android等多类型操作系统系统的内存取证。那么针对竞赛这块(CTF、技能大赛等)基本上都是用在Misc方......
  • 核心API文档 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/core-api/index.html#memory-management核心API文档这是核心内核API手册的开头部分。非常感谢您进行文档的转换和编写!核心实用程序本节包含一般和“核心核心”文档。首先是一大堆来自docbook时代的kerneldoc信息,实际上应该在有人有精......
  • 写入内核文档注释 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/doc-guide/kernel-doc.html写入内核文档注释Linux内核源文件中可能包含内核文档格式的结构化文档注释,用于描述代码的函数、类型和设计。将文档嵌入到源文件中可以更容易地保持文档的最新状态。注意内核文档格式与javadoc、gtk-doc或D......
  • Unreliable Guide To Locking 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/kernel-hacking/locking.htmlRusty'sRemarkablyUnreliableGuidetoKernelLocking作者RustyRussell简介欢迎阅读Rusty'sRemarkablyUnreliableGuidetoKernelLockingissues。本文档描述了LinuxKernel2.6中的锁定系统......
  • 内存可见于内存可用
    在GPU执行过程中有责任保证接下来访问的这块内存是保证有效的,也就是确保先前写入的数据对目标单元可见。简单介绍一下GPUCache体系,平时听得比较多的是CPUCache,但是GPU同样有着自己的Cache体系。如下图所示,在这里可以看GPU同样是有着L1/L2Cache的架构。 那么在GPU中是如何......
  • 内存分配
    这里主要讲一下模拟过程中遇到的问题和想法首先,为了保证模拟正确,我们应该以时间为参考对象去模拟,这样比以即将进入的任务或者等待队列中的任务为参考对象讨论的情况更少,犯的错误更少,每到达一个新时间如果有任务进入或者有任务完成就可以进行处理其次,这道题目的\(N\)非常大,所以我......
  • Linux 内核黑客不可靠指南【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/kernel-hacking/hacking.htmlRustyRussell's"UnreliableGuidetoHackingtheLinuxKernel"作者RustyRussell简介欢迎阅读Rusty'sRemarkablyUnreliableGuidetoLinuxKernelHacking。本文档描述了内核代码的常见例程和一......