wip: memory change

This commit is contained in:
2024-10-18 14:45:37 +02:00
parent 9e85807a09
commit 7128f2640a
21 changed files with 121 additions and 76 deletions

View File

@ -2,6 +2,7 @@
#include <stddef.h>
#include <stdint.h>
#include "debug.h"
#include "kprintf.h"
#include "memory.h"
#include "utils.h"
@ -9,14 +10,13 @@
#define PT_SIZE 1024
#define MAX_TLB_ENTRIES 32
extern uint32_t page_table_entries[PT_SIZE];
extern uint32_t page_table1[PT_SIZE];
static int16_t find_next_block(size_t nb_pages)
{
for (uint16_t i = 1; i < PT_SIZE; i++) {
for (uint16_t i = 1; i < PT_SIZE - 1; i++) {
uint16_t j;
for (j = 0;
page_table_entries[i + j] >> 12 == 0 && j < nb_pages;
for (j = 0; page_table1[i + j] >> 12 == i + j && j < nb_pages;
j++)
;
if (j == nb_pages)
@ -39,14 +39,15 @@ void *alloc_pages(size_t size)
void *frame = alloc_frames(PAGE_SIZE);
if (!frame) {
for (size_t j = index; j < i; j++)
free_frames(
(void *)(page_table_entries[j] >> 12),
PAGE_SIZE);
free_frames((void *)(page_table1[j] >> 12),
PAGE_SIZE);
return NULL;
}
page_table_entries[i] = (uint32_t)frame << 12 | INIT_FLAGS;
assert(page_table1[i] >> 12 == i);
page_table1[i] = (uint32_t)frame << 12 | INIT_FLAGS;
}
return (void *)(index * PAGE_SIZE);
PRINT_PTR(page_table1[index]);
return (void *)(page_table1[index] >> 12);
}
int free_pages(void *page_ptr, size_t size)
@ -65,8 +66,8 @@ int free_pages(void *page_ptr, size_t size)
return -1;
}
for (size_t i = page_index; i < page_index + nb_pages; i++) {
free_frames((void *)(page_table_entries[i] >> 12), PAGE_SIZE);
page_table_entries[i] = INIT_FLAGS;
free_frames((void *)(page_table1[i] >> 12), PAGE_SIZE);
page_table1[i] = i << 12 | INIT_FLAGS;
}
return 0;
}