一、memblock分配器初始化
在内核初始化过程中也需要分配内存,使用的页帧分配器叫memblock(早期的内核版本使用BootMem,新版本内核已不再用)。
memblock是系统启动过程中的一个中间阶段的内存管理, 负责在系统上电到内核内存管理模型初始化之前这段时间的物理内存分配、预留等功能( memblock 管理的内存为物理地址)
enum memblock_flags {
MEMBLOCK_NONE = 0x0, /* No special request */
/*在系统运行过程中可以插入和拔出物理内存*/
MEMBLOCK_HOTPLUG = 0x1, /* hotpluggable region*/
/*表示镜像的区域。将内存数据做二个复制,分别放在主内存和镜像内存中*/
MEMBLOCK_MIRROR = 0x2, /* mirrored region */
/*表示不添加到内核直接映射区(即线性映射区)*/
MEMBLOCK_NOMAP = 0x4, /* don't add to kernel direct mapping */
MEMBLOCK_DRIVER_MANAGED = 0x8, /* always detected via a driver */
};
memblock 将系统启动时获取的可用内存范围(如从对ARM64来说,从设备树中获取的内存范围)纳入管理,为内核启动阶段