Beispiel #1
0
void create_page_table()
{
    printf("Creating page table\n");
    int* page_directory = (int*)0x180000;
    page_directory[0] = 0x181007;
    int* page_table = (int*)0x181000;
    int i;
    for (i = 0; i < 1024; ++i) {
        page_table[i] = 0x00000007 + i * 0x1000;
    }

    set_page_directory(0x00180000);
}
Beispiel #2
0
void
paging_init(multiboot_info_t* mb)
{
    extern int end_of_image;
    paging_set_allocatable_start((phys_t)&end_of_image);

    size_t pages_registered = register_available_memory(mb);
    printf("%d MiB available useful memory.\n", pages_registered * PAGE_SIZE / 1024 / 1024);

    uint32_t* page_directory = (uint32_t*)alloc_zeroed_page();

    create_page_tables_for_kernel_space(page_directory);
    identity_map_kernel(page_directory);
    recursively_map_page_directory(page_directory);

    set_page_directory((phys_t)page_directory);

    kernel_page_init(kernel_end, KERNEL_STACK_BEGIN);
}