Prioridad a los fallos de lectura frente a los de escritura
Con una caché de escritura directa (writre throuhg) la mejora de rendimiento más importante proviene del uso de un buffer de escritura de tamaño apropiado. Sin embargo, esto complica los accesos a memoria debido a que el buffer puede contener el valor actualizado (escrito) de una posición que se necesita en un fallo de lectura.
Ejemplo: Supongamos que una Mc de correspondencia directa y escritura directa hace corresponder los bloques en los que se encuentran las direcciones 512 y 1024 sobre la misma línea de Mc. Supongamos que se ejecuta el siguiente programa:
Cuando se ejecuta (1) se lleva <R3> al buffer de escritura y a la línea de Mc a la que pertenece la posición 512 (supuesto acierto de escritura, es decir, el bloque al que pertenece 512 se encuentra en Mc).
Cuando se ejecuta (2) se produce un fallo de lectura y se sustituye en Mc el bloque al que pertenece 512 por el bloque al que pertenece 1024
Cuando se ejecuta (3) se vuelve a producir un fallo de lectura para llevar de nuevo el bloque al que pertenece 512 a Mc, pero es posible que éste no esté actualizado por el efecto de (1) si aún el contenido del buffer no se ha escrito en Mp
Este problema de inconsistencia se puede resolver de dos maneras:
1) Retrasando el servicio del fallo de lectura producido por (3) hasta que el buffer esté vacío (todo su contenido se haya reflejado en Mp). Esta solución penaliza bastante los fallos de lectura, pues los datos empíricos demuestran que la espera sistemática a que el buffer se vacíe para servir un fallo e lectura puede penalizar estos fallos por un factor de 1.5. Por ello es recomendable dar prioridad a la lectura (es mucho más frecuente que la escritura) adoptando la segunda alternativa.
2) Incorporar al proceso asociado al fallo de lectura producido por (3) la comprobación de si el buffer contiene la posición 512, y continuar si el resultado es falso.
Fuente: Estructura de Computadores, Facultad de Informática, UCM