diff options
Diffstat (limited to 'src/memory/physalloc.c')
-rw-r--r-- | src/memory/physalloc.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/src/memory/physalloc.c b/src/memory/physalloc.c index 1140258..bcbc66d 100644 --- a/src/memory/physalloc.c +++ b/src/memory/physalloc.c @@ -1,3 +1,4 @@ +#include "serial.h" #include <memory.h> #include <stdint.h> #include <lib.h> @@ -63,6 +64,10 @@ static inline bool bitmap_get(int i) { } static inline void bitmap_set(int i, bool v) { + if (v) + free_memory -= PAGE_SIZE; + else + free_memory += PAGE_SIZE; int idx = i / 64; bitmap[idx] &= ~(1 << i % 64); bitmap[idx] |= (v << i % 64); @@ -115,11 +120,11 @@ void free_phys_pages(void *ptr, int pages) { } static bool segment_invalid(const struct memory_segment *segment) { - if (segment->type != 1) return false; - if (segment->addr < kaddr(kernel_start)) return false; - if (segment->addr + segment->len < memory_start) return false; - if (segment->addr + segment->len < kaddr(kernel_start)) return false; - return true; + if (segment->type != 1) return true; + if (segment->addr < kaddr(kernel_start)) return true; + if (segment->addr + segment->len < memory_start) return true; + if (segment->addr + segment->len < kaddr(kernel_start)) return true; + return false; } static struct memory_area segment_to_area(const struct memory_segment *segment) { @@ -195,18 +200,28 @@ void memory_init(struct memory_map *map) { struct memory_area *area = page_start; + kprintf("MEMORY MAP\n"); for(uint32_t i = 0; i < map->entry_count; i++) { struct memory_segment *segment = &map->entries[i]; if (segment_invalid(segment)) continue; + kprintf("addr: 0x%16p\tlen: %ld\n", (void *)segment->addr, segment->len); + struct memory_area temp = segment_to_area(segment); *area = temp; area++; } + total_memory = page_count * PAGE_SIZE; page_count -= bitmap_pages; + free_memory = page_count * PAGE_SIZE; + + kprintf("\nMEMORY USAGE\n"); + kprintf("mem total: %ld\n", memory_total()); + kprintf("mem free: %ld\n", memory_free()); + kprintf("mem used: %ld\n\n", memory_used()); memory_unlock(); |