TRT
Sign in
KernelInternalsscheduling

Trace: Virtual Memory and the Page-Fault Path

Virtual memory lets each process use an address space that is translated through page tables and hardware translation caches. Pages provide the unit for mapping, protection, and often movement between RAM and storage.

The Runtime Theory Team8 min read05 steps

layer stack

Kernel

HWHardware
KKernel
RTRuntime
APPApplication
SYSSystem
CLIClient
NETNetwork
TLSCrypto
SRVServer

adjacent altitudes in this subsystem are still being traced

trace spine

  1. 01 Look up the translation
  2. 02 Walk page tables on a miss
  3. 03 Raise a fault if needed
  4. 04 Resolve mapping or reject access
  5. 05 Retry the original instruction

This trace follows the actual state transitions behind the companion Virtual Memory and the Page-Fault Path. Each step below names its concrete inputs; values illustrate the mechanism and vary across implementations.

Step 1: Look up the translation

Virtual memory lets each process use an address space that is translated through page tables and hardware translation caches. Pages provide the unit for mapping, protection, and often movement between RAM and storage. This abstraction supports isolation and flexible placement, but translations and misses have real costs.

Step 2: Walk page tables on a miss

On a memory access, the processor first uses a translation lookaside buffer when possible. If translation is absent, hardware or the kernel walks page tables. If the mapping is valid but not resident, a page fault transfers control to the kernel, which may allocate a page, load data, or reject an invalid access.

Step 3: Raise a fault if needed

A valid but nonresident mapping can fault into the kernel, which may load or allocate a page and then resume the instruction; an invalid access is rejected instead.

Checkpoint: A valid but nonresident mapping can fault into the kernel, which may load or allocate a page and then resume the instruction; an invalid access is rejected instead. Confirm this state before advancing to Resolve mapping or reject access.

Step 4: Resolve mapping or reject access

A page fault is not always an error: demand-zero allocation and copy-on-write can be handled transparently. A major fault that requires storage I/O is much slower than a minor fault resolved without disk access. Poor locality can cause repeated faults and thrashing.

Step 5: Retry the original instruction

After a process forks, explain why the parent and child may initially share physical pages yet observe independent writes. Identify the fault mechanism that enables this behavior.

The trace is done when this check holds: After a process forks, explain why the parent and child may initially share physical pages yet observe independent writes. Compare the outcome against the companion article before making a performance claim.

Hardware, runtime, and observability notes

When tracing Trace: Virtual Memory and the Page-Fault Path in a live production environment (subsystem: scheduling, primary layer: kernel), keep the following step-level cost model and diagnostic checklist in mind:

  • Step 1 (kernel): Look up the translation — verifies state invariants before advancing the execution pointer.
  • Step 2 (kernel): Walk page tables on a miss — verifies state invariants before advancing the execution pointer.
  • Step 3 (kernel): Raise a fault if needed — verifies state invariants before advancing the execution pointer.
  • Step 4 (kernel): Resolve mapping or reject access — verifies state invariants before advancing the execution pointer.
  • Step 5 (kernel): Retry the original instruction — verifies state invariants before advancing the execution pointer.

Every transition across the kernel boundary carries both a direct CPU/memory cost (cache-line fills, descriptor lookups, lock acquisitions, or context switches) and a tail-latency queueing risk under contention. To verify this trace on your own service, capture latency histograms and hardware/kernel counters across each step boundary, compare cold-cache versus warm-cache execution paths, and confirm that error or timeout branches release all acquired descriptors, locks, and buffers cleanly.

Not started

Sign in to save your learning progress.

Sign in to save