DMA con write back

DMA con write back

de Bruno Emanuel Gandos Telis -
Número de respuestas: 2

Buenas tardes, tengo unas consultas sobre el funcionamiento del DMA con write back, en caso de que se dé una escritura en una línea cacheada.

En las notas se dice que la forma de solucionar esto es invalidando la entrada del cache, esto se realiza con el dirty bit? es decir, el dirty bit contenido en la cache en la línea correspondiente, indica que el DMA ha desincronizado la memoria principal y la cache? En caso de ser así, es el dirty bit el que invalida la cache generando un miss en el próximo acceso?

Gracias.

 


En respuesta a Bruno Emanuel Gandos Telis

Re: DMA con write back

de Gustavo Brown -

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