I'm getting back into osdev and there is one thing I can't figure out about paging.
My code for getting a page table entry from a virtual address looks basically like this
Code: Select all
uint32_t dir_index = DIRECTORY_INDEX(virt);
uint32_t table_index = TABLE_INDEX(virt);
directory_entry_t* dir = (directory_entry_t*) 0xFFFFF000;
page_t* table = ((uint32_t*) 0xFFC00000) + (0x400 * dir_index);
if (dir[dir_index] & PAGE_PRESENT) {
return &table[table_index];
}
My question: why is table not calculated like in the following code? Why does my current code work?
Code: Select all
page_t* table = ((uint32_t*) 0xFFC00000) + (dir_index << 12);
That's the last thing standing in my way for understanding paging