Multiple CPUs are connected to a single, shared main Memory, have full access to all input and output devices, and are controlled by a single Operating System that treats all processors equally, reserving none for special purposes. Symmetric multiprocessing is a Uniform Memory Architecture

Such a system must guarantee:

Context Switch Handling

As in the single CPU case, the TLB of the particular CPU must be flushed of userspace entries upon Context Switch in Multiprocessing.

Page Replacement Handling

  • Evict TLB entry for that process
  • Tell other CPUs to evict their corresponding TLB entry through OS, “TLB shootdown”

TLB Shootdown

Performed by the Page Replacement Algorithm A CPU that has evicted a page table entry from its TLB tells other CPUs to evict their corresponding TLB entry through OS/software interrupts, because that PTE is invalid

Thread Synchronization

Bypass the Cache for TEST-AND-SET, because the caches will be wrong due to the atomicity of the test-and-set instruction.

Cache Coherency

The requirement of threads needing to have identical views of memory implies that all caches have to be in sync. This guarantee is complicated and slow. This is the bottleneck to Core count on a CPU.

Cache snoops the bus; if a memory value changes (e.g. from ), it must account for this within itself.

Write-Invalidate Protocol

If the cache sees you write to memory, it invalidates that entry within itself.

Write-Update Protocol

If the caches sees you write to memory, it updates its own corresponding cache entry to be correct.