Memoria Cache

La memoria caché es una clase de memoria RAM estática (SRAM) de acceso aleatorio y alta velocidad, situada entre la CPU y la RAM que proporciona acceso rápido a los datos de uso más frecuente. Su uso es tranparente para el usuario.

La memoria caché tiene una velocidad 5 ó 6 superior a la DRAM (RAM dinámica), por eso su capacidad es mucho menor y su precio es de 10 a 20 veces mayor que el de la memoria principal.El principio que subyace bajo su uso se basa en el hecho de que las las computadoras tienden a utilizar las mismas instrucciones y, en menor medida, los mismos datos repetidamente, por ello la caché contiene las instrucciones más usadas.

El cache de disco trabaja sobre los mismos principios que la memoria cache, pero en lugar de usar SRAM de alta velocidad, usa memoria principal. Los datos más recientes del disco duro a los que se ha accedido (así como los sectores adyacentes) se almacenan en un buffer de memoria. Cuando el programa necesita acceder a datos del disco, lo primero que comprueba es la cache del disco para ver si los datos ya están ahí. La cache de disco puede mejorar drásticamente el rendimiento de las aplicaciones, dado que acceder a un byte de datos en RAM puede ser miles de veces más rápido que acceder a un byte del disco duro.

Política de Ubicación
Decide dónde debe colocarse un bloque de memoria principal que entra en la memoria cache. Las más utilizadas son:
Directa: Al bloque n-ésimo de memoria principal le corresponde la posición n módulo k donde k es el número de bloques de la memoria cache.
Asociativa: Cualquier bloque de memoria principal puede ir en cualquier lado del bloque de memoria cache.
Asociativa por conjuntos: La memoria cache se divide en n conjuntos de bloques, así al bloque i-ésimo de memoria principal le corresponde el conjunto i módulo (k/n) donde k es el número de bloques de memoria cache. Dicho bloque de memoria podrá ubicarse en cualquier posición dentro del conjunto asociado de la memoria cache.

Política de Extracción

La política de extracción determina cuándo y qué bloque de memoria principal hay que traer a memoria cache. Existen dos políticas muy extendidas:
Por demanda: Un bloque sólo se trae a memoria cache cuando ha sido referenciado y se produzca un fallo.
Con prebúsqueda: Cuando se referencia el bloque i-ésimo de memoria principal, se trae además el bloque (i+1)-esimo. Esta política se basa en la propiedad de localidad espacial de los programas.

Política de Escritura
Determina cuándo se actualiza la información en memoria principal cuando se ha escrito en memoria cache. Existen dos políticas principales:
Escritura inmediata o escritura directa: En inglés Write Through. Cuando se escribe en un bloque que se encuentra en memoria cache, la información se modifica también simultáneamente en memoria principal, manteniendo así la coherencia en todo momento. Suele combinarse con la técnica de "No carga en escritura" (No Write Allocation) que significa que, cuando haya que escribir en un bloque que no se encuentra en la cache, la modificación se realizará únicamente en memoria principal, sin traer dicho bloque a cache, y además sólo se actualizará la palabra concreta que haya cambiado.
Escritura aplazada o post-escritura: En inglés Write Back. Cuando se escribe en un bloque que se encuentra en memoria cache, queda marcado como basura usando un bit especial llamado normalmente dirty bit o bit de basura. Cuando el bloque sea desalojado de memoria cache (mediante la correspondiente política de reemplazo), se comprueba el bit de basura, y si está activado se escribe la información de dicho bloque en memoria principal. Esta política suele combinarse con la técnica de "Carga en escritura" (Write Allocation), que significa que, cuando haya que escribir en un bloque que no se encuentra en la cache, se traerá a cache el bloque en cuestión y se modificará ahí.