From 224d840cc9b6f316e4615361ace2f464c5a06402 Mon Sep 17 00:00:00 2001 From: Morten Delenk Date: Sat, 21 May 2016 16:20:53 +0000 Subject: [PATCH] Added a malloc function. 90% guaranteed to work! --- kernel/hal/dummy/c_include/macro.h | 2 + kernel/hal/dummy/include/pmm.hpp | 6 +- kernel/hal/x86/c_include/macro.h | 2 + kernel/hal/x86/include/pmm.hpp | 19 +- kernel/hal/x86/include/pmm2.hpp | 20 ++ .../hal/x86/include/{qdpmm.hpp => pmm3.hpp} | 12 +- kernel/hal/x86/init/Multitasking.cpp | 4 +- kernel/hal/x86/init/init.cpp | 28 ++- kernel/hal/x86/mm/pmm.cpp | 192 ++++++++---------- kernel/hal/x86/mm/pmm2.cpp | 98 +++++++++ kernel/hal/x86/mm/{qdmm.cpp => pmm3.cpp} | 12 +- mtgos.old | Bin 0 -> 102792 bytes test.elf | Bin 10132 -> 10124 bytes user/test.c | 2 +- 14 files changed, 260 insertions(+), 137 deletions(-) create mode 100644 kernel/hal/dummy/c_include/macro.h create mode 100644 kernel/hal/x86/c_include/macro.h create mode 100644 kernel/hal/x86/include/pmm2.hpp rename kernel/hal/x86/include/{qdpmm.hpp => pmm3.hpp} (57%) create mode 100644 kernel/hal/x86/mm/pmm2.cpp rename kernel/hal/x86/mm/{qdmm.cpp => pmm3.cpp} (87%) create mode 100755 mtgos.old diff --git a/kernel/hal/dummy/c_include/macro.h b/kernel/hal/dummy/c_include/macro.h new file mode 100644 index 0000000..d26c597 --- /dev/null +++ b/kernel/hal/dummy/c_include/macro.h @@ -0,0 +1,2 @@ +#define MIN(a,b) ((a)>(b))?(b):(a) +#define MAX(a,b) ((a)<(b))?(b):(a) diff --git a/kernel/hal/dummy/include/pmm.hpp b/kernel/hal/dummy/include/pmm.hpp index 329836a..99b64d8 100644 --- a/kernel/hal/dummy/include/pmm.hpp +++ b/kernel/hal/dummy/include/pmm.hpp @@ -8,9 +8,9 @@ private: public: auto markUsed(void * addr) -> void; auto init(struct multiboot_info*) -> void; - auto operator >> (void * &addr) -> QDPMM &; //alloc - auto operator << (const void * addr) -> QDPMM &; //free - + auto operator >> (void * &addr) -> PMM &; //alloc + auto operator << (const void * addr) -> PMM &; //free + auto operator () (uint32_t len) -> void*; }; } #endif diff --git a/kernel/hal/x86/c_include/macro.h b/kernel/hal/x86/c_include/macro.h new file mode 100644 index 0000000..d26c597 --- /dev/null +++ b/kernel/hal/x86/c_include/macro.h @@ -0,0 +1,2 @@ +#define MIN(a,b) ((a)>(b))?(b):(a) +#define MAX(a,b) ((a)<(b))?(b):(a) diff --git a/kernel/hal/x86/include/pmm.hpp b/kernel/hal/x86/include/pmm.hpp index d9b61d0..862df9a 100644 --- a/kernel/hal/x86/include/pmm.hpp +++ b/kernel/hal/x86/include/pmm.hpp @@ -1,20 +1,23 @@ #ifndef _PMM_HPP #define _PMM_HPP -#include +#include #include #include namespace MTGosHAL { +struct malloc_t { + uint32_t len; + malloc_t *last; + malloc_t *next; +}; class PMM { private: - uint16_t **pageTable; - QDPMM qdpmm; + malloc_t *head; + PMM2 pmm2; public: - PMM(); - auto markUsed(const void * addr, uint32_t length) -> bool; + PMM(); auto init(struct multiboot_info*) -> void; - auto operator >> (void * &addr) -> PMM &; //alloc - auto operator << (const void * addr) -> PMM &; //free - auto operator()(int pages) -> void*; //alloc_multipage + auto alloc(uint32_t length) -> void *; + auto free(void* ptr) -> bool; }; } #endif diff --git a/kernel/hal/x86/include/pmm2.hpp b/kernel/hal/x86/include/pmm2.hpp new file mode 100644 index 0000000..3162828 --- /dev/null +++ b/kernel/hal/x86/include/pmm2.hpp @@ -0,0 +1,20 @@ +#ifndef _PMM2_HPP +#define _PMM2_HPP +#include +#include +#include +namespace MTGosHAL { +class PMM2 { +private: + uint16_t **pageTable; + PMM3 pmm3; +public: + PMM2(); + auto markUsed(const void * addr, uint32_t length) -> bool; + auto init(struct multiboot_info*) -> void; + auto operator >> (void * &addr) -> PMM2 &; //alloc + auto operator << (const void * addr) -> PMM2 &; //free + auto operator()(int pages) -> void*; //alloc_multipage +}; +} +#endif diff --git a/kernel/hal/x86/include/qdpmm.hpp b/kernel/hal/x86/include/pmm3.hpp similarity index 57% rename from kernel/hal/x86/include/qdpmm.hpp rename to kernel/hal/x86/include/pmm3.hpp index 97c69db..f664993 100644 --- a/kernel/hal/x86/include/qdpmm.hpp +++ b/kernel/hal/x86/include/pmm3.hpp @@ -1,18 +1,18 @@ -#ifndef _QDPMM_HPP -#define _QDPMM_HPP +#ifndef _PMM3_HPP +#define _PMM3_HPP #include #include namespace MTGosHAL { -class QDPMM { +class PMM3 { private: uint32_t bitmap[0x8000]; //Enough for 4 GB protected: public: - QDPMM(); + PMM3(); auto markUsed(const void * addr) -> void; auto init(struct multiboot_info*) -> void; - auto operator >> (void * &addr) -> QDPMM &; //alloc - auto operator << (const void * addr) -> QDPMM &; //free + auto operator >> (void * &addr) -> PMM3 &; //alloc + auto operator << (const void * addr) -> PMM3 &; //free }; } #endif diff --git a/kernel/hal/x86/init/Multitasking.cpp b/kernel/hal/x86/init/Multitasking.cpp index 89d6ed5..52896f5 100644 --- a/kernel/hal/x86/init/Multitasking.cpp +++ b/kernel/hal/x86/init/Multitasking.cpp @@ -27,9 +27,7 @@ Multitasking::Multitasking(): curr_task(nullptr), first_task(nullptr) } auto Multitasking::initTask(void(* entry)()) -> struct cpu_state* { - void *tmp1, *tmp2; - mm >> tmp1 >> tmp2; - uint8_t *stack=(uint8_t*)tmp1, *user_stack=(uint8_t*)tmp2; + uint8_t *stack=(uint8_t*)mm.alloc(4096), *user_stack=(uint8_t*)mm.alloc(4096); struct cpu_state new_state = { 0, //EAX 0, //EBX diff --git a/kernel/hal/x86/init/init.cpp b/kernel/hal/x86/init/init.cpp index 5405728..c0945f7 100644 --- a/kernel/hal/x86/init/init.cpp +++ b/kernel/hal/x86/init/init.cpp @@ -44,11 +44,29 @@ namespace MTGosHAL { idt.setEntry(8, (void *)((uint32_t)&intr_stub_0+128), SEG_DBL_FAULT, IDT_TASK_GATE | IDT_SEG_32_BIT | IDT_RING_0 | IDT_USED); idt.apply(); mm.init(ebx); - multiboot_mod_list *mods = (multiboot_mod_list*) ebx->mods_addr; - void** progs=nullptr; - void* tmp; - mm >> tmp; - progs=(void**)tmp; + debug << "Now tesing the PMM... Allocating 1 byte\n"; + char* tmp=(char*)mm.alloc(1); + debug << "Allocating another byte\n"; + char* tmp2=(char*)mm.alloc(1); + tmp2[0]='A'; + debug << "Freeing the first byte...\n"; + mm.free((void*)tmp); + debug << "Allocating 14 bytes... \n"; + tmp=(char*)mm.alloc(14); + debug << "Changing the last byte... \n"; + tmp[13]='B'; + debug << "Changing if the second byte has changed...\n"; + if(tmp2[0]=='B') { + err << "The allocate function is broken.\n"; + debug << "The allocate function is broken.\n"; + } else { + debug << "The allocate function works!\n"; + } + debug << "Freeing up both pointers."; + mm.free((void*)tmp); + mm.free((void*)tmp2); + multiboot_mod_list *mods = (multiboot_mod_list*) ebx->mods_addr; + void** progs=(void**)mm.alloc(4096); uint32_t i; for(i=0;i<(ebx->mods_count<1023?ebx->mods_count:1023);i++) { //Basically until MIN(ebx->mods_count, 1023), as we only support loading up to 1023 programs directly. progs[i]=(void*)(mods[i].mod_start); diff --git a/kernel/hal/x86/mm/pmm.cpp b/kernel/hal/x86/mm/pmm.cpp index fa9d72a..176ac2b 100644 --- a/kernel/hal/x86/mm/pmm.cpp +++ b/kernel/hal/x86/mm/pmm.cpp @@ -1,125 +1,107 @@ -#include #include -//In this part, please remember that the address is split into 3 parts. Bitmap: -// AAAA AAAA ABBB BBBB BBBB CCCC CCCC CCCC -#define SPLIT1_FLAG 0xFF800000ul -#define SPLIT1_SHIFT(a) ((a)<<23) -#define SPLIT1_UNSHIFT(a) ((a)>>23) -#define SPLIT2_FLAG 0x007FF000ul -#define SPLIT2_SHIFT(a) ((a)<<12) -#define SPLIT2_UNSHIFT(a) (((a)<<23)&0x7FF) -#define SPLIT3_FLAG 0x00000FFFul -#define SPLIT3_SHIFT(a) ((a)) -#define SPLIT3_UNSHIFT(a) ((a)&0xFFF) +#include extern "C" const int kernel_start; extern "C" const int kernel_end; //those are voids actually void *operator new(size_t size) { - if(size>4096) { - return MTGosHAL::mm(size/4096); - } - void *ptr; - MTGosHAL::mm >> ptr; - return ptr; + return MTGosHAL::mm.alloc(size); } void *operator new[](size_t size) { - if(size>4096) { - return MTGosHAL::mm(size/4096); - } - void *ptr; - MTGosHAL::mm >> ptr; - return ptr; + return MTGosHAL::mm.alloc(size); } void operator delete(void* p) { - MTGosHAL::mm << p; + MTGosHAL::mm.free(p); } void operator delete[](void* p) { - MTGosHAL::mm << p; + MTGosHAL::mm.free(p); } void operator delete(void* p, size_t size) { - MTGosHAL::mm << p; + MTGosHAL::mm.free(p); } void operator delete[](void* p, size_t size) { - MTGosHAL::mm << p; + MTGosHAL::mm.free(p); } namespace MTGosHAL { -PMM::PMM(): qdpmm() { -} - -auto PMM::markUsed(const void * addr, uint32_t length) -> bool { - uint32_t add=(uint32_t)addr; - uint32_t pagetid = SPLIT1_UNSHIFT(add); - if(length > 256*1024*1024) //Maximum allocation limit is 256MB - return false; - if(!pageTable[pagetid]) { - void* temp; - qdpmm >> temp; - pageTable[pagetid]=(uint16_t*)temp; - for(int i=0;i<2048;i++) - pageTable[pagetid][i]=0; - markUsed(pageTable[pagetid],1024); //Not a mistake - } - //Check if used - for(uint32_t curr_addr=add+length;curr_addr>=add;curr_addr-=0x1000) { - if(pageTable[SPLIT1_UNSHIFT(curr_addr)][SPLIT2_UNSHIFT(curr_addr)]) - return false; - } - //Mark as used - uint16_t counter=1; - for(uint32_t curr_addr=add+length;curr_addr>=add;curr_addr-=0x1000) { - pageTable[SPLIT1_UNSHIFT(curr_addr)][SPLIT2_UNSHIFT(curr_addr)]=counter++; - qdpmm.markUsed((void*)curr_addr); - } - return true; -} - -auto PMM::operator >> (void * &addr) -> PMM & { - qdpmm >> addr; - markUsed(addr,4096); - return *this; -} -auto PMM::operator << (const void *addr) -> PMM & { - uint32_t add=(uint32_t)addr; - if(!pageTable[SPLIT1_UNSHIFT(add)]) - return *this; //Prevent nullptr derefs - for(int i=0;i void* { - //I want to get this working so: - //TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO - // NEVER USE A BRUTE-FORCE ALGO TO ALLOC PAGES! - //TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO - for(uint32_t i=0;i<(uint32_t)(-(pages*4096));i+=4096) { - if(markUsed((void*)i,pages*4096)) - return (void*)i; - } - return nullptr; -} +PMM::PMM(): head(nullptr), pmm2() {} auto PMM::init(struct multiboot_info* mb_info) -> void { - qdpmm.init(mb_info); - void *temp; - qdpmm >> temp; - pageTable=(uint16_t**)temp; - for(int i=0;i<4096;i++) - pageTable[i]=nullptr; - markUsed(pageTable,4096); - markUsed((void*)nullptr,4096); - struct multiboot_mmap_entry* mmap = (struct multiboot_mmap_entry*) mb_info->mmap_addr; - struct multiboot_mmap_entry* mmap_end = (struct multiboot_mmap_entry*) ((unsigned int) mb_info->mmap_addr + mb_info->mmap_length); - while(mmap < mmap_end) { - if(mmap->type != 1) { - markUsed((void*)mmap->addr,mmap->len); - } - mmap++; + pmm2.init(mb_info); +} +auto PMM::alloc(uint32_t length) -> void * { + if(!head) { + //Alloc space for head + if(length+sizeof(malloc_t)<=4096) { //Small optimization. The routine for allocating more than one continuous page is terribly slow. + void *tmp; + pmm2 >> tmp; + head=(malloc_t*)tmp; + } else + head=(malloc_t*)pmm2(((length+sizeof(malloc_t))>>12)+1); + if(!head) //The alloc() didn't work! We're out of RAM! + return nullptr; + head->len=length; + head->next=head->last=nullptr; + malloc_t* tmp=head; + tmp++; + return (void*)tmp; } - markUsed(&kernel_start,((uint32_t)&kernel_end)-((uint32_t)&kernel_start)); //Protect kernel) - multiboot_mod_list *mods = (multiboot_mod_list*) mb_info->mods_addr; - for(uint32_t i=0;imods_count;i++) { - markUsed((void*)((uint32_t)(&mods[i])&(~0xFFF)),4096); //Mark all of the module table as used - markUsed((void*)mods[i].mod_start,mods[i].mod_end-mods[i].mod_start); - } + malloc_t* curr=head; + malloc_t* last=nullptr; + do { + uint32_t loc=(uint32_t)curr+sizeof(malloc_t)+curr->len; + if((loc+length+sizeof(malloc_t))<((loc&(~0xFFF))+4096)) { + malloc_t *allocd=(malloc_t *)loc; + allocd->len=length; + allocd->last=curr; + allocd->next=curr->next; //Set double linked list + curr->next=allocd; + if(allocd->next) + allocd->next->last=allocd; + malloc_t *tmp=allocd; + tmp++; + return (void*)tmp; + } + last=curr; + curr=curr->next; + } while(curr); + malloc_t *allocd=nullptr; + if(length+sizeof(malloc_t)<=4096) { //Small optimization. The routine for allocating more than one continuous page is terribly slow. + void *tmp; + pmm2 >> tmp; + allocd=(malloc_t*)tmp; + } else + allocd=(malloc_t*)pmm2(((length+sizeof(malloc_t))>>12)+1); + if(!allocd) //The alloc() didn't work! We're out of RAM! + return nullptr; + last->next=allocd; + allocd->len=length; + allocd->last=last; + allocd->next=nullptr; + malloc_t *tmp=allocd; + tmp++; + return (void*)tmp; +} +auto PMM::free(void* ptr) -> bool { + if(!ptr) + return false; + malloc_t* curr=head; + malloc_t* chk=(malloc_t*)ptr; + chk--; + do { + if(curr==chk) { + uint32_t start=((uint32_t)chk)&(~0xFFF); + uint32_t end=start+0x1000; + if((((uint32_t)(curr->last)last)>=end))&&(((uint32_t)(curr->next)>=end)||((uint32_t)(curr->next)last) + curr->last->next=curr->next; + else { + head=curr->next; + } + if(curr->next) + curr->next->last=curr->last; + return true; + } + curr=curr->next; + } while(curr); + return false; } } diff --git a/kernel/hal/x86/mm/pmm2.cpp b/kernel/hal/x86/mm/pmm2.cpp new file mode 100644 index 0000000..72decf9 --- /dev/null +++ b/kernel/hal/x86/mm/pmm2.cpp @@ -0,0 +1,98 @@ +#include +#include +//In this part, please remember that the address is split into 3 parts. Bitmap: +// AAAA AAAA ABBB BBBB BBBB CCCC CCCC CCCC +#define SPLIT1_FLAG 0xFF800000ul +#define SPLIT1_SHIFT(a) ((a)<<23) +#define SPLIT1_UNSHIFT(a) ((a)>>23) +#define SPLIT2_FLAG 0x007FF000ul +#define SPLIT2_SHIFT(a) ((a)<<12) +#define SPLIT2_UNSHIFT(a) (((a)<<23)&0x7FF) +#define SPLIT3_FLAG 0x00000FFFul +#define SPLIT3_SHIFT(a) ((a)) +#define SPLIT3_UNSHIFT(a) ((a)&0xFFF) +extern "C" const int kernel_start; +extern "C" const int kernel_end; //those are voids actually + +namespace MTGosHAL { +PMM2::PMM2(): pmm3() { +} + +auto PMM2::markUsed(const void * addr, uint32_t length) -> bool { + uint32_t add=(uint32_t)addr; + uint32_t pagetid = SPLIT1_UNSHIFT(add); + if(length > 256*1024*1024) //Maximum allocation limit is 256MB + return false; + if(!pageTable[pagetid]) { + void* temp; + pmm3 >> temp; + pageTable[pagetid]=(uint16_t*)temp; + for(int i=0;i<2048;i++) + pageTable[pagetid][i]=0; + markUsed(pageTable[pagetid],1024); //Not a mistake + } + //Check if used + for(uint32_t curr_addr=add+length;curr_addr>=add;curr_addr-=0x1000) { + if(pageTable[SPLIT1_UNSHIFT(curr_addr)][SPLIT2_UNSHIFT(curr_addr)]) + return false; + } + //Mark as used + uint16_t counter=1; + for(uint32_t curr_addr=add+length;curr_addr>=add;curr_addr-=0x1000) { + pageTable[SPLIT1_UNSHIFT(curr_addr)][SPLIT2_UNSHIFT(curr_addr)]=counter++; + pmm3.markUsed((void*)curr_addr); + } + return true; +} + +auto PMM2::operator >> (void * &addr) -> PMM2 & { + pmm3 >> addr; + markUsed(addr,4096); + return *this; +} +auto PMM2::operator << (const void *addr) -> PMM2 & { + uint32_t add=(uint32_t)addr; + if(!pageTable[SPLIT1_UNSHIFT(add)]) + return *this; //Prevent nullptr derefs + for(int i=0;i void* { + //I want to get this working so: + //TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO + // NEVER USE A BRUTE-FORCE ALGO TO ALLOC PAGES! + //TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO + for(uint32_t i=0;i<(uint32_t)(-(pages*4096));i+=4096) { + if(markUsed((void*)i,pages*4096)) + return (void*)i; + } + return nullptr; +} +auto PMM2::init(struct multiboot_info* mb_info) -> void { + pmm3.init(mb_info); + void *temp; + pmm3 >> temp; + pageTable=(uint16_t**)temp; + for(int i=0;i<4096;i++) + pageTable[i]=nullptr; + markUsed(pageTable,4096); + markUsed((void*)nullptr,4096); + struct multiboot_mmap_entry* mmap = (struct multiboot_mmap_entry*) mb_info->mmap_addr; + struct multiboot_mmap_entry* mmap_end = (struct multiboot_mmap_entry*) ((unsigned int) mb_info->mmap_addr + mb_info->mmap_length); + while(mmap < mmap_end) { + if(mmap->type != 1) { + markUsed((void*)mmap->addr,mmap->len); + } + mmap++; + } + markUsed(&kernel_start,((uint32_t)&kernel_end)-((uint32_t)&kernel_start)); //Protect kernel) + multiboot_mod_list *mods = (multiboot_mod_list*) mb_info->mods_addr; + for(uint32_t i=0;imods_count;i++) { + markUsed((void*)((uint32_t)(&mods[i])&(~0xFFF)),4096); //Mark all of the module table as used + markUsed((void*)mods[i].mod_start,mods[i].mod_end-mods[i].mod_start); + } +} +} diff --git a/kernel/hal/x86/mm/qdmm.cpp b/kernel/hal/x86/mm/pmm3.cpp similarity index 87% rename from kernel/hal/x86/mm/qdmm.cpp rename to kernel/hal/x86/mm/pmm3.cpp index 96cc913..13cd052 100644 --- a/kernel/hal/x86/mm/qdmm.cpp +++ b/kernel/hal/x86/mm/pmm3.cpp @@ -1,12 +1,12 @@ #include #include -#include +#include #include extern "C" const int kernel_start; extern "C" const int kernel_end; //those are voids actually namespace MTGosHAL { -QDPMM::QDPMM() {} -auto QDPMM::init(struct multiboot_info * mb_info) -> void { +PMM3::PMM3() {} +auto PMM3::init(struct multiboot_info * mb_info) -> void { for(int i=0;i<0x8000;i++) bitmap[i]=0; struct multiboot_mmap_entry* mmap = (struct multiboot_mmap_entry*) mb_info->mmap_addr; @@ -37,14 +37,14 @@ auto QDPMM::init(struct multiboot_info * mb_info) -> void { } } } -auto QDPMM::markUsed(const void * addr) -> void { +auto PMM3::markUsed(const void * addr) -> void { unsigned int address=(unsigned int)addr; address>>=12; int index=address>>5; int bit=1<<(address&0x1F); bitmap[index]&=~bit; } -auto QDPMM::operator >> (void * &addr) -> QDPMM & { +auto PMM3::operator >> (void * &addr) -> PMM3 & { for(int i=0;i<0x8000;i++) { if(!bitmap[i]) continue; @@ -60,7 +60,7 @@ auto QDPMM::operator >> (void * &addr) -> QDPMM & { addr=nullptr; return *this; } -auto QDPMM::operator << (const void * addr) -> QDPMM & { +auto PMM3::operator << (const void * addr) -> PMM3 & { unsigned int address=(unsigned int)addr; address>>=12; int index=address>>5; diff --git a/mtgos.old b/mtgos.old new file mode 100755 index 0000000000000000000000000000000000000000..4668c9eab3745f5a18ac544b746909672a90b241 GIT binary patch literal 102792 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 literal 0 HcmV?d00001 diff --git a/test.elf b/test.elf index d9d6f5e0cea4ee9f25edeea5557082c336a87dda..e8795eceabf4ea32f04b6aa5152f4a5779887c55 100755 GIT binary patch delta 469 zcmZ8dy-or_5T4yV{&EE2pn$}LJA@!cFBp+TH2zT#8Yu{kg@(XIi4hIA)WpU{3vvBv zXnX|2OITR)C_aEQ0?|0he)G-FH#58QRJ*S|n5^(_wah^Q0D_MQi+IQ`rVcoH#*2s^ z0bu~4?I72A<|0tSid73B zLM44$uSR(s=PZDZ6i20z?CK(f<7~E~+K;=CbG<6@z$Ndflzp6D`E(9KtS&&N15cMfTA7y}4%n93K zt8pb%)R*-Li~81LFB@@YV6!}UZ#NAd!&ayP`p8pl9CSqNmqJ+4m5@9zW5G<^tMM$m z<`y@;