Instituto de Estudios Superiores de Chiapas Universidad Salazar
Alumno Augusto José Elorza Torres Grado y Grupo 4to ‘A’ Materia Lenguaje Ensamblador Catedrático Enrique Martínez Gutiérrez
Tapachula, Chiapas a 27 de Octubre de 2008
Memoria y Caché
Introducción Con este trabajo se pretende cubrir los conceptos básicos de la memoria, así como la jerarquía que rige en ellas. Comenzando por la jerarquía misma y definiendo los puntos que deciden las posiciones ocupadas por las distintas memorias. Continuando después con la descripción de las memorias RAM y ROM, siendo estás las que conforman la memoria principal de la computadora. Principalmente almacenan datos que son escritos o requeridos por el microprocesador. En el siguiente punto se analizara un tipo de memoria alterna a la memoria física. Es llamada memoria virtual, y su principal objetivo es el de extender la capacidad de memoria con la cual dispone la computadora. Después analizaremos una memoria que se halla en el microprocesador llamada caché, que funciona como una memoria de datos frecuentes para así poder utilizar los datos más requeridos con mayor velocidad. Y enseguida se puede encontrar el principio de localidad. Seguido a esto, se verá uno de los tipos de mapeo conocido como mapeo directo. Pasando por una exanimación del rendimiento de la caché en base a sus aciertos y fallos. Finalizando con el tema del mapeo o traducción de direcciones, que consiste en traducir las direcciones creadas por una memoria virtual para seguir engañando a los programas que se trata de una dirección normal de la memoria principal.
2
Memoria y Caché
Jerarquía de memoria Se conoce como jerarquía de memoria a 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. Los puntos básicos relacionados con la memoria pueden resumirse en: Cantidad. Cuanta más memoria haya disponible, mas espacio se tendrá para escribir. Esto también significa que existen más direcciones posibles por las cuales, cuando se requiere de un dato, se tiene que pasar hasta llegar a la dirección donde el dato se encuentra. Aunque en ciclos (loops) cuando una referencia se ejecuta n veces, solo una es a memoria y las n-1 restantes serán a la caché. Velocidad. La velocidad óptima será siempre la velocidad a la que el procesador puede trabajar, si esta es más baja o más alta, pueden existir tiempos de espera prolongados entre calculo y calculo cuando se requiere traer operandos o guardar resultados, debido a la diferencia de velocidad. Coste. El costo de toda la memoria que un equipo pueda contener no debe ser excesivo, para que sea factible construir un equipo accesible.
Como puede esperarse los tres factores compiten entre sí, por lo que hay que encontrar un equilibrio. Las siguientes afirmaciones son válidas: A menor tiempo de acceso mayor coste. Normalmente entre mayor velocidad tienen las memorias, mayor es el costo de las mismas. A mayor capacidad mayor coste. Memorias de mayor capacidad suelen ser más costosas que memorias simples o de poca capacidad. A mayor capacidad menor velocidad. Se tienen mas referencias en memoria conforme la capacidad de esta aumenta, no es que la velocidad de esta disminuya, sino que se lleva mas tiempo en la búsqueda de la referencia a leer o escribir.
Se busca entonces contar con capacidad suficiente de memoria, con una velocidad que sirva para satisfacer la demanda de rendimiento y con un coste que no sea excesivo. Gracias a un principio llamado cercanía de referencias, es factible utilizar una mezcla de los distintos tipos y lograr un rendimiento cercano al de la memoria más rápida.
3
Memoria y Caché
Los niveles que componen la jerarquía de memoria habitualmente son: Nivel 0: Registros. Son los registros con los que cuenta el procesador, su posición en la jerarquía se debe a la cercanía con el procesador y a su poca capacidad, elementos por los cuales tiene un rendimiento óptimo. Nivel 1: Memoria caché. La memoria caché también se encuentra cerca del procesador, pero más lejos que los registros. Su capacidad también es poca (comparada con la RAM), por lo que también existen una buena velocidad. Nivel 2: Memoria principal. En este nivel están la ROM y la RAM, que son circuitos integrados diseñados para almacenar información. Sus capacidades pueden ser desde muy pequeñas, como 64 o 128 MB (considerando las capacidades actuales), hasta capacidades enormes como 1 o 2 GB. Estas últimas capacidades afectan al punto de la velocidad aunque pues también permiten mayor almacenamiento de datos. Nivel 3: Disco duro. Los sistemas operativos modernos permiten usar el disco duro como memoria virtuales, que actúan tal y como si fueran memorias principales. Su desempeño disminuye al estar más lejos que todos los anteriores. Nivel 4: Redes. Los equipos que se encuentran ahora en red, son capaces de solicitar y escribir información a través de esta. Pudiendo considerarse como una memoria, aunque pues, los canales que separan a cada máquina pueden ser muy largos, y por lo tanto la velocidad es afectada.
4
Memoria y Caché
Memoria RAM
5
La memoria RAM (Random Access Memory en español Memoria de Acceso Aleatorio) es un circuito integrado capaz de almacenar información. Su nombre lo debe a que se puede acceder a cualquier dirección que contenga aleatoria y rápidamente. Los datos que esta memoria almacena son de tipo volátil ya que, al no haber suministro de energía, los datos que hubiesen almacenados se pierden. Básicamente está constituida por una serie de chips que están soldados a unas placas denominadas módulos. El microprocesador utiliza esta memoria para escribir y leer datos en ella. Aunque los datos de este tipo de memoria también pueden ser borrados cuando dejan de ser usados y ya no son necesarios.
Memoria RAM
Memoria ROM La memoria ROM, (read-only memory) o memoria de sólo lectura, es la memoria que se utiliza para almacenar los programas que ponen en marcha el ordenador y realizan los diagnósticos (como la BIOS). La mayoría de los ordenadores tienen una cantidad pequeña de memoria ROM (algunos miles de bytes). Puesto que la memoria ROM también permite acceso aleatorio, si queremos ser precisos, la memoria RAM debería llamarse memoria RAM de lectura y escritura, y la memoria ROM memoria RAM de sólo lectura.
Memoria ROM
Memoria y Caché
Memoria Virtual La memoria virtual es un sistema permitido por los sistemas operativos modernos, en el cual, se utiliza una porción del disco duro como si fuera parte de la memoria principal permitiendo así tener más memoria de la que realmente posee la computadora. Muchas aplicaciones requieren de espacios grandes de memoria para guardar sus datos. Una solución a ese problema, consiste en que las aplicaciones mantengan parte de su información en disco, moviéndola a la memoria principal cuando se requiera. Para esto se usa la memoria virtual donde el sistema operativo hace uso de la memoria principal y la secundaria para hacer parecer a la computadora que tiene más capacidad en memoria La memoria virtual ha llegado a ser un componente esencial de la mayoría de los sistemas operativos actuales. Y como en un instante dado, en la memoria sólo se tienen unos pocos fragmentos de un proceso dado, se pueden mantener más procesos en la memoria. Es más, se ahorra tiempo, porque los fragmentos que no se usan no se cargan ni se descargan de la memoria. Sin embargo, el sistema operativo debe saber cómo gestionar este esquema.
Memoria Caché La memoria caché es una clase de memoria RAM estática (SRAM) de acceso aleatorio y alta velocidad, situada entre el CPU y la RAM. Se presenta de forma temporal y automática para el usuario, y le proporciona acceso rápido a los datos de uso más frecuente. La ubicación de la caché entre el microprocesador y la RAM, hace que sea suficientemente rápida para almacenar y transmitir los datos que el microprocesador necesita recibir casi instantáneamente. Aunque como su capacidad es mucho menor que la RAM los datos de la caché son reemplazados constantemente, en teoría, solo los datos más comúnmente usados permanecerán por periodos más largos. Las funciones de la caché son las siguientes:
Acelerar el procesamiento de las instrucciones de memoria en la CPU.
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.
Por lo tanto, a mayor instrucciones y datos la CPU pueda obtener directamente de la memoria caché, tanto más rápido será el funcionamiento de la computadora.
6
Memoria y Caché
Principio de localidad
7
Localidad temporal: un elemento referenciado tiende a ser referenciado nuevamente pronto.
Localidad espacial: los elementos cercanos a uno referenciado tienden a ser referenciados pronto.
Mapeo Al pasar los datos desde la memoria principal a la memoria caché 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 caché. Por otro lado la memoria caché es de poca capacidad, en relación con la memoria principal, por lo tanto cobra importancia el tema de que y como poner datos en la memoria caché. Es necesario entonces contar con un proceso de conversión de las direcciones, que se llama mapeo.
Mapeo Directo Mapeo Asociativo (totalmente asociativo) Mapeo Asociativo por conjunto
Mapeo Directo Cada bloque, j, de la memoria principal se corresponde con una única línea, i, de la memoria caché:
i = j modulo(C) Los bits de direcciones se dividen inicialmente en dos partes: Los w bits menos significativos identifican la palabra dentro del bloque. Los s bits más significativos restantes identifican el bloque de memoria. A su vez, de los s bits de bloque se obtienen: Un número de línea (o slot), i, de la caché de r bits, siendo r el Exponente de C (en binario): C = 2r Los (s-r) bits restantes han de guardarse en la caché (bits de Tag) asociados a cada línea, i, y adicionales a ella para completar la dirección. Así, el tamaño real de la caché es superior a Sc, pues estos bits de Tag han de estar en cada línea.
Memoria y Caché
Ejemplo de mapeo directo 24 bits de direcciones, se distribuyen en: w = 2 bits, para identificar cada palabra (byte) dentro del bloque (4 bytes) s = 24 – 2 = 22 bits para identificar el bloque. De los 22 bits de bloque, dado que la caché tiene C = 2 r = 14 bits de línea (o slot). (s-r) = (22-14) = 8 bits de Tag. En el mapeo directo: No existen dos bloques en la misma línea con el mismo Tag. Búsqueda de un dato en la caché: Dada una dirección, se selecciona en la caché el número de línea y se compara el Tag de esa línea con la parte alta de la dirección.
Rendimiento de la caché El funcionamiento de la caché de lectura se parece al de un adivino; debe anticipar lo que ocurrirá en el futuro. Si el dispositivo que está siendo cachéado encuentra los datos en la caché, habrá un éxito ("hit"), en caso contrario, un fracaso ("miss"). Los sistemas de caché actuales son capaces de proporcionar una tasa de éxitos superior al 90%. Como puede figurarse el lector, construir un mecanismo de caché no es una tarea baladí. Se requieren esquemas de funcionamiento que atiendan de forma simultánea y balanceada diversos factores:
Discriminar que información debe ser almacenada y cual descartada.
Decidir la organización interna de este almacenamiento.
Manejar las peticiones de lectura. Esto exige disponer de un mecanismo de intercepción de las peticiones del dispositivo que está siendo cachéado.
Manejar las peticiones de escritura. Interceptar las peticiones de escritura del dispositivo a cachéar.
Tiempo de CPU: TCPU = (cCPU + cdm ) × t Donde: cCPU: ciclos de reloj de ejecución CPU cdm: ciclos de reloj de detención de memoria t: duración del ciclo de reloj
8
Memoria y Caché
Ciclos de detención de memoria: cdm = nlp * ffl * pfl + nep * ffe * pfe , donde nlp: lecturas por programa nep: escrituras por programa ffl, ffe: frecuencia de fallos de lectura o escritura pfl, pfe: penalización de fallos de lectura o escritura.
Juntando lecturas y escrituras: cdm = namp * ff * pf Donde: namp : número de accesos a memoria por programa. ff : frecuencia de fallos. pf : penalización de fallo.
Teniendo en cuenta el número de instrucciones (IC): TCPU = IC × (CPI + cdmi × ff × pf) × t, Donde: cdmi : es el número de ciclos de detención por instrucción.
Si el número de fallos por instrucción es nfi = nami × ff Donde: nami es el número de accesos a memoria por instrucción
Resulta que Tcpu = IC × (CPI + nfi × pf) × t
Impacto de los fallos: o Si el CPI es bajo, el impacto es mayor. o Crece con la frecuencia de reloj.
9
Memoria y Caché
Mapeo o traducción de direcciones Para poder ejecutar instrucciones, y no sabemos en qué parte de la memoria están cargadas, debemos tener un mecanismo de traducción de direcciones virtuales a reales. Para ello, se necesitan dos cosas. Primero, el compilador manejará una dirección base más un desplazamiento al referirse a las instrucciones. Segundo, el sistema operativo asignará como dirección base el número de página, al paginar al proceso. De esta manera, puede buscarse el inicio de una página en memoria, sumarle el desplazamiento y así obtener la dirección real de una instrucción.
Nótese que en el diagrama se tiene una tabla de proceso y ahí mismo se maneja la dirección inicial de la tabla de páginas. En algunos sistemas operativos, estas dos tablas se manejan por separado. La traducción de direcciones virtuales para segmentos se maneja de manera similar.
Existe un esquema adicional, paginación/segmentación, que es la combinación de ambos. La memoria se divide en marcos de página, idealmente más pequeños que el tamaño del marco de
10
Memoria y Caché
página en un sistema de paginación tradicional. Cada segmento está compuesto por cierto número de páginas. Es decir, el tamaño del segmento es un múltiplo del tamaño de página. Este esquema pretende sacar ventaja de los beneficios de los otros dos.
Este mismo mecanismo de traducción de direcciones virtuales puede aplicarse en paginación/segmentación.
Recordemos que este mapeo debe efectuarse siempre, instrucción por instrucción ejecutada. Por ello, entre más rápido sea el mecanismo, mejor. Existe una manera de mejorar dicho mecanismo mediante hardware. Una memoria asociativa es muy cara, pero permite buscar en toda la memoria en un mismo pulso de reloj. Implementando memoria asociativa, podemos traducir direcciones para páginas o segmentos.
11
Memoria y Caché
12
Sin embargo, el utilizar memoria asociativa implica que el número de marcos de página y/o el número de segmentos, se ve limitado por el tamaño de la memoria asociativa. Es decir, no puede haber más marcos de página que número de celdas en la memoria asociativa. Por ello, hay sistemas operativos que manejan una combinación de ambos. Se cargan a memoria las páginas/segmentos más utilizados, y la traducción se utiliza de manera normal. Solamente en aquellos casos en los que no encontrara la página/segmento en la memoria asociativa, efectuaría la traducción directa. Para esa instrucción, haría un doble mapeo. Sin embargo, el principio de localidad nos asegura que esto no sucederá con frecuencia. A continuación se muestra el esquema de traducción asociativa/directa para un sistema de paginación/segmentación.
Memoria y Caché
En muchas ocasiones, el sistema operativo maneja adicionalmente la compartición. Por ejemplo, en vez de que cada usuario tenga cargada su propio procesador de palabras, existe uno solo para todos los usuarios, y lo comparten. Lo mismo sucede con archivos y datos. En estos casos, el sistema operativo maneja un mecanismo adicional de compartición. Aquí, deberá verificarse que se tenga acceso permitido a la página o segmento que se desea accesar. Adicionalmente, se pueden tener varios tipos de accesos permitidos (Read, Write, Append, eXecute) como en UNIX. En el siguiente diagrama se muestra cómo se maneja dicha compartición.
Por último, el siguiente esquema engloba las diferentes partes que interactúan a un mismo tiempo para accesar una página a memoria.
13
Memoria y Caché
Conclusiones Con lo anterior puedo concluir que la jerarquía de memoria es una forma que rige el desempeño de la memoria del equipo. Tiene las bases sobre que memorias son más rápidas y dado que en procesos de cálculos y operaciones lo que se necesita es velocidad, esas memorias son utilizadas con mayor prioridad. La RAM y ROM son tipos de memorias comunes en la computadora, aunque la ROM solo es de lectura y contiene programas precargados, la RAM permite la lectura y escritura de datos, pero para ambas memorias, los datos son perdidos cuando se pierde el suministro de energía. La memoria virtual es una tecnología capaz de ampliar la capacidad de memoria que posee la computadora, usando para ello una porción de disco duro para que actúe como RAM permitiendo la escritura y lectura de datos. La memoria caché permite acceder a los datos más frecuentes de manera muy rápida debido a su cercanía con el microprocesador, agilizando así los procesos y cálculos que se realicen. El principio de localidad ayuda a entender como un elemento puede volverse frecuente (en uso como acceso o lectura) y que además los elementos cercanos a el pueden serlo también. El mapeo directo de memoria indica cómo mover bloques de datos, moviéndolos así por el principio de localidad. El mecanismo de traducción de direcciones permite convertir direcciones reales a direcciones virtuales, basándose en una dirección base que es asignada en la compilación.
14
Memoria y Caché
Bibliografía http://es.wikipedia.org/wiki/Jerarquía_de_memoria http://es.wikipedia.org/wiki/Cercanía_de_referencias http://www.masadelante.com/faq-memoria-rom.htm http://es.wikipedia.org/wiki/Memoria_principal http://quidel.inele.ufro.cl/~jruiz/est2/Webeo2/MAPEO.html http://multingles.net/docs/jmt/memoria_virtual.htm
15