miércoles, 27 de mayo de 2009

Jerarquía de Memoria

Podemos comenzar explicando lo que se conoce como Jerarquía de Memoria que no es mas que la organización piramidal de la memoria en niveles, que tienen los ordenadores. Su objetivo es conseguir el rendimiento de una memoria de gran velocidad al coste de una memoria de baja velocidad, basándose en el principio de cercanía de referencias.




Memoria Virtual

La Memoria Virtual no es sino espacio del disco duro que se utiliza como si fuera memoria RAM. Sin embargo, esta memoria virtual tiene varios inconvenientes; el principal es su velocidad, ya que es muchísimo más lenta que la RAM. Mientras la velocidad de acceso a la RAM se mide en nanosegundos (ns, la 0,000000001 parte de un segundo), la de los discos duros se mide en milisegundos; es decir, que se tarda casi un millón de veces más en acceder a un dato que encuentra en el disco duro que a uno de la RAM. Es una técnica que simula más memoria que la que realmente existe y permita a la computadora ejecutar varios programas simultáneamente, sin importar su tamaño. El sistema de memoria virtual corta el programa en segmentos llamados "páginas". En lugar de llevar el programa entero a memoria, lleva tantas páginas a memoria como pueden caber, basándose en la mezcla actual de programas, y deja las restantes páginas en el disco. Cuando se requieren instrucciones que no están en memoria, la página de disco apropiada es llamada, superponiéndose a la página en memoria. Si una página de memoria contiene variables u otros datos que son alterados por la ejecución del programa, la página es temporalmente almacenada en disco cuando se requiere alojamiento para las nuevas páginas. La entrada y la salida de páginas de programa son llamados paging (paginado) o swapping (intercambio o transferencia). Con el objeto de obtener un máximo provecho de las técnicas de memoria virtual, los programas no deberían contener mucho "código spaghetti", en el cual la lógica del programa apunta atrás y adelante, hacia extremos opuestos del programa. Si lo hacen, resultaría una cantidad excesiva de accesos a disco para traer los segmentos del programa. El acceso a disco debería reservarse para llamar el próximo conjunto de datos, no las mismas instrucciones una y otra vez. Si bien la memoria virtual puede ser realizada en software, para una operación eficiente la memoria virtual requiere características de hardware especializadas. Los programas de aplicación a veces demandan capacidad de memoria virtual, pero solamente usan algunas técnicas de intercambio para ejecutar programas grandes, no verdadera memoria virtual. En la memoria RAM se tienen los cachés de varios dispositivos lentos del sistema, además se cargan allá los programas, instrucciones, programas controladores de diferentes dispositivos, etc., pero entre tanta información que se almacena en la RAM, esta puede quedar saturada. Sin embargo en la realidad esto no sucede. Para ejemplificar, el común de las computadoras que se hallan trabajando con varias aplicaciones simultáneamente, tienen cargado varios mega bytes entre programas, instrucciones y datos, inclusive más de lo que físicamente la computadora puede soportar. ¿Cómo es que una computadora puede hacer esto?, bueno el proceso técnicamente se denomina paginación, y emplea una porción del disco duro para almacenar la información que no cabe en la memoria RAM. El sistema operativo se encarga de mover la información que no cabe y no se está utilizando, al disco duro y a la inversa es decir, la información que se requiere, del disco duro a la RAM. Así, Windows 95/98/NT/2000 también maneja una memoria virtual en el disco duro. El acceso a la configuración de la memoria virtual en Windows 95 es similar al indicado para el caché del CD-ROM y del caché del disco duro. Sin embargo, y por lo general, es el mismo sistema operativo el que se halla administrando la memoria virtual. Solo bajo condiciones muy fuera de lo común es conveniente ajustar manualmente estos parámetros, la mayoría de las veces permitir que Windows 95 maneje directamente la memoria virtual es la mejor elección.

Mapeo

Al pasar los datos desde la memoria principal a la memoria cache estos se traen por bloques. El motivo de llevar los datos por bloques se debe a que, por ejemplo, si el procesador pide el dato de la dirección n entonces es muy probable que después pida el dato de la dirección n+1, por lo tanto, se ahorra tiempo al llevar los datos por bloques a la cache. Por otro lado como ya hemos visto en los párrafos anteriores la memoria Cache es de poca capacidad, en relación con la memoria principal, por lo tanto cobra importancia el tema de que y como pongo datos en la memoria Cache. Es necesario entonces contar con un proceso de conversión de las direcciones, que se llama MAPEO.

Mapeo Directo
Para explicar, el mapeo directo es mejor comenzar con un ejemplo, que por el momento, es sólo, ilustrativo y no tiene relación con la realidad.

•MM 512B ----> 9b 64 bloques
•MC 32B ------> 5b 4 bloques
•Cada bloque de 8B

El Mapeo Directo funciona de la siguiente forma:
Según las condiciones antes definidas se tiene lo siguiente: cada bloque será de 8 Byte, es decir 8 palabras de largo 8.

La memoria principal al ser dividida por 8 (512 B / 8) dará como resultado 64 bloques de 8 palabras cada uno.

La memoria Cache también se divide por 8 (32B / 8), lo cual da como resultado 4 bloques.

Cada bloque de la memoria principal se coloca dentro de uno de los bloques de la memoria Cache siguiendo un orden establecido de la siguiente forma (La Fig. muestra parte de esta asignación):

En el bloque cero de la cache pueden ir cualquiera de los múltiplos exactos de 4 (0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60), que son 16.En el bloque uno de la cache van (1, 5, 9, 13, 17, 21, 25...............)

En el bloque dos (2, 6, 10, 14, 18, 22, 26..................................)

En el bloque tres van (3, 7, 11, 15, 19, 23,27..................)

Para distinguir entre las 16 alternativas que corresponden a un bloque determinado de la memoria cache existe una memoria, en este caso de 4 bits, que lleva el registro. Esta memoria se denomina TAG.

El WIB es de 3 bits por que con estos se pueden distinguir entre 8 alternativas, es decir las que corresponden a las divisiones de un bloque.
El BIC es de 2 bits porque se pueden distinguir cuatro alternativas, o sea los cuatro bloques de la cache.
El TAG, finalmente distingue entre las 16 alternativas que corresponden a los diferentes bloques de la memoria principal que pueden ir a parar a un bloque determinado de la cache.

Ventajas

• Se pueden conservar más procesos simultáneamente en memoria principal.

• Utilización más eficiente del procesador ya que es más probable que uno de los procesos esté en estado Listo.

• No existe el límite de tamaño de la memoria y por tanto es posible ejecutar un proceso más grande que esta.

• El programador dispone de una memoria sólo condicionada por el tamaño del disco duro.

• La gestión de la memoria virtual la realiza el hardware y el software del S.O.

• El S.O. cargará automáticamente en memoria los fragmentos de un proceso cuando lo necesite.

Protección

La memoria "física" de un ordenador es una secuencia de bytes, que empieza en el 0 y termina por ejemplo 64 megas. Es decir un "array" de bytes. Cada byte tiene una dirección: el número que ocupa posicionalmente en la memoria. Esta dirección es conocida como "direccion física". Las direcciones que va a utilizar un programa (en modo protegido), no son esas. Siempre son traducidas, o mapeadas, en direcciones de memoria física por un mecanismo de "traducción de direcciones".Este mecanismo, nos introduce en el concepto de "dirección virtual". Se llama de esta manera porque no corresponde directamente a posiciones de memoria "física", sino que a través de una "función de mapeado" equivale a una dirección de memoria física. Es decir este mecanismo, al "apuntar" a una dirección de memoria, lo que hace es buscar, por ejemplo en unas tablas internas, la correspondencia entre esta dirección y la dirección real "física" del dato.La traducción de dirección "virtual" a "física" también proporciona protección de memoria, ya que podría disponerse por ejemplo, que ciertas direcciones físicas de memoria no se mapeen desde ninguna dirección virtual.Además de esta protección, en la función de traducción de direcciones, se pueden identificar ciertas direcciones virtuales como "no válidas". Esto amplía el mecanismo de protección. Para no tener que generar una direccion física cuando se presenta un dirección virtual no válida, el mecanismo de traducción de direcciones informa de una "excepción", de forma que el software del sistema operativo, puede tomar la acción que considere oportuna.