Paging
Andrew Whitaker
CSE451
Review: Process (Virtual) Address
Space
user space
kernel space
Each process has its own address space
The OS and the hardware translate virtual
addresses to physical frames
Multiple Processes
user space
kernel space
proc1
proc2
Each process has its own address space
And, its own set of page tables
Kernel mappings are the same for all
Linux Physical Memory Layout
Paging Issues
Memory scarcity
Virtual memory, stay tuned…
Making Paging Fast
Reducing the Overhead of Page Tables
Review: Mechanics of address
translation
virtual address
virtual page #
offset
physical memory
page table
physical address
page frame #
offset
…
page frame #
page
frame 0
page
frame 1
page
frame 2
page
frame 3
page
frame Y
Problem: page tables live in memory
Making Paging Fast
We must avoid a page table lookup for
every memory reference
This would double memory access time
Solution: Translation Lookaside Buffer
Fancy name for a cache
TLB stores a subset of PTEs (page table
translation entries)
TLBs are small and fast (16-48 entries)
Can be accessed “for free”
TLB Details
In practice, most (> 99%) of memory translations handled
by the TLB
Each processor has its own TLB
TLB is fully associative
Any TLB slot can hold any PTE entry
Who fills the TLB? Two options:
Hardware (x86) walks the page table on a TLB miss
Software (MIPS, Alpha) routine fills the TLB on a miss
TLB itself needs a replacement policy
Usually implemented in hardware (LRU)
What Happens on a Context Switch?
Each process has its own address space
So, each process has its own page table
So, page-table entries are only relevant for
a particular process
Thus, the TLB must be flushed on a
context switch
This is why context switches are so expensive
Alternative to flushing: Address
Space IDs
We can avoid flushing the TLB if entries
are associated with an address space
4
1 1 1
2
ASID
V R M
prot
20
page frame number
When would this work well?
When would this not work well?
TLBs with Multiprocessors
page table
TLB 1
page frame #
TLB 2
Each TLB stores a subset of page table state
Must keep state consistent on a multiprocessor
Today’s Topics
Page Replacement Strategies
Making Paging Fast
Reducing the Overhead of Page Tables
Page Table Overhead
For large address space, page table sizes
can become enormous
Example: IA64 architecture
64 bit address space, 8KB pages
Num PTEs = 2^64 / 2^13 = 2^51
Assuming 8 bytes per PTE:
Num Bytes = 2^54 = 16 Petabytes
And, this is per-process!
Optimizing for Sparse Address
Spaces
Observation: very little of the address space is in
use at a given time
virtual
address
space
Basic idea: only allocate page tables where we
need to
And, fill in new page tables lazily (on demand)
Implementing Sparse Address
Spaces
We need a data structure to keep track of
the page tables we have allocated
And, this structure must be small
Otherwise, we’ve defeated our original goal
Solution: multi-level page tables
Page tables of page tables
“Any problem in CS can be solved with a layer
of indirection”
Two level page tables
virtual address
master page #
secondary page#
offset
physical memory
master
page table
physical address
page frame #
secondary
page table
page
frame 1
page
frame 2
page
frame 3
empty
empty
offset
page frame
number
…
secondary
page table
page
frame 0
page
frame Y
Key point: not all secondary page tables must be allocated
Generalizing
Early architectures used 1-level page tables
VAX, x86 used 2-level page tables
SPARC uses 3-level page tables
Alpha 68030 uses 4-level page tables
Key thing is that the outer level must be
wired down (pinned in physical memory) in
order to break the recursion
Cool Paging Tricks
Basic Idea: exploit the layer of indirection
between virtual and physical memory
Trick #1: Shared Libraries
Q: How can we avoid 1000 copies of
printf?
A: Shared libraries
Linux: /usr/lib/*.so
Firefox
Open Office
libc
libc
libc
Physical memory
Shared Memory Segments
Virt Address space 1
Physical memory
Virt Address space 2
Trick #2: Copy-on-write
Copy-on-write allows for a fast “copy” by using
shared pages
Especially useful for “fork” operations
Implementation: pages are shared “read-only”
OS intercepts write operations, makes a real copy
V R M
prot
page frame number
Trick #3: Memory-mapped Files
Normally, files are accessed with system calls
Open, read, write, close
Memory mapping allows a program to access
a file with load/store operations
Virt Address space
Foo.txt