From 51ab94a29f64de42e3dec3a3ef0ec6a94cda28a6 Mon Sep 17 00:00:00 2001 From: Miguel Date: Sat, 1 Sep 2018 12:10:13 +0200 Subject: working on new syscalls --- kernel/mem.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) (limited to 'kernel/mem.c') diff --git a/kernel/mem.c b/kernel/mem.c index dea1284..8dfc6ea 100644 --- a/kernel/mem.c +++ b/kernel/mem.c @@ -1,13 +1,10 @@ - - #include - #include "kernel.h" #include "multiboot.h" #define PMMNGR_BLOCKS_PER_BYTE 8 #define PMMNGR_BLOCK_SIZE 4096 -#define PMMNGR_MAX_BLOCKS 1048576 +#define PMMNGR_MAX_BLOCKS 1048576 // 4096*1048576 = 2^32 bytes (maxium addressable memory ~4GB) #define PMMNGR_MAP_SIZE PMMNGR_MAX_BLOCKS/PMMNGR_BLOCKS_PER_BYTE/4 // defined in linker.ld and multiboot.s @@ -18,7 +15,7 @@ extern uint32_t stack_bottom[]; //memory map bit array. Each bit represents a 4KB memory block, //so uint32_t represents 8*4 blocks -static uint32_t _mmngr_memory_map[PMMNGR_MAP_SIZE]; +static uint32_t _mmngr_memory_map[PMMNGR_MAP_SIZE]; //32Kb static uint32_t mem_free_blocks; //number of free blocks static uint32_t mem_max_block; //index of highest usable block @@ -173,8 +170,8 @@ uint32_t mem_init(multiboot_information *info) uint64_t mem_start=mmap->base_addr; uint64_t mem_end=mmap->base_addr+mmap->length; - klog("%08X - %08X / type: %s, (size: %d)", - (uint32_t)mem_start, (uint32_t)mem_end, memmap_type_to_string[mmap->type-1], mmap->size); + klog("%08X - %08X (%d bytes)/ type: %s, (size: %d)", + (uint32_t)mem_start, (uint32_t)mem_end, (uint32_t)(mem_end-mem_start), memmap_type_to_string[mmap->type-1], mmap->size); uint32_t mem=mmap->length; @@ -204,25 +201,26 @@ uint32_t mem_init(multiboot_information *info) mem_min_block=mod->mod_end/PMMNGR_BLOCK_SIZE+1; - //pmmngr_deinit_region(mod->mod_start,((uint32_t)mod->mod_end-(uint32_t)mod->mod_start)+1); + pmmngr_deinit_region(mod->mod_start,((uint32_t)mod->mod_end-(uint32_t)mod->mod_start)+1); mod++; } } // deinitialize kernel - //pmmngr_deinit_region(kernel_start,((uint32_t)kernel_end-(uint32_t)kernel_start)+1); + pmmngr_deinit_region(kernel_start,((uint32_t)kernel_end-(uint32_t)kernel_start)+1); // we deinit everything below mem_min_block anyway - pmmngr_deinit_region(0,mem_min_block*PMMNGR_BLOCK_SIZE); + //pmmngr_deinit_region(0,mem_min_block*PMMNGR_BLOCK_SIZE); + + pmmngr_deinit_region(0,4096); // deinit first page (coz address=0 reserved for failure) klog("Usable ~%d / %d MB ",mem_free_blocks*4096/1024/1024,total_mem/1024/1024); klog( - "Free 4K blocks: %d (first free: 0x%08X)",mem_free_blocks,mem_min_block); + "Free 4K blocks: %d (first free: %d)",mem_free_blocks,mem_min_block); return mem_min_block; - } -- cgit v1.2.3