wip: memory change
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user