Diamo un'occhiata a questo con l'aiuto di un esempio. Supponiamo di avere una cache mappata direttamente e di utilizzare la politica di riscrittura. Quindi abbiamo un bit valido, un bit sporco, un tag e un campo dati in una riga della cache. Supponiamo di avere un'operazione: scrivi A (dove A è mappato alla prima riga della cache).
Quello che succede è che i dati (A) dal processore vengono scritti nella prima riga della cache. Vengono impostati i bit validi e i bit dei tag. Il dirty bit è impostato su 1.
Dirty bit indica semplicemente che la riga della cache è stata scritta dall'ultima volta che è stata inserita nella cache!
Supponiamo ora che venga eseguita un'altra operazione: leggi E (dove E è anche mappato sulla prima riga della cache)
Poiché abbiamo una cache mappata direttamente, la prima riga può essere semplicemente sostituita dal blocco E che verrà portato dalla memoria. Ma poiché l'ultimo blocco scritto nella riga (blocco A) non è ancora stato scritto nella memoria (indicato dal bit sporco), quindi il controller della cache eseguirà prima una riscrittura nella memoria per trasferire il blocco A in memoria, quindi sostituirà la riga con il blocco E emettendo un'operazione di lettura in memoria. il bit sporco è ora impostato su 0.
Quindi la politica di riscrittura non garantisce che il blocco sarà lo stesso in memoria e nella riga della cache associata. Tuttavia, ogni volta che la riga sta per essere sostituita, viene eseguita inizialmente una riscrittura.
Una politica di scrittura è esattamente l'opposto. In base a ciò, la memoria avrà sempre dati aggiornati. Cioè, se il blocco della cache viene scritto, anche la memoria verrà scritta di conseguenza. (nessun uso di pezzi sporchi)
write back
ha prestazioni migliori?