Identity Paging

From OSDev.wiki
Revision as of 03:05, 7 March 2007 by osdev>Jhawthorn
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Template:Convert

Identity Paging, Identity Mapped paging and 1:1 paging are terms often used on the forum to describe a design choice where a portion of [virtual addresses|Physical, Virtual, Paging, help?!?] are mapped to physical addresses that have the same value.

For instance you may decide to use IdentityPaging in the lowest 1MB, in which case vaddr =00000000..00000fff= are mapped to frame #00000, vaddr =00001000..00001fff= are mapped to frame #00001, and so on (vaddr =000ff000..000fffff= are mapped to frame #000ff)

You can easily do this with a loop filling the page table: <verbatim> void idpaging(dword *first_pte, vaddr from, int size) {

  from = from & 0xfffff000; // discard bits we don't want
  for(;size;from+=4096,first_pte++) {
     *first_pte=from|1;     // mark page present.
  }

} </verbatim>

!What's the advantage of 1:1 paging

When switching to paged protected mode, your 1:1 mapping region doesn't care of whether paging is enabled or disabled. Placing your switching code and important data such as the core page directory and a few system page tables in this region gives you an easier way to set up paging without headaches.