A poorly written OS for the x86 arch. (WIP)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
#include "memory.h"
|
|
|
|
|
|
|
|
// https://wiki.osdev.org/Page_Frame_Allocation
|
|
|
|
// page = block
|
|
|
|
|
|
|
|
// MAX_BLOCK_SIZE_IN_BITS/8 bytes
|
|
|
|
// i.e. : bit i of byte n define status of block 8n+i
|
|
|
|
// block = 8n+i
|
|
|
|
|
|
|
|
// in 32-bit mode, we have access to 2^32 blocks
|
|
|
|
// which is (2^32)*BLOCK_SIZE blocks
|
|
|
|
// and with a blocksize of 1024, we git around 4.3 trillion blocks
|
|
|
|
// which is more than enough
|
|
|
|
int bitmap = 0;
|
|
|
|
|
|
|
|
void mod_bitmap(uint block, uint bit, uint bflag) {
|
|
|
|
// create a bitmask that will be applied to the bitmap
|
|
|
|
int bitmask = 1 << bit;
|
|
|
|
|
|
|
|
// apply the bitmask, resulting in the bit:n bit will bet
|
|
|
|
// set to bflag
|
|
|
|
bitmap = (((bitmap & ~bitmask)) | (bflag << bit));
|
|
|
|
}
|