Вы находитесь на странице: 1из 36

Cuando un programa est corriendo y la CPU necesita leer datos o instrucciones desde la RAM, la CPU verifica primero para

ver si los datos estn en la memoria cach. Si los datos que necesita no estn ah, lee los datos desde la RAM a sus registros, pero tambin carga una copia de los datos en la memoria cach

La siguiente vez que la CPU necesite los mismos datos, los encontrar en la memoria cach y ahorrar el tiempo necesario para cargar los datos desde la RAM. Las instrucciones de programas a menudo se encuentran en la memoria cach. Con frecuencia, los programas piden a la computadora que haga la misma operacin de manera repetida hasta que se cumpla una condicin particular.

En lenguaje de computadora, este proceso repetitivo se llama ciclo (ingls: loop). Por ejemplo, cuando un programa procesador de palabras busca una palabra especfica, debe revisar cada palabra en el documento hasta que encuentra una igual.

Si las instrucciones que le dicen a la unidad aritmtica y lgica cmo encontrar una pareja, estn en la memoria cach, la unidad de control no tiene que cargarlas desde la memoria RAM cada vez. Como resulta, la bsqueda se completa ms rpido.

NOTA: En la actualidad esta memoria est integrada en el procesador, y su propsito es almacenar una serie de instrucciones y datos a los que el procesador accede continuamente, con la finalidad de que estos accesos sean instantneos. Estas instrucciones y datos son aquellas a las que el procesador necesita estar accediendo de forma continua, por lo que para el rendimiento del procesador es imprescindible que este acceso sea lo ms rpido y fluido posible.

Esta cach est integrada en el ncleo del procesador, trabajando a la misma velocidad que este. La cantidad de memoria cach L1 vara de un procesador a otro, estando normalmente entra los 64KB y los 256KB. Esta memoria suele a su vez estar dividida en dos partes dedicadas, una para instrucciones y otra para datos.

Integrada tambin en el procesador, aunque no directamente en el ncleo de este, tiene las mismas ventajas que la cach L1, aunque es algo ms lenta que esta. La cach L2 suele ser mayor que la cach L1, pudiendo llegar a superar los 2MB. A diferencia de la cach L1, esta no est dividida, y su utilizacin est ms encaminada a programas que al sistema.

Es un tipo de memoria cach ms lenta que la L2, muy poco utilizada en la actualidad. En un principio esta cach estaba incorporada a la placa base, no al procesador, y su velocidad de acceso era bastante ms lenta que una cach de nivel 2 o 1, ya que si bien sigue siendo una memoria de una gran rapidez (muy superior a la RAM, y mucho ms en la poca en la que se utilizaba), depende de la comunicacin entre el procesador y la placa base.

En cuanto a la utilizacin de la cach L2 en procesadores multinucleares, existen dos tipos diferentes de tecnologas a aplicar: Por un lado est la habitualmente utilizada por Intel, que consiste en que el total de la cach L2 est accesible para ambos ncleos y; Por otro est la utilizada por AMD, en la que cada ncleo tiene su propia cach L2 dedicada solo para ese ncleo.

Composicin interna La memoria cach est estructurada, una cach L2 de 512 KB se distribuye en 16.384 filas y 63 columnas llamado Tag RAM, que indica a qu porcin de la RAM se halla asociada cada lnea de cach, es decir, traduce una direccin de RAM en una lnea de cach concreta.

Diseo En el diseo de la memoria cach se deben considerar varios factores que influyen directamente en el rendimiento de la memoria y por lo tanto en su objetivo de aumentar la velocidad de respuesta de la jerarqua de memoria. Estos factores son las polticas de ubicacin, extraccin, reemplazo, escritura y el tamao de la cach y de sus bloques.

Poltica de ubicacin Decide dnde debe colocarse un bloque de memoria principal que entra en la memoria cach. Las ms utilizadas son: Directa: Al bloque i-simo de memoria principal le corresponde la posicin i mdulo n, donde n es el nmero de bloques de la memoria cach. Asociativa: Cualquier bloque de memoria principal puede ir en cualquiera de los n bloques de la memoria cach.

Poltica de extraccin La poltica de extraccin determina cundo y qu bloque de memoria principal hay que traer a memoria cach. Existen dos polticas muy extendidas: Por demanda: Un bloque slo se trae a memoria cach cuando ha sido referenciado y se produzca un fallo. Con prebsqueda: Cuando se referencia el bloque i-simo de memoria principal, se trae adems el bloque (i+1)-esimo. Esta poltica se basa en la propiedad de localidad espacial de los programas.

Poltica de reemplazo Determina qu bloque de memoria cach debe abandonarla cuando no existe espacio disponible para un bloque entrante. Bsicamente hay cuatro polticas que son:
Aleatoria: El bloque es reemplazado de forma aleatoria. FIFO: Se usa un algoritmo First In First Out FIFO (primero en entrar es el primero en salir) para determinar qu bloque debe abandonar la cach. Este algoritmo generalmente es poco eficiente.

Menos recientemente usado (LRU): Se sustituye el bloque que hace ms tiempo que no se ha usado en la cach, traeremos a cach el bloque en cuestin y lo modificaremos ah. Menos frecuencias usadas (LFU): Se sustituye el bloque que ha experimentado menos referencias.

Cach de disco Adems de las anteriores, que son de propsito general, existe una cach de funcionalidad especfica que se aloja en memoria RAM estndar. Es la cach de disco, destinada a contener los datos de disco que probablemente sean necesitados en un futuro prximo y los que deben ser escritos.

Cach de disco Si la informacin requerida est en chach, se ahorra un acceso a disco, lo que es centenares de veces ms rpido (recuerde que los tiempos de acceso a RAM se miden en nanosegundos y los de disco en milisegundos).

Nota: Existe un mecanismo parecido al de cach de disco que aqu se describe pero que funciona en sentido inverso. Es decir, aloja en disco los datos que no pueden ser almacenados en la memoria RAM. Es el sistema de memoria virtual.

El funcionamiento de la cach de disco se basa en dos esquemas de operacin. La lectura adelantada ("Read-ahead") y la escritura retrasada ("Write-behind"). La primera consiste en anticipar lo que se necesitar de forma inmediata y traerlo a la cach. Por su parte, la escritura retrasada consiste en mantener los datos en cach hasta que se producen momentos de desocupacin del sistema de disco.

En este caso la cach acta como memoria "buffer" intermedio, y no se obliga al subsistema a realizar fsicamente ninguna escritura, con lo que las cabezas quedan libres para nuevas lecturas.

Puesto que los cachs de disco de escritura retrasada mantienen los datos en memoria voltil despus que "supuestamente" se han escrito en el dispositivo, una cada accidental del sistema, por fallo de energa o apagado intempestivo, puede producir prdidas de los datos alojados en la cach en ese momento (es esta una de las razones por las que los sistemas Windows y Linux exigen un proceso especial de apagado, que a veces tarda unos segundos, en los que observamos una intensa actividad del sistema de disco).

Cach de disco en MS DOS y Windows: La cache de los sistemas MS DOS y de los primeros sistemas Windows se denominaba SmartDrive. Por su parte, los nuevos Sistemas de 32 bits disponen de un controlador virtual denominado VCACHE que utiliza un esquema de funcionamiento de lectura adelantada y escritura atrasada.

VCACHE tiene la ventaja cachear ficheros en discos de red, y de permitir cambiar en tiempo de ejecucin la cantidad de memoria destinada a este menester. Cuando la actividad del disco es elevada pero la ocupacin de memoria es baja, VCACHE incrementa su tamao para realizar la mayor cantidad de operacin en RAM, evitando de este modo accesos a disco.

la terminologa C++ los flujos que son cacheados se denominan "buffered". A este respecto, los compiladores C/C++ disponen de su propio sistema de cach para ficheros de disco. Esta cach se denomina de ejecucin (runtime), para distinguirla de la cach del Sistema. As mismo, disponen de recursos en la Librera Estndar para forzar su vaciado en caso necesario; para esto se recurre a la funciones fflush (para ficheros abiertos con fopen) y flush (para los flujos de salida, "ostreams").

Sin embargo, no olvide que el vaciado de la cach del compilador se realiza sobre la del Sistema, que est por debajo (recuerde que el Software tiene una estructura de capas), y que el SO decide por su cuenta cuando es el momento oportuno para realizar fsicamente la escritura de los discos. Esto significa que una seguridad total solo se alcanza forzando la escritura de la cach del Sistema, y esto naturalmente depende de la plataforma utilizada.

Nota: Adems de las posibilidades ofrecidas en la Librera Estndar, el compilador MS Visual C++ para Windows ofrece la funcin _flushall, que fuerza el vaciado de la cach de ejecucin de todos los ficheros abiertos. Tambin dispone de la librera COMMODE.OBJ, que enlazada con la aplicacin, fuerza que las llamadas a fflush y a _flushall escriban directamente los buffers al disco en vez de a la cach del Sistema.

ejemplo muestra algunas formas de vaciado de los buffers del compilador y de la cach del Sistema: #include <stdio.h> #include <ofstream.h> void funcES1() { FILE* Fichero1; // L.5 fflush(Fichero1); // L.6 _commit(_filenum(Fichero1)); // L.7 } void funcES2() { ofstream Fichero2; // L.11 Fichero2.flush(); // L.12 _commit(Fichero2.rdbuf()->fd()); // L:13 } void main() { // ======== funcES1(); funcES2(); }

Comentario L.5 abre el fichero Fichero1 para lectura y escritura. La llamada a fflush en L.6 fuerza al programa a vaciar al SO la cach de ejecucin asociados al fichero1. La llamada a _commit en L.7 obliga al cache de disco del Sistema vaciar sus buffers. L.11 se instancia un objeto Fichero2 de la plantilla basic_ofstream<char>, para realizar escritura.

La lnea L.12 invoca el mtodo flush para dicho objeto. Esta invocacin fuerza al programa a vaciar al SO los buffers de ejecucin asociados con Fichero2. La invocacin a _commit en L.13 obliga al cach de disco del Sistema a vaciar los buffers al disco. Esta funcin requiere un manejador "handle" referido al fichero; en este caso, el manejador se obtiene mediante una invocacin al mtodo rdbuf. ofstream.rdbuf()->fd().

Nota: _commit es una funcin de MS Visual C++ que obliga al Sistema a vaciar los buffers de un fichero determinado. No es estndar C++ y solo funciona en Sistemas MS de 16 bits. En los de 32 bits se recurre a la librera Commode.obj segn se ha indicado

Вам также может понравиться