Wikipedia explains it quite well, actually. On one hand write-back vs. write-through defines when the data is written to the backing store (aka main memory):
- Write-through – write is done synchronously both to the cache and to the backing store.
- Write-back (or write-behind) – initially, writing is done only to the cache. The write to the backing store is postponed until the cache blocks containing the data are about to be modified/replaced by new content.
On the other hand write allocate vs. no-write-allocate defines how to deal with write misses, i.e. wether or not data from the backing store is brought into the cache:
- Write allocate (aka fetch on write) – datum at the missed-write location is loaded to cache, followed by a write-hit operation. In this approach, write misses are similar to read misses.
- No-write allocate (aka write-no-allocate or write around) – datum at the missed-write location is not loaded to cache, and is written directly to the backing store. In this approach, only system reads are being cached.