Cache Replacement Policies

In a set-associative cache, when all ways in a set are occupied and a new block must be loaded, which replacement policy do most modern L1 caches use and why?

A

Optimal (Belady's), because modern hardware can predict future accesses

B

FIFO, because it is simplest to implement in hardware

C

LRU or pseudo-LRU, because recently used lines are likely to be used again

D

Random, because it avoids pathological worst cases that LRU suffers from