mm: put all code into separate files

This commit is contained in:
2025-04-04 14:58:05 +03:00
parent b7b33fefca
commit 2e2b7c7612
7 changed files with 814 additions and 446 deletions
+40
View File
@@ -0,0 +1,40 @@
#include "../include/paging.h"
#include <stdint.h>
#include "../include/stdio.h"
uint8_t page_bitmap[512]; // 1 бит на страницу
void init_allocator() {
int i;
// Помечаем все страницы как свободные (0)
for (i = 0; i < 512; i++) {
page_bitmap[i] = 0;
}
// Первые 4 МБ уже заняты ядром (0x000000000x003FFFFF)
for (i = 0; i < 1024 / 8; i++) { // 1024 страницы = 128 байт
page_bitmap[i] = 0xFF; // Все биты = 1 (занято)
}
}
void* alloc_page() {
int i, j;
for (i = 0; i < 512; i++) {
if (page_bitmap[i] != 0xFF) {
for (j = 0; j < 8; j++) {
if (!(page_bitmap[i] & (1 << j))) {
page_bitmap[i] |= (1 << j);
return (void*)(((i * 8) + j) * 0x1000);
}
}
}
}
printf("no bitches? no free pages?\n");
return (void*)0; // Нет свободных страниц
}
void free_page(void* physaddr) {
uint32_t page_num = (uint32_t)physaddr / 0x1000;
uint32_t byte_idx = page_num / 8;
uint32_t bit_idx = page_num % 8;
page_bitmap[byte_idx] &= ~(1 << bit_idx); // Сбрасываем бит
}