jueves, 22 de septiembre de 2016

Jerarquia de Memoria

El ordenamiento de almacenamiento en las arquitecturas de las computadoras actuales es llamado "jerarquía de memoria". Esta diseñado para tomar ventaja de las ubicaciones de memoria para los programas de computadoras. Cada nivel de la jerarquía es de una velocidad más alta, latencia mas pequeña y de tamaño menor, que los niveles más bajos.

La mayoría de los CPUs modernos son tan rápidos que para la mayoría de los programas, sobrecargan las referencias de localidades de los accesos de memoria, y la eficiencia del cacheo y transferencia  de memoria entre los diferentes niveles de la jerarquía , es la limitación práctica en la velocidad de procesamiento. Como resultado, el CPU pasa mucho de su tiempo, esperando a que las entradas y salidas se completen.



La jerarquía de memoria en la mayoría de las computadoras se compone de la siguiente manera:

Registros: Los accesos más rápidos (usualmente un ciclo de CPU), solo algunos cientos de bytes en tamaño.


Nivel 1 (L1) cache – usualmente accedida en solo unos cuantos ciclos, usualmente miles de kilobytes. 


Nivel 2 (L2) cache – latencia mas alta que L1, usualmente 512KB o más.

Nivel 3 (L3) cache – latencia mas alta que L2, usualmente múltiples megabytes.

Memoria principal (DRAM) – puede tomar cientos de ciclos, pero muchos gigabytes.


Almacenamiento de disco – cientos de miles de ciclos de latencia, pero muy grande.





En el nivel mas alto de la jerarquía, se encuentran los registros de propósito general del CPU. Estos proveen el acceso mas rápido posible a datos. Estos registros a su vez son el objeto más pequeño de la jerarquía de memoria. También son las ubicaciones de memoria más caras. 

Un poco mas abajo, se encuentra el nivel uno del sistema caché, y es el siguiente subsistema de mayor rendimiento en la jerarquía. El tamaño es usualmente muy pequeño, típicamente entre 4k bytes y 32k bytes, aun asi, mucho mas grandes que los registros disponibles en el chip CPU. Aunque el tamaño del nivel uno de cache esta fijado en el CPU y no se puede expandir, el costo por byte de la memoria cache es mucho mas pequeño que el de los registros, porque la cache contiene por mucho mas almacenamiento que es disponible en todos los registros combinados.

El nivel dos de cache esta presente en algunos CPUs, en otros, es tarea del diseñador del sistema el incorporar esta cache. Por ejemplo, la mayoría de procesadores Pentium II, III y IV tienen un nivel dos de cache como parte del paquete de CPU, pero muchos de los procesadores Intel Celeron no lo tienen. El nivel dos de cache es generalmente mucho mas grande que el nivel uno. En CPUs donde Intel incluye el nivel dos de caché como parte del paquete del CPU, la caché no es expandible. Aun asi es de costo mas pequeño que el nivel uno de cache porque se amortigua el costo del CPU a través de todos los bytes en el nivel dos de caché . En sistemas donde el nivel dos, es externo, muchos diseñadores de sistemas dejan al usuario final seleccionar el tamaño de la cache y aumentarlo. Por razones económicas, caches externas son en realidad más caras que las caches que son parte del paquete de CPU.

Bajo el nivel dos de cache, se encuentra el subsistema de la memoria principal. Esta es la memoria de propósito general y de relativamente bajo costo encontrada en la mayoría de sistemas de computadoras. Típicamente esta es la DRAM o algun otra tecnología de memoria similar de bajo costo.

Bajo la memoria principal, está la categoría NUMA. NUMA significa que diferentes tipos de memoria tienen diferentes tiempos de accesos. Por lo tanto, el término NUMA es justamente descriptiva de toda la jerarquía de memoria. Sin embargo, usaremos el término NUMA para describir bloques de memoria que sos electrónicamente similar a la memoria principal pero por alguno razón y otra operan significativamente más lento que la memoria principal. Un buen ejemplo es la memoria en una tarjeta de video. Acceder a la memoria de una tarjeta de video es usualmente mas lento que el acceso a la memoria principal. Otros dispositivos periféricos que proveen un bloque de memoria compartida entre el CPU y el periférico, probablemente ofrezcan un tiempo de acceso similar al de las tarjetas de video. Otros ejemplos de NUMA incluyen ciertas tecnologías de memoria mas lenta como las memorias FLASH, que tienen un acceso significativamente mas lento y tiempos de transferencia mas largos que los del semiconductor estándar de RAM.

La mayoría de los sistemas de las computadoras modernas implementan un esquema de Memoria Virtual que les permite simular memoria principal usando espacio de memoria de un disco duro. Aunque los discos son significativamente mucho mas lentos que la memoria principal, el costo por bit también es significativamente mucho menor. Por lo tanto, es mucho más barato mantener algunos datos en almacenaje magnético que en la memoria principal. Un subsistema de Memoria Virtual es responsable de copiar transparentemente datos entre el disco y la memoria principal tanto como lo necesite un programa.

El Almacenaje de Archivos también usa medios de disco para almacenar datos de programa. Sin embargo, es responsabilidad del programa almacenar y recuperar datos de archivo. En muchas instancias, esto es un poco más lento que usar Memoria Virtual, de ahí que se encuentre en una posición de la jerarquía más baja.

Bajo el Almacenaje de Archivos se encuentra el Almacenaje de Red. En este nivel, un programa esta manteniendo datos en un sistema diferente que conecta el sistema del programa vía una red. Con el Almacenaje de Red se puede implementar Memoria Virtual, Almacenaje de Datos y un sistema conocido como Memoria Compartida Distribuida (donde procesos ejecutándose en diferentes sistemas de computadoras comparten datos en un bloque común de memoria y comunican cambios a ese bloque a través de la red).

La Memoria Virtual, Almacenaje de Archivos y Almacenaje de Red son ejemplos de los llamados subsistemas de memoria en linea. Los accesos a memoria por medio de estos mecanismos son mas lentos que accesos a memoria principal, pero cuando un programa pide datos de algunos de estos dispositivos de memoria, el dispositivo esta listo para responder a la petición tan rápido como sea físicamente posible. Esto ultimo no es cierto para los restantes niveles en la jerarquía de memoria.

Los subsistemas Cerca y Fuera de Linea no están inmediatamente listos para responder a las peticiones de datos de un programa Un sistema de Almacenamiento Fuera de Linea mantiene la información en forma electrónica (usualmente magnética y óptica) pero en medios que no están necesariamente conectados al sistema de la computadora cuando el programa que necesite la información este ejecutándose. Ejemplos de Almacenamiento Fuera de Linea incluyen cintas magnéticas, cartuchos de disco, discos ópticos, y disquetes. Cuando un programa necesita información desde un medio fuera de linea, el programa se detiene y espera a que alguien o algo monte el medio apropiado en la computadora. El Almacenamiento Cerca de Linea usa los mismos medios que los de fuera de línea, la diferencia es que el sistema mantiene el medio en un dispositivo que puede montar automáticamente el medio deseado cuando un programa lo requiera. Las cintas y dispositivos removibles están entre los formatos de almacenamiento mas baratos que existen. Por lo tanto, estos medios son efectivos para almacenar grandes cantidades de datos por largos periodos de tiempo.

El Almacenamiento de Copia Robusta es simplemente el imprimir algunos datos. Si un programa pide alguna información, y la información esta presente únicamente en forma de copia robusta, alguien tendrá que ingresar la información de manera manual a la computadora. El papel es probablemente la forma mas barata de memoria, al menos para ciertos tipos de datos.




No hay comentarios:

Publicar un comentario