notes on chapter3 (WIP)
This commit is contained in:
parent
ca88006b5b
commit
dcdb1b8ff7
1 changed files with 37 additions and 0 deletions
37
notes/chapter3-page-tables
Normal file
37
notes/chapter3-page-tables
Normal file
|
@ -0,0 +1,37 @@
|
|||
Pages tables enables each process to have its own private memory space.
|
||||
It's slicing the memory into small pages (PGSIZE, 4KiB) so we can
|
||||
distribute it to many processes without much fragmentation, and enables
|
||||
xv6 a few tricks:
|
||||
|
||||
- mapping the same memory (a trampoline page) in several address spaces
|
||||
- guarding kernel and user stacks with an unmapped page
|
||||
|
||||
3.1 Paging hardware
|
||||
|
||||
|
||||
RISC-V instruction (both user and kernel) manipulate virtual addresses.
|
||||
Physical memory (RAM) = physical addresses (phy@ in the notes).
|
||||
Virtual memory = fake memory addresses (virt@ in the notes).
|
||||
RISC-V page table hardware maps virt@ and phy@.
|
||||
|
||||
XV6 = Sv39 RISC-V = only bottom 39 bits for virt@ (top 25 bits are not used).
|
||||
2^39 @ = 2^27 page table entries (PTEs)
|
||||
a PTE = 44 bits of physical page number (PPN) + flags
|
||||
|
||||
vocabulary, acronyms, et caetera:
|
||||
- physical/virtual addresses = phy@/virt@
|
||||
- Page Table Entry = PTE
|
||||
- Physical Page Number = PPN
|
||||
|
||||
virt@ = [ 25-bit EXT ; 27-bit index ; 12-bit offset ]
|
||||
↑64 ↑39 ↑12 ↑0
|
||||
index = index to the PPN in the page table
|
||||
page table = 2^27 entries
|
||||
page table entry = [ 44-bit PPN ; 10-bit flags ]
|
||||
↑54 ↑10 ↑0
|
||||
phy@ = [ 44-bit PPN (indexed by virt@ index) ; 12-bit virt@ offset ]
|
||||
↑56 ↑12 ↑0
|
||||
|
||||
virt@ = 39 (usable) bits, phy@ = 56 bits
|
||||
|
||||
Paging hardware translates virt@ with its top 27 of the 39 bits to find a PTE
|
Loading…
Add table
Reference in a new issue