系统物理内存初始化
一、物理内存安装检测
操作系统启动时需要探测可用物理内存的地址范围,内核请求中断号15H,操作码为E820 H。
- 内核启动时调用main函数,mian调用detect_memory,物理内存安装检测从这个函数开始。
- 查看内核启动输出的信息,如上图所示详细的展示了BIOS对物理内存的检测结果。
- usable:实际可用的物理内存地址范围。
- reserved:这个内存不可被分配使用,可能是内存启动时用来保存内核的一些数据,也没有实际的物理内存映射到这里。
二、memblock内存分配器的创建
获取到可用内存地址范围后,需要将内存管理起来。
如果是预留内存就调用memblock_reserve添加到reserved成员中。添加过程会修改reserved中的区域数量cnt,然后再设置regions中的一个元素。可用内存的添加同上。
struct memblock memblock __initdata_memblock = {
.memory.regions = memblock_memory_init_regions,
.memory.cnt = 1, /* empty dummy entry */
.memory