-#pragma region MMAP_SCAN_RESERVING_KERNEL_PGS
- // 按照 Memory map 标识可用的物理页
- for (unsigned int i = 0; i < map_size; i++) {
- multiboot_memory_map_t mmap = map[i];
- printf("[MM] Base: 0x%x, len: %u KiB, type: %u\n",
- map[i].addr_low,
- map[i].len_low >> 10,
- map[i].type);
- if (mmap.type == MULTIBOOT_MEMORY_AVAILABLE) {
- // 整数向上取整除法
- uintptr_t pg = map[i].addr_low + 0x0fffU;
- pmm_mark_chunk_free(pg >> 12, map[i].len_low >> 12);
- printf("[MM] Freed %u pages start from 0x%x\n",
- map[i].len_low >> 12,
- pg & ~0x0fffU);
- }
- }