Bruno,
El "dirty bit" sirve para indicar que el la línea ha sido modificada por lo que no se puede descartar la misma sin antes actualizar el bloque asociado. Por ejemplo, se tiene una línea en cache en un escenario con write-back y se hace una escritura sobre la misma. Esta línea debe marcarse como "sucia" (dirty bit) hasta que efectivamente el bloque de memoria asociado sea actualizado con la nueva información. Cuando se actualiza el bloque se limpia el bit.
Por otra parte cuando se tiene DMA se debe velar por la coherencia del cache. Lo más sencillo es que cuando el DMA realiza una escritura sobre un bloque de memoria la cache que está "espiando el bus" detecta qué bloques se están escribiendo e invalida las entradas de cache correspondientes (de tal manera que un subsiguiente lectura a una de las líneas involucradas no la va a encontrar en el cache sino que va a tener que volver a leerla de memoria principal).
Cuando el DMA realiza una lectura a memoria, si el cache tiene un a política write-back el DMA debe esperar si hay líneas modificadas en la cache. En ese caso debe detenerse la transferencia DMA y esperar a que los bloques sean actualizado en memoria principal para poder proseguir ("flush" de la cache).
Saludos,
Gustavo