mm: put all code into separate files
This commit is contained in:
@@ -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 МБ уже заняты ядром (0x00000000–0x003FFFFF)
|
||||
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); // Сбрасываем бит
|
||||
}
|
||||
Reference in New Issue
Block a user