La memoria del ordenador

Las instrucciones que ejecuta la CPU necesitan datos y pueden devolver resultados que también son datos. La memoria del ordenador son los componentes donde poder almacenar esos datos y recuperarlos cuando los necesite la CPU para ejecutar las instrucciones.

Cuando hablamos de la memoria del ordenador nos referimos a una serie de componentes, circuitos integrados de semiconductores. El más conocido de todos, es la RAM del sistema, un tipo de memoria muy rápida pero volátil. Es decir, que pierden los datos almacenados cuando se interrumpe la alimentación eléctrica. Sin embargo, tenemos otro tipo de memorias en el ordenador como la Cache o la BIOS que conviene conocer. A todas ellas dedicaré otros posts, en este me voy a centrar en explicar la estructura y funcionamiento de este tipo de memorias.

Estructuras de las memorias

La memoria guarda los datos en formato binario, es decir, unos y ceros. La unidad básica de almacenamiento es el bit, con capacidad para guardar un ‘1’ lógico o un ‘0’ lógico. Normalmente, trabajaremos con el byte, que es la agrupación de 8 bits. Por ejemplo, en la figura de abajo puede verse una memoria de 64 bits, en una estructura de matriz de 8×8 celdas.

Matriz de memoria
Matriz de memoria

Sin embargo, trabajar con la memoria bit a bit, resulta un poco ineficiente, ya que la información de sólo un bit es bastante reducida, resulta mucho más práctico manejar bloques de estos. Así pues, en las memorias vamos a trabajar con agrupaciones de celdas, conocidas como unidades de datos. Esto significa que cuando guardemos un dato o lo leamos, vamos a escribir o recuperar la unidad de datos y no un sólo bit.

Lógicamente, para acceder a una unidad de datos, tendremos que indicar donde se encuentra dicha unidad de datos en la estructura de la memoria. Vuelvo ahora sobre lo poco eficiente que sería acceder bit a bit, tendríamos que manejar una dirección para cada celda básica de memoria, una locura, mucho mejor manejar una dirección para cada unidad de datos.

Al final, la organización de la memoria en los grupos de datos, es lo que determina las conexiones de la misma. Tendrá tantas conexiones de datos como el tamaño en bits del grupo de datos, y tantas conexiones de direcciones como sean necesarias para direccionar todos los grupos de datos. Esto podemos verlo en la figura siguiente:

Matriz de memoria y sus conexiones
Matriz de memoria y sus conexiones

En esta matriz tenemos 8 conexiones de datos, ya que la unidad de datos la hemos hecho igual a un byte = 8 bits. De tal forma que cuando se lea un dato, se obtendrán los ocho bits que conforman la unidad de datos, necesitaremos 8 conexiones para poder presentarlos. De igual forma, cuando vallamos a guardar un dato en la memoria, escribiremos en una unidad de datos completa, necesitaremos también las 8 conexiones.

Por otro lado, tenemos 8 unidades de datos, luego necesitaremos 8 direcciones para poder localizarlas en la matriz. Este número de direcciones, en binario, lo podemos manejar con tres bits, es decir, necesitaremos tres conexiones. Una memoria con n conexiones para direcciones, puede direccionar 2n unidades de datos. Luego en nuestro ejemplo, con 3 líneas expresamos 23=8 direcciones.

Operaciones básicas

Básicamente, tenemos dos operaciones posibles, o escribimos datos o los leemos. Alguno puede pensar que me dejo la operación de borrar datos, pero no es así, esta estaría incluida en la escritura, simplemente borraríamos los datos o referencias a estos, escribiendo encima.

Cuando hablábamos de la estructura de las memorias, decíamos que estas tenían tantos conectores de datos como la unidad de datos con la que trabajan. Es decir, si la unidad de datos es de 64 bits, nuestra memoria tendrá 64 conectores de datos que se conectarán al bus de datos. Por otro lado, veíamos que, si la memoria tiene “n” conectores de direcciones, al expresarse en binario, puede direccionar 2n direcciones. Por ejemplo, si tenemos 32 conectores de direcciones, podremos direccionar 232 = 4.294.967.296 unidades de datos.

En el ejemplo anterior, nuestra memoria tendría una capacidad de 64*232 = 274.877.906.944 bits = 34.359.738.368 bytes = 34,3 Gbytes

Además, será necesario indicar a la memoria que operación queremos realizar: escribir o leer. Para ello, la memoria dispone de un conector dedicado, en el que colocaremos un “0” o un “1” lógico para indicar a la memoria la operación que queremos realizar. Como imagino estaréis pensando, esto no vale para todas las memorias, hay algunas memorias que sólo admiten la operación de lectura y ya vienen escritas de fábrica, pero estas las veremos más adelante.

La dinámica de ambas operaciones básicas es muy sencilla.

 Proceso de lectura:

  1. Se coloca en el bus de direcciones la dirección de la unidad de datos a la que se quiere acceder.
  2. Se activa la señal de lectura.
  3. Se produce la lectura: la memoria entrega los datos a través de sus conectores en el bus de datos.

Proceso de escritura:

  1. Se coloca en el bus de direcciones la dirección de la unidad de datos a la que quiere acceder.
  2. Se colocan en el bus de datos, los datos que quieren almacenarse en la posición de memoria indicada.
  3. Se activa la señal de escritura.
  4. Se produce la escritura en la posición de memoria indicada.

No obstante, hay un pequeño detalle a tener en cuenta, y este es que la CPU es normalmente más rápida que la memoria. Entonces, ¿cómo se sincroniza todo este proceso?, ¿Cómo hacemos que CPU y memoria puedan trabajar juntas teniendo distintas velocidades? Pues muy sencillo, la más rápida, la CPU, queda a la espera hasta haber dado tiempo suficiente a la memoria para proporcionar los datos. Sólo recordar que la CPU era ayudada por el chipset Northbridge en la sincronización de todas estas comunicaciones.

Tipos de memorias

Después de describir la estructura de las memorias de semiconductores, vamos a ver los principales tipos de memorias que hay.

  • Memorias RAM (Random Access Memory): Son memorias volátiles de acceso aleatorio. Volátiles, porque pierden los datos almacenados cuando se interrumpe la alimentación eléctrica, y de acceso aleatorio porque podemos seleccionar cualquier dirección de acceso, en cualquier orden.

En otras palabras, cuando apagamos el ordenador, perdemos todos los datos guardados en esta memoria. Y podemos acceder a cualquier posición sin seguir un orden, al contrario que en un acceso secuencial que vamos accediendo a las direcciones en orden, una después de otra.

RAM
Memoria RAM

Memorias ROM (Read Only Memory): Igual que las memorias RAM, son de acceso aleatorio, pero en este caso no son volátiles, mantienen los datos grabados de forma permanente y sin necesidad de alimentación eléctrica. Sin embargo, la principal característica de estas memorias es que son de sólo lectura, no podemos grabar nuevos datos en las mismas.

ROM
Memoria ROM

Memorias FLASH: Son memorias no volátiles que admiten la operación de escritura. Es decir, tienen lo mejor de la RAM y de la ROM.

FLASH
Memoria FLASH

Después de leer estas descripciones, imagino que os estaréis preguntando porque no usamos memorias FLASH para todo, y ya está.

Pues bien, las memorias ROM se siguen usando para los casos en los que se quiere que no se puedan borrar los datos, son situaciones con datos sensibles que normalmente graba el fabricante y que no se quiere que el usuario pueda modificarlos, normalmente están asociados a rutinas de inicio de dispositivos, y si se alteraran estos datos tendríamos un problema serio con el inicio del aparato. Con todo, se están sustituyendo algunas de estas memorias ROM por memorias FLASH, y sencillamente se corta el acceso a las mismas por parte del usuario.

En lo relativo a las memorias RAM, estas no son remplazadas por las memorias FLASH porque las primeras son mucho más rápidas, y el tiempo de acceso a la memoria tiene gran influencia en la eficiencia de nuestro ordenador. Si recordamos de post anteriores, cuando hablábamos de la comunicación de la CPU con la RAM, debido a que la velocidad de la CPU era menor que la de la RAM, tenía que esperar unos ciclos de espera a que la RAM proporcionara los datos. Imaginaros que aún hacemos la memoria más lenta y la diferencia con la velocidad de la CPU mayor, lógicamente se reduciría la eficiencia del equipo. No obstante, en algunos casos las memorias FLASH empiezan a sustituir a las RAM.

A INVESTIGAR: Para aquellos que quieran profundizar un poco más, pueden investigar porque las memorias FLASH son más lentas que las RAM. Una pista es que usan condensadores para almacenar los datos.

Tipos de memorias RAM

Podemos distinguir dos tipos de memorias RAM:

  • SRAM (RAM estática): Este tipo de memorias RAM mantienen la información guardada de forma indefinida, siempre que se mantenga la alimentación eléctrica. Las memorias caché, de las que hablare en otro post, son un ejemplo de este tipo de memorias RAM.
  • DRAM (RAM dinámica): Estas memorias no mantienen los datos de forma indefinida, aunque mantengamos la alimentación eléctrica. Por el contrario, necesitan ser recargados cada cierto tiempo en un proceso conocido como refresco. La RAM del sistema, la que tenemos en las ranuras de la RAM de la placa base, es de este tipo de memorias RAM.

Las DRAM, aunque más lentas que las SRAM, pueden almacenar muchos más datos para un tamaño y coste similar, su celda de almacenamiento es más sencilla.

Tipos de memorias ROM

Había comentado antes que las memorias ROM no admitían la operación de escritura. Sin embargo, hay algunos tipos de memorias ROM que admiten el borrado y la reescritura de todos los datos. Esto es distinto de la operación de escritura sobre una dirección concreta, como podemos hacer con la RAM.

Atendiendo a los métodos de grabado de datos, podemos identificar tres tipos de memorias ROM:

  • ROM de mascara: Grabamos los datos durante el proceso de fabricación del chip de memoria, para ello se unen o rompen varias conexiones, quedando grabado un “1” o un “0” lógico respectivamente. La información almacenada no puede modificarse luego de ninguna manera.
ROM de máscara
ROM de máscara

PROM (Programmable ROM): Es una memoria ROM programable. ¿Qué significa esto?, pues que en realidad es como una memoria ROM de mascara, sólo que los datos no se cargan en el proceso de fabricación, sino que son cargados posteriormente, lo que permite adaptar un mismo chip fabricado para satisfacer diferentes demandas de usuarios. En cierto modo, se puede decir que se programa la ROM.

Memoria PROM
Memoria PROM

EPROM (Erasable PROM): Estas memorias son memorias PROM, es decir, programables, pero además se pueden borrar y volver a programar. Podemos distinguir dos subtipos: UV EPROM que se borran usando una radiación ultravioleta de alta intensidad y EEPROM que se borran usando impulsos eléctricos.

Memorias EPROM
Memorias EPROM

Tipos de memorias FLASH

Hay varios tipos de memorias FLASH. Citaré algunas de las más importantes: Memoria Flash USB, Compact Flash, SmartMedia y Tarjetas SD.

Memorias FLASH
Memorias FLASH

A medio plazo, las memorias FLASH tienden a remplazar a las RAM. Aunque son más lentas que estas últimas, son más económicas y consumen menos energía. Además, tienen una gran ventaja al poder conectarse y desconectarse al ordenador por un puerto USB, esto hace que sean ideales para la portabilidad y compartición de datos.

NOTA:

Este post es parte de la colección “Arquitectura de Ordenadores” que reproduce los apuntes de la clase que imparto sobre el tema en ESIC. Puedes ver el índice de esta colección aquí.