En post anteriores hablaba de la CPU, el “cerebro del ordenador”, el componente que ejecuta las instrucciones. Dichas instrucciones trabajan con datos y pueden devolver resultados que también son datos. Y estos datos habrá que almacenarlos en memoria. Pues bien, para entender como se guardan estos datos en memoria, primero tenemos que conocer la estructura de las memorias semiconductoras.

El ordenador, necesita un componente en donde poder almacenar esos datos y recuperarlos cuando los necesite la CPU para ejecutar las instrucciones. Y ese componente, como seguro ya habéis adivinado, es la memoria, que además debe disponer de un sistema para guardar dichos datos y de otro para recuperarlos.

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.

Estructuras de las memorias semiconductoras

Estas memorias son denominadas memorias semiconductoras porque están formadas por material semiconductor. En cualquier caso, lo que nos interesa de las memorias es como están organizadas y no tanto el detalle físico de las mismas. Están organizadas en matrices de elementos básicos de almacenamiento, que ya habíamos dicho que tenían la capacidad para almacenar un bit. Por ejemplo, en la figura de abajo puede verse una memoria de 64 bits, en una estructura de matriz de 8×8 celdas.

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:

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.

NOTA:

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