S — Split. Offset = low 12 bits of 0x5A3C. In binary 0x5A3C = 0101 1010 0011 1100; the low 12 bits are 1010 0011 1100 = 0xA3C. The bits above bit 11 give VPN = 0x5.
L — Lookup.PageTable[0x5]=0x12= PFN.
C — Concatenate.PA=(0x12≪12)∣0xA3C=0x12000∣0xA3C=0x12A3C.
::: PA = 0x12A3C
Entries =232−12=220=1,048,576. Size =220×4 B=222 B=4 MiB per process.
With hundreds of processes, that's gigabytes of tables for programs that touch only a few pages — the exact motivation for Multi-level Page Tables, which allocate sub-tables only for used regions.
::: 4 MiB per process
Recall Solution 3.2
MMU splits the address, looks up VPN 0x9, sees valid = 0 → raises a page fault trap.
OS locates the page on disk (swap), picks a free frame — or evicts one via a replacement policy — and loads the data.
OS writes the new PFN into PageTable[0x9] and sets valid = 1.
The faulting instruction restarts (it never completed its memory access), and translation now succeeds.
::: Fault → OS loads page & updates entry → instruction restarts.
(a) 4 KiB=212 → offset = 12 bits.
(b) VPN =48−12=36 bits.
(c) PFN =40−12=28 bits.
(d) VA is 48−40=8 bits wider. The virtual space (248 bytes) is 28=256× larger than physical RAM's addressable space (240 bytes) — that surplus is exactly the over-commitment virtual memory buys you (extra pages live on disk).
::: offset 12, VPN 36, PFN 28, VA 8 bits wider (256× virtual/physical)
B: PA=(0x777≪12)∣0x000=0x777000.
Same virtual address, different frames → isolation. Achieved by per-process page tables; a context switch reloads the page-table base register (CR3) so each process sees its own map.
::: A → 0xABC000, B → 0x777000 (per-process tables give isolation)
The page table lives in RAM, so a naïve translation needs two RAM trips: one to fetch the entry (100 ns) and one to fetch the data (100 ns) → 200 ns total, i.e. 2× slower.
This is exactly why a TLB exists: it caches recent VPN→PFN mappings on-chip so most translations skip the first RAM trip. Locality (see Cache Memory and Locality) is what makes the TLB hit rate high.
::: 200 ns, 2× slowdown
Recall Solution 5.2
EAT=0.95(1+100)+0.05(100+100)=0.95×101+0.05×200=95.95+10=105.95ns.
The TLB collapsed a 200 ns worst case down to ~106 ns — close to the ideal 100 ns — purely by caching translations for the 95% common case.
::: EAT = 105.95 ns
The remaining 20 bits are 1100 0000 0100 0000 0010 (the VPN).
Level-1 index = top 10 bits of the VPN = 11 0000 0001 = 0x301 (= 769).
Level-2 index = next 10 bits = 00 0000 0010 = 0x002 (= 2).
Check: (769×222)+(2×212)+0xABC=0xC0402ABC. The MMU indexes the level-1 table with 0x301, follows that to a level-2 table, indexes it with 0x002, and reads the PFN — see Multi-level Page Tables.
::: offset 0xABC, L1 index 0x301 (769), L2 index 0x002 (2)