ecomaikgolf / alma

toy kernel written in C++ for x86-64 machines with the mere purpose of learning OS development
8 stars 1 forks source link

page lock gets returned at request #52

Closed ecomaikgolf closed 2 years ago

ecomaikgolf commented 2 years ago
    uint64_t kernel_size  = &_kernel_end - &_kernel_end;
    uint64_t kernel_pages = kernel_size / UEFIMMap::page_size;

    pfa.lock_pages(&_kernel_start, kernel_pages);

    renderer.println("\n----\nPages\n----");
    for (int i = 0; i < 20; i++) {
        void *mem = pfa.request_page();
        hstr((unsigned long)mem, buffer);
        renderer.println(buffer);
    }

2021-07-24-001156_351x491_scrot

ecomaikgolf commented 2 years ago
pfa.lock_page(0x0);
renderer.println("\n----\nPages\n----");
for (int i = 0; i < 20; i++) {
    void *mem = pfa.request_page();
    hstr((unsigned long)mem, buffer);
    renderer.println(buffer);
}

This works

ecomaikgolf commented 2 years ago
uint64_t kernel_size  = &_kernel_end - &_kernel_end;
 uint64_t kernel_pages = kernel_size / UEFIMMap::page_size;

kernel_pages is 0

ecomaikgolf commented 2 years ago

2021-07-24-004549_416x634_scrot

Kernel size (second value in blue) needs 3 pages, reserves 0, 1 and 2 page, so when we request page we get 3, 4...

ecomaikgolf commented 2 years ago

2021-07-24-005022_404x588_scrot

After reserving kernel pages and then 5 pages I free kernel memory pages and re-request new ones (the ones that I freed)

Everything seems to work, closing issue