Dentro de la arquitectura base de cualquier ordenador, aparte de la CPU, otro de los elementos importantes es la memoria RAM. Es por ello que os hemos preparado un artículo introductorio sobre cómo funciona la misma, cuál es su utilidad principal, su evolución histórica y algunos conceptos clave como la latencia y el ancho de banda.
¿Qué es la memoria RAM?
La memoria RAM o memoria del sistema es el almacenamiento más rápido y cercano a un microprocesador, ya sea una CPU o un chip de función específica como una GPU o el controlador de un SSD, pero que se encuentra fuera del mismo.
Sus particularidades son:
- Es lo suficientemente rápida como para que el microprocesador haga cálculos directos en la misma. Lo cual le permite acceda a los datos que necesita en tiempo real para ejecutar programas y realizar operaciones sin retrasos significativos.
- Es volátil, lo que significa que cuando deje de haber suministro eléctrico de cualquier tipo, esta dejará de funcionar y perderá toda la información. Por lo que a diferencia de dispositivos de almacenamiento persistente como los discos duros o los SSD, la RAM no conserva datos una vez que el ordenador se apaga.
- Es una pieza indispensable para aquellas aplicaciones que requieren velocidad de transferencia de la información, el tiempo de acceso más bajo posible y la mayor capacidad de almacenamiento que se pueda tener dentro de unos límites.
En todos los sistemas la RAM se encuentra dentro de una jerarquía de memoria donde los registros y los niveles de caché son las más rápidas y de menor capacidad de almacenamiento y los dispositivos de almacenamiento persistentes son los más lentos, pero a cambio pueden almacenar grandes cantidades de datos. Siendo el puente necesario para que el sistema informático funcione, ya sea un PC, una consola de videojuegos, un teléfono móvil, un reloj inteligente e incluso un servidor.
¿Por qué la RAM y la CPU son componentes separados?
Hay dos cosas que todo programa informático le requiere al hardware para funcionar: la mayor capacidad de cálculo posible y cantidades ilimitadas de memoria rápida. Por lo que en un mundo ideal la memoria RAM y el microprocesador, o chip de apoyo, que la use deberían encontrarse en el mismo chip. No obstante, la cosa no es así y hemos de entender que su existencia como un elemento aparte de la CPU se lo debemos a una serie de circunstancias.
Hemos de partir que el proceso utilizado en la fabricación de la memoria RAM y la CPU es distinto. Mientras que un microprocesador usa transistores muy pequeños (litografías muy avanzadas) en la memoria del sistema, se utilizan en tener el mayor almacenamiento posible al menor coste posible, sacrificando velocidad a cambio de capacidad. Si bien hay memorias dentro de un microprocesador, como es el caso de los registros, la memoria caché e incluso memorias locales, estas tienen un almacenamiento por área mucho más pequeño.
Es decir, la RAM suple la necesidad de memoria que tienen los programas con respecto al almacenamiento, pero también la velocidad. Pensad en la CPU como el cerebro de una persona que está trabajando y la RAM el papeleo que tiene encima de la mesa y al que ha de acceder lo más rápido posible. La única desventaja es que tendrá que ordenar el escritorio de trabajo al terminar el día (volatilidad de la RAM) le ahorra tiempo de tener que levantarse continuamente de su lugar de trabajo.
Flip-flops, los precursores de la RAM
En realidad existen dos tipos de memoria RAM, siendo las evoluciones históricas y diferentes tipos en realidad mejoras en capacidad y de la interfaz de comunicación con el microprocesador más que otra cosa. Sin embargo, en los inicios de la informática no existían chips de RAM, sino que se usaba generalmente un chip TTL en particular: el 7474, el cual contenía dos flip-flops D también conocidos como latches o biestables.
Históricamente, el TTL 7474 se considera una forma muy primitiva de memoria, y no solo se utilizaba como RAM, sino que en los tiempos donde las CPU estaban disgregadas en varios chips también servían como registros y memorias caché. Sin embargo, con el paso del tiempo se vio más que claro que era necesario poder almacenar grandes cantidades de información.
¿Cómo funcionaba?
Cada flip-flop D en el 7474 almacena un bit de información, su particularidad es que puede mantenerse en un estado de 0 o 1 hasta que el valor se vea alterado por una señal externa. Dicha característica le permite mantener la información a largo plazo.
- Hemos de partir que cada flip-flop dispone de una entrada de datos y una señal de reloj en un lado y por el otro lado dos salidas, llamadas Q y Q inversa.
- Se le llama Q a la salida normal, nos indica el valor que almacena el flip-flop en ese momento. Por lo que si Q=1 significa que almacena un 1, sí, en cambio, Q=0, entonces almacena un 0. Mientras que Q inversa almacena el valor invertido que tiene Q en ese momento.
El hecho de tener dos salidas se debe a la utilidad en algunos circuitos lógicos de tener un valor y el invertido, principalmente evitaba tener que colocar un chip TTL en placa para invertir el resultado.
El nacimiento de la memoria RAM
La reducción continua del tamaño de los transistores llevo a que aparecieran chips que en vez de tener un par de bits, como era el caso de los flip-flops, a tener chips más complejos. Así pues, en 1969 una recién fundada Intel lanzo al mercado el primer chip de memoria SRAM del mercado, el Intel 3101.
Podía almacenar hasta 64 bits de memoria, pero organizaba las celdas de memoria, de 4 bits de información cada una. El 3101 fue la primera RAM de la historia e inauguro la organización interna de las celdas de memoria en una matriz de filas y columnas. En total tenía 16 direcciones de memoria (4 pines de direccionamiento) que almacenaban los 4 bits de datos que eran transmitidos a través de 4 pines de datos.
Sin embargo, no fue adoptado masivamente y es que pese a tener 32 veces la capacidad de almacenamiento que un 7474 y similares, no era suficiente y se continuaban necesitando cantidades ingentes de chips de memoria. Pero eso no le quita el privilegio de ser la primera memoria RAM de la historia.
El advenimiento de la memoria DRAM
La memoria dinámica de acceso aleatorio no funciona a partir de un flip-flop como sí que ocurre con la SRAM, sino que para almacenar un bit de información se basa en dos componentes:
- Un transistor que actúa como interruptor y controla el acceso a la carga almacenada.
- Un condensador, el cual se utiliza para almacenar el bit de información. Si este se encuentra cargado se interpreta como un 1, en cambio, si no lo está como un 0.
El primer chip de memoria DRAM fue el Intel 1103 lanzado en 1970, justo un año después del 3101, con una capacidad de 1 Kilobit (128 bytes) y, por tanto, 16 veces más la capacidad del primer chip de SRAM. Disponía de 11 de pines direccionamiento, pero solo 2 pines unidireccionales, uno para lectura y el otro para escritura, y aunque podía usar ambos a la vez, solo podía transmitir un bit de información por ciclo de reloj en una o ambas direcciones.
La única limitación de este tipo de memoria RAM es que cada fila de la matriz de celdas de memoria ha de accederse en intervalos periódicos de tiempo o se pierde la información, requiriendo circuitería extra para ello. Esto se traduce en que, al contrario de la SRAM, la memoria DRAM no se encuentra siempre disponible.
Evolución de la memoria DRAM
Con el paso del tiempo, la capacidad de almacenamiento de la memoria DRAM y su complejidad ha ido evolucionando a la par que la de la CPU con tal de poder mantener, el ritmo con estas y que la propia memoria RAM del sistema sea el menor cuello de botella para el rendimiento del sistema y por el hecho que la cantidad de datos y la complejidad de los programas ha ido evolucionando con el tiempo.
Chip | Almacenamiento | Pines de Datos | Pines de Direccionamiento | Tipo | Año |
Intel 3101 | 64 bits | 4 | 6 | SRAM | 1969 |
Intel 1103 | 1 Kbit | 1 | 10 | DRAM | 1970 |
Mostek MK4096 | 4 Kbits | 1 | 12 | DRAM | 1973 |
Intel 2114 | 1 Kbit | 4 | 10 | SRAM | 1976 |
Mostek MK4116 | 16 Kbits | 1 | 7 | DRAM | 1977 |
Intel 2147 | 4 Kbits | 4 | 9 | SRAM | 1980 |
TI TMS4164 | 64 Kbits | 1 | 8 | DRAM | 1980 |
NEC µPD416 | 64 Kbits | 1 | 8 | DRAM | 1980 |
Motorola MCM6810 | 128 bytes (1 Kbit) | 8 | 7 | SRAM | 1982 |
Hitachi HM6116 | 2 Kbits | 8 | 11 | SRAM | 1983 |
Micron MT1259 | 256 Kbits | 4 | 9 | DRAM | 1984 |
Fujitsu MB81C4256 | 256 Kbits | 1 | 9 | DRAM | 1985 |
Samsung KM44C256 | 256 Kbits | 4 | 9 | DRAM | 1987 |
NEC µPD424400 | 4 Mbits | 4 | 11 | DRAM | 1990 |
Hitachi HM628512 | 512 Kbits | 8 | 16 | SRAM | 1992 |
Micron MT48LC16M16A2 | 256 Mbits | 16 | 14 | SDRAM | 1999 |
Samsung K4B1G1646G | 1 Gbit | 16 | 15 | DDR3 | 2007 |
Samsung K4A8G165WB | 8 Gbits | 16 | 16 | DDR4 | 2016 |
SK Hynix H5AN8G8NCJR | 16 Gbits | 16 | 16 | DDR5 | 2020 |
Es por ello que os hemos dejado una tabla para que podáis haceros una idea aproximada de la evolución que ha sufrido la memoria DRAM a lo largo de las décadas, desde el Intel 3101 hasta la actual DDR5.
Acceso a la memoria RAM
Una vez hemos explicado el uso e historia de la memoria RAM nos toca responder a otra pregunta. ¿Cómo se comunica la RAM con el procesador? Es aquí donde la cosa se complica un poco. Sin embargo, empezaremos hablando de la organización en forma de matriz de celdas de memoria y su utilidad.
Imaginad por un momento que tenemos dos grupos de 16 elementos, el primero de ellos está organizado en filas, por lo que para ir a buscar el elemento «n» se vendrá que recorrer todos los elementos previos. El segundo grupo lo organizamos en una matriz de 4 x 4, por lo que si tenemos el elemento en la posición C3 sabremos que está en la tercera columna y cuarta fila. Pues el acceso a la memoria RAM funciona de la misma manera.
El motivo de hacer esto es sencillo, pese a añadir más latencia, ya que aumenta la cantidad de ciclos de reloj para acceder a memoria. Sin embargo, tiene una explicación y no es otra que el ahorro en el número de pines de direccionamiento. Por lo que solo hacen falta pines de control adicionales para marcar si estamos accediendo a la fila o la columna.
El acceso a la RAM desde la perspectiva de la CPU
Para entender el proceso de acceso desde un microprocesador a su memoria RAM hemos de entender que es un proceso que se divide en varias etapas y que empieza en los registros de la CPU relacionados con la etapa FETCH (captación) en ellos tenemos tres registros muy importantes para el acceso a memoria. El primero de ellos incluye la dirección de memoria a la que queremos acceder, el segundo el dato a copiar en dicha dirección en el caso de que queramos modificarlo y el tercero, en el caso de si es una lectura, el que copia la información desde la RAM para que la CPU la pueda procesar.
El acceso a la RAM no lo hace la CPU, sino una unidad a la que llamamos controlador de memoria, la cual a día de hoy para reducir la latencia de acceso y simplificar la circuitería se encuentra en el mismo chip que el microprocesador, pero no siempre ha sido así, ya que en los primeros ordenadores esta pieza se encontraba por separado, aunque antes de la integración se encontraba en el chipset de la placa base.
El proceso de acceso a la memoria RAM
Para no perdernos en detalles pequeños, vamos a simplificarlo al máximo.
- El controlador de memoria envía a la RAM una señal de que quiere acceder a una de sus filas, lo que abre un periodo de comunicación. Tras el mismo se envía la parte de la dirección de memoria correspondiente a la fila, lo que hace que esta se active. Además, sirve como proceso para refrescarla si hablamos de un tipo de DRAM.
- El siguiente paso es hacer lo mismo con la columna deseada para localizar la celda que queremos tener.
- Dependiendo de si es lectura o escritura, se realizará un proceso u otro.
Todos los pasos de acceso a la memoria RAM sean del tipo que sean, requieren ser confirmados por una serie de señales hacia el microprocesador con tal de asegurarse no solo que se hace de forma correcta, sino para controlar que el acceso se hace en el momento adecuado para acceder a la información que se requiere en cada momento.
Bancos de memoria y canales de acceso
A día de hoy la RAM no se almacena en una enorme matriz, sino que podemos observar en muchos sistemas no solo varios chips de memoria, sino que dentro de cada chip varios bancos, donde cada uno de ellos es una matriz de celdas de memoria.
Esto se hace así para evitar la contención que se daría por el hecho de que el microprocesador pudiese acceder a una única celda. De esta manera, el controlador de memoria pueda alimentar otra petición de memoria al mismo tiempo.
A día de hoy hay memorias que soportan varios canales de acceso, esto significa que pueden realizar varios accesos a la RAM al mismo tiempo. No obstante, una vez que una fila ha sido tomada, esta se vuelve inaccesible a otros clientes para evitar problemas con el contenido de las celdas de memoria.
Latencia versus ancho de banda
La latencia es el tiempo que tarda un microprocesador en acceder a la RAM. Esta se mide a través de la latencia CAS, que es el tiempo que se tarda en acceder al contenido en la columna. Recordad que el proceso empieza seleccionando la fila y después la columna. Dicha información se da en forma de ciclos de reloj, pero no de la CPU, sino de la propia memoria. Y es aquí donde las cosas se lían un poco.
Por ejemplo, una memoria DDR4-3200 tienen un memclk de 1600 MHz, que es su velocidad real de funcionamiento. Dado que la frecuencia es la inversa del tiempo, esto son 0.625 ns. Si la latencia CAS es de 22, entonces el tiempo total de acceso será de 13.75 ns, lo cual es el resultado de multiplicar el tiempo por ciclo por la latencia CAS.
El ancho de banda, en cambio, se hace calculando la frecuencia (1600 MHz) por la cantidad de pines de datos y por la cantidad de información por ciclo, que en este caso al ser DDR es de 2, por lo que puede transmitir 3.2 Gbps por pin, 0.4 GB/s por pin. Dado que el módulo DDR4 que tiene 64 pines puede transmitir 64 bits por ciclo de reloj, lo que se convierte en 25.6 GB/s de ancho de banda. Claro está que hemos de entender que esto es un máximo teórico que no se da en el que la memoria RAM tendría que estar transmitiendo datos todo el rato y no se darían los continuos accesos a las diferentes celdas de la memoria RAM.
Periféricos, dispositivos DMA y memoria RAM
Si bien hay componentes del sistema que por motivos de rendimiento tienen su propia memoria RAM, siendo el caso más claro el de las tarjetas gráficas, incluso estas necesitan acceder a la memoria del sistema de tanto en cuando. Para hacerlo y poder copiar datos hacía su memoria local o simple para tener acceso a memoria los periféricos utilizan a día de hoy dispositivos DMA aunque se puede dar el caso que tengan acceso a través del controlador de memoria integrado en la CPU, sin embargo, esto se da si se encuentran en el mismo chip.
Pero, ¿qué es un dispositivo DMA? Se trata de un componente que permite el acceso a la memoria RAM del sistema desde un componente o periférico sin la intervención de la CPU para ello, lo que libera a la unidad central de proceso de tener que manejar todas las transferencias de datos y permite usar los ciclos de reloj para otras cosas. Su funcionamiento es el siguiente:
- Cuando un dispositivo periférico necesita transferir datos, le envía una solicitud de acceso a la memoria al controlador DMA.
- El controlador DMA recibe la solicitud y verifica si la CPU está ocupada. En el caso de que esta se encuentre disponible, entonces el controlador toma el acceso a la RAM.
- En el siguiente paso el controlador DMA realiza el acceso a la RAM de la misma manera que un microprocesador, terminado su trabajo le devuelve el control del acceso a la memoria al controlador de memoria principal.
Y con este terminamos nuestro artículo básico sobre la memoria RAM, no será el único, ya que para los diferentes tipos de tecnologia relacionada tendréis los reportajes y artículos correspondientes. Esperamos que os sea útil.