A processor has only a handful of registers, but a program invents dozens of values. A variable is live from where it is defined to its last use; two variables whose lifetimes overlap cannot share a register. Draw a node for each variable and an edge for each overlap and you get the interference graph — colouring it with k colours is register allocation.
Chaitin's insight (1981): repeatedly remove any node with fewer than k neighbours — it can always be coloured later. If every remaining node has k or more neighbours, one must be spilled to memory, paying a store and a load. The most registers ever needed at once is the register pressure; when k drops below it, spills are forced.
Here is the quiet trick the theory rarely shows: pressure depends on the schedule. The value c is computed at the very top but not used until the very bottom, so its ribbon crosses the whole crowded middle. Drag its load down to just before its use and the peak falls from four to three — one instruction moved, one register saved.
The simulation stopped unexpectedly — the lesson continues without it. You can move on; nothing you did was wrong.