add bitmap
This commit is contained in:
@@ -5,16 +5,36 @@
|
|||||||
|
|
||||||
#include "../memory/config.h"
|
#include "../memory/config.h"
|
||||||
|
|
||||||
|
uint8_t PageFrameAllocator::bitmap[4294967296 / 4096 / 8];
|
||||||
|
|
||||||
void PageFrameAllocator::init(){
|
void PageFrameAllocator::init(){
|
||||||
Multiboot::Memory* memory_map_start = Multiboot::getMemoryMap();
|
Multiboot::Memory* memory_map_entry = Multiboot::getMemoryMap();
|
||||||
|
|
||||||
dout << "kernel start: " << ___KERNEL_START___;
|
dout << "kernel start: " << ___KERNEL_START___;
|
||||||
dout << " kernel end: " << ___KERNEL_END___ << endl;
|
dout << " kernel end: " << ___KERNEL_END___ << endl;
|
||||||
while(memory_map_start != 0){
|
while(memory_map_entry != 0){
|
||||||
dout << "Memory: " << hex << memory_map_start->getStartAddress() << " to " << memory_map_start->getEndAddress() << " is available: " << memory_map_start->isAvailable() << ".\n";
|
void* start = memory_map_entry->getStartAddress();
|
||||||
memory_map_start = memory_map_start->getNext();
|
void* end = memory_map_entry->getEndAddress();
|
||||||
|
bool available = memory_map_entry->isAvailable();
|
||||||
|
dout << "Memory: " << hex << start << " to " << end << " is available: " << available << "." << endl;
|
||||||
|
|
||||||
|
//TODO priotity for conflicting regions
|
||||||
|
for(uint64_t i = (uint64_t)start; i < (uint64_t)end; i += 4096){
|
||||||
|
uint64_t pg = i/4096;
|
||||||
|
if(available)
|
||||||
|
bitmap[pg/8] |= 1 << pg%8;
|
||||||
|
else
|
||||||
|
bitmap[pg/8] &= ~(1 << pg%8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
memory_map_entry = memory_map_entry->getNext();
|
||||||
|
}
|
||||||
|
|
||||||
|
for(uint64_t i = (uint64_t)&___KERNEL_START___; i < (uint64_t)&___KERNEL_END___; i += 4096){
|
||||||
|
uint64_t pg = i/4096;
|
||||||
|
bitmap[pg/8] &= ~(1 << pg%8);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PageFrameAllocator::stats(){
|
void PageFrameAllocator::stats(){
|
||||||
|
|||||||
@@ -5,6 +5,8 @@
|
|||||||
#include "../memory/pageframe.h"
|
#include "../memory/pageframe.h"
|
||||||
|
|
||||||
namespace PageFrameAllocator {
|
namespace PageFrameAllocator {
|
||||||
|
extern uint8_t bitmap[4294967296 / 4096 / 8];
|
||||||
|
|
||||||
void init ();
|
void init ();
|
||||||
void stats ();
|
void stats ();
|
||||||
PageFrame* alloc(bool kernel);
|
PageFrame* alloc(bool kernel);
|
||||||
|
|||||||
Reference in New Issue
Block a user