diff --git a/kernel/boot/k_main.cc b/kernel/boot/k_main.cc index 7c1ac64..b9d4639 100644 --- a/kernel/boot/k_main.cc +++ b/kernel/boot/k_main.cc @@ -1,15 +1,12 @@ #include "lang/kio.h" +#include "mm/mm.h" extern "C" { void k_main() { - kprintf("Hi from k_main()!\n"); - kprintf("padded 8 hex: 0x%08x|\n", 0x42); - kprintf("padded -4 hex: 0x%-4x|\n", 0x42); - kprintf("padded 20 str: %20s|\n", "hi there"); - kprintf("padded -20 str: %-20s|\n", "hi there"); + mm_print_memory_map(); } } /* extern "C" */ diff --git a/kernel/mm/mm.cc b/kernel/mm/mm.cc index cc644fe..d530169 100644 --- a/kernel/mm/mm.cc +++ b/kernel/mm/mm.cc @@ -5,6 +5,7 @@ #include "stack.h" #include "boot/k_early_panic.h" #include "lang/string.h" +#include "lang/kio.h" #define MM_MAX_MMAP_ENTRIES 64 @@ -14,6 +15,7 @@ static pagedirectory_entry_t * page_directory; static mm_mem_range_t mm_mmap_entries[MM_MAX_MMAP_ENTRIES]; static int mm_mmap_num_entries = 0; static int mm_num_free_pages = 0; +static int mm_num_used_pages = 0; static u32_t * mm_free_page_ptr = NULL; gdtr_t mm_gdtr; static u64_t * mm_gdt; @@ -224,5 +226,23 @@ u32_t mm_page_alloc() u32_t page_address = (u32_t) mm_free_page_ptr; mm_free_page_ptr = (u32_t *) *page_ptr; mm_num_free_pages--; + mm_num_used_pages++; return page_address; } + +void mm_print_memory_map() +{ + kprintf("Bootloader provided memory map:\n"); + kprintf(" Base Address Length\n"); + for (int i = 0; i < mm_mmap_num_entries; i++) + { + kprintf(" 0x%016X 0x%016X (%l bytes / %l KB / %l MB)\n", + mm_mmap_entries[i].base, + mm_mmap_entries[i].length, + mm_mmap_entries[i].length, + mm_mmap_entries[i].length >> 10, + mm_mmap_entries[i].length >> 20); + } + kprintf("Used pages: %d\n", mm_num_used_pages); + kprintf("Free pages: %d\n", mm_num_free_pages); +} diff --git a/kernel/mm/mm.h b/kernel/mm/mm.h index cfc28b0..c695b91 100644 --- a/kernel/mm/mm.h +++ b/kernel/mm/mm.h @@ -53,5 +53,7 @@ typedef struct | ( (((u64_t) base) & 0x00FFFFFFull) << 16) /* base 23:00 */ \ | ( (((u64_t) limit) & 0x0000FFFFull) ) ) /* limit 15:00 */ +void mm_print_memory_map(); + #endif