Sistema de Memoria
Todo computador necesita un sistema de memoria para
almacenar los programas que se ejecutan y los datos
necesarios para ejecutar estos programas. Desde el
punto de vista del programador, sería deseable
disponer de cantidades ilimitadas de memoria y de
velocidad ilimitada, si fuera posible, para almacenar el
programa que se quiere ejecutar y los datos
necesarios; eso permitiría al programador hacer la
tarea de escribir programas sin tener que enfrentarse
a ningún tipo de limitación. Lógicamente, este deseo
no es factible y las cantidades de memoria de que
dispone un computador tienen una limitación en
capacidad y velocidad.
La cantidad de memoria que puede tener un
computador responde básicamente a un factor de
coste: cuanta más memoria instalada, más elevado es
el coste. De manera parecida, la velocidad de la
memoria también depende del coste. Las memorias
más rápidas tienen un coste más elevado, pero no se
puede conseguir toda la velocidad necesaria
simplemente incrementando el coste; hay además un
factor tecnológico que limita la velocidad de la
memoria: no podemos adquirir memoria más rápida
que la que está disponible en el mercado en un
momento dado.
Existen diferentes tipos de memorias, con capacidades
y tiempos de acceso diferentes. En general, cuanta
más capacidad de almacenamiento tiene una memoria,
mayor es el tiempo de acceso. Es decir, las memorias
con gran capacidad son memorias lentas, mientras que
las memorias rápidas (tiempo de acceso pequeño)
suelen tener poca capacidad de almacenamiento. Las
memorias rápidas son más caras que las memorias
lentas. Por ello, los diseñadores de computadores
deben llegar a un compromiso a la hora de decidir
cuánta memoria ponen en sus diseños y de qué
velocidad o tiempo de acceso.
En los últimos años, la evolución de la tecnología ha
permitido reducir mucho el espacio necesario para
almacenar un bit de información. Eso ha originado que
el tamaño de las memorias aumente mucho con
relación al espacio físico que ocupan y que se reduzca
el precio que se ha de pagar por un bit de información.
Así, los discos duros han pasado de los 20 Mbytes de
capacidad a mediados de década de los ochenta a los
2.000 Gbytes a finales del 2010 (100.000 veces más),
aunque ocupan el mismo espacio físico (incluso son un
poco más pequeños) y cuestan casi lo mismo. Esto ha
representado una reducción importante en el precio
por bit. Este ha sido un factor muy importante para
que los computadores actuales incorporen mucha más
memoria que los computadores de hace treinta años.
Por lo tanto, a la hora de diseñar un sistema de
memoria, hay que tener presentes las características
de capacidad, velocidad (y tiempo de acceso) y coste
por bit.
Características de las memorias
Las características más importantes de los diferentes
tipos de memoria son la localización, la capacidad, el
método de acceso, la organización de los datos en una
memoria, el tiempo de acceso y velocidad, y el coste.
Las estudiaremos en este apartado.
Localización de la memoria
Podemos clasificar los tipos de memoria según su
localización dentro del computador. Básicamente, se
pueden distinguir: memoria dentro del chip del
procesador, memoria interna (memoria en la placa
base del computador) y memoria externa.
Dentro del chip del procesador habitualmente están los
registros y uno o varios niveles de memoria caché.
La memoria interna corresponde a la memoria principal
(memoria RAM del computador) y adicionalmente un
nivel de memoria caché o varios.
La memoria externa corresponde a los dispositivos de
almacenamiento secundario, como discos duros,
unidades ópticas (CD-ROM, DVD, o Blu-ray), unidades
de cinta, etc.
Capacidad de la memoria
La capacidad (o tamaño de la memoria) hace referencia
a la cantidad de información que se puede almacenar.
La unidad utilizada para especificar la capacidad de
almacenamiento de información es el byte (1 byte = 8
bits), y a la hora de indicar la capacidad, se utilizan
diferentes prefijos que representan múltiplos del byte.
Métodos de acceso
Cada tipo de memoria utiliza un método a la hora de
acceder a las posiciones de memoria. Hay métodos de
acceso diferentes característicos de cada tipo de
memoria:
Secuencial: Se accede desde la última posición a la que
se ha accedido, leyendo en orden todas las posiciones
de memoria hasta llegar a la posición deseada. El
tiempo de acceso depende de la posición a la que se
quiere acceder y de la posición a la que se ha accedido
anteriormente.
El acceso secuencial se utiliza básicamente en
dispositivos de cinta magnética.
Directo: La memoria se organiza en bloques y cada
bloque de memoria tiene una dirección única, se
accede directamente al principio de un bloque y dentro
de este se hace un acceso secuencial hasta llegar a la
posición de memoria deseada. El tiempo de acceso
depende de la posición a la que se quiere acceder y de
la última posición a la que se ha accedido.
Aleatorio: La memoria se organiza como un vector, en
el que cada elemento individual de memoria tiene una
dirección única. Se accede a una posición determinada
proporcionando la dirección. El tiempo de acceso es
independiente de la posición a la que se ha accedido y
es independiente de la última posición a la que se ha
accedido.
Las operaciones básicas utilizadas cuando trabajamos
con la memoria son:
Operación de lectura: en esta operación hay que
proporcionar a la memoria la dirección donde se
encuentra la información deseada. La acción que hace
la memoria consiste en suministrar la información
contenida en la dirección indicada.
Usos del acceso directo
El acceso directo es un método de acceso que se utiliza
en discos magnéticos.
Operación de escritura: en esta operación hay que
suministrar a la memoria la información que se debe
almacenar y la dirección de memoria donde se la
quiere almacenar. La acción que se lleva a cabo
consiste en registrar la información en la dirección
especificada.
Usos del acceso aleatorio
El acceso aleatorio se suele utilizar en memorias RAM y
ROM.
Asociativo: Se trata de un tipo de memoria de acceso
aleatorio donde el acceso se hace basándose en el
contenido y no en la dirección. Se especifica el valor
que se quiere localizar y se compara este valor con una
parte del contenido de cada posición de memoria; la
comparación se lleva a cabo simultáneamente con
todas las posiciones de la memoria.
Usos del acceso asociativo
Este método de acceso se suele utilizar en las
memorias caché.
Organización de los datos de una memoria
Nos referiremos a la manera de organizar los datos en
memorias que se encuentren en el chip del procesador
y en la memoria interna. La organización de la memoria
externa se lleva a cabo de manera diferente.
La memoria en una computadora está organizada en
forma jerárquica, la memoria cache mantiene los
bloques usados con más frecuencia en una memoria
pequeña y rápida que se encuentra en la CPU, la
memoria virtual en páginas aumenta el tamaño de la
memoria principal a través de almacenar en disco, las
memorias cache y la virtual se usan en una
computadora, la memoria cache mejora el tiempo de
acceso a la memoria principal, y la memoria virtual en
páginas extiende el tamaño de la memoria principal. El
dato más simple en memoria RAM es el bit, 0 o 1,
después se toma cierta cantidad de bits para guardar
datos en RAM, en años pasados se han tomado 4, 8,
16, y 32 bits para formar unidades de almacenamiento
denominadas: palabras de computadora.
Así cada palabra en memoria tiene para su localización
una dirección de memoria RAM, esa dirección es un
número hexadecimal, esos números hexadecimales los
conoce y controla el administrador de memoria. Las
direcciones de memoria se pueden manejar
explícitamente por el programador, utilizando
apuntadores, (modo dinámico) o bien, dejar que el
compilador del lenguaje empleado asigne memoria a
las variables que se utilizan en un programa
En una computadora el hardware denominado memoria
sirve para grabar, guardar o almacenar datos e
instrucciones para realizar cierto proceso con ellos,
dicha memoria se encuentra divida en celdas, la
sección direccionable más pequeña, posee atributos:
su contenido y su dirección.
Tiempo de acceso y velocidad
En memorias de acceso aleatorio, memoria RAM,
el tiempo de acceso (o latencia) es el tiempo que
transcurre desde que una dirección de memoria es
visible para los circuitos de la memoria hasta que el
dato está almacenado (escritura) o está disponible
para ser utilizado (lectura). En memorias de acceso no
aleatorio (discos) es el tiempo necesario para que el
mecanismo de lectura o escritura se sitúe en la
posición necesaria para empezar la lectura o escritura.
En memorias de acceso aleatorio, el tiempo de un ciclo
de memoria se considera el tiempo de acceso más el
tiempo necesario antes de que se pueda empezar un
segundo acceso a la memoria.
Finalmente, la velocidad de transferencia es la
velocidad a la que se puede leer o escribir un dato de
memoria. En las memorias de acceso aleatorio será el
inverso del tiempo de ciclo.
Coste
Consideramos el coste por unidad de almacenamiento
(coste por bit). Podemos observar que existe una
relación directamente proporcional entre la velocidad y
el coste/bit: a medida que aumenta la velocidad
aumenta también el coste/bit. Eso implica que, con un
presupuesto fijado, podremos adquirir memorias muy
rápidas pero relativamente pequeñas, o memorias más
lentas, pero de mucha más capacidad.
Características físicas
La memoria se puede clasificar según características
físicas diferentes; básicamente podemos distinguir dos
clasificaciones. La primera distingue entre:
Memoria volátil: memoria que necesita una corriente
eléctrica para mantener su estado; estas memorias
incluyen registros, memoria caché y memoria
principal.
Memoria no volátil: mantiene el estado sin necesidad
de corriente eléctrica, incluye memorias de solo
lectura, memorias programables, memoria flash,
dispositivos de almacenamiento magnético y óptico.
La segunda clasificación distingue entre:
Memoria de semiconductores: es una memoria que
utiliza elementos semiconductores, transistores, en
su construcción; incluye: registros, memoria caché,
memoria principal, memorias de solo lectura,
memoria flash.
Memoria magnética: utiliza superficies imantadas
para guardar la información; dentro de esta categoría
se incluyen básicamente discos y cintas magnéticas.
Memoria óptica: utiliza elementos de almacenamiento
que pueden ser leídos y escritos mediante luz láser;
se incluyen dispositivos de CD, DVD, Blu-ray.
Jerarquía de memorias
El objetivo en el diseño del sistema de memoria de un
computador es que tenga una gran capacidad y un
tiempo de acceso reducido con el precio más bajo
posible. Como no hay ninguna tecnología que cumpla
simultáneamente estos requisitos, la memoria del
computador se estructura en varios niveles con el
objetivo de conseguir unas prestaciones mejores, y
forma lo que denominamos jerarquía de memorias.
En una jerarquía de memorias se utilizan varios tipos
de memoria con distintas características de capacidad,
velocidad y coste, que dividiremos en niveles
diferentes: memoria del procesador, memoria interna y
memoria externa.
Cada nivel de la jerarquía se caracteriza también por la
distancia a la que se encuentra del procesador. Los
niveles más próximos al procesador son los primeros
que se utilizan; eso es así porque también son los
niveles con una velocidad más elevada.
A continuación se muestra cuál es la variación de la
capacidad, velocidad y coste por bit para los niveles
típicos de una jerarquía:
El objetivo final de la jerarquía de memorias es
conseguir que, cuando el procesador acceda a un dato,
este se encuentre en el nivel más rápido de la
jerarquía. Obtenemos así una memoria a un coste
moderado, con una velocidad próxima a la del nivel
más rápido y la capacidad del nivel más alto.
Cada nivel de la jerarquía de la memoria se relaciona
solo con los niveles superior e inferior, salvo casos
excepcionales. El procesador tiene acceso solamente a
los registros y obtiene los datos de memoria mediante
la memoria caché.
Por ello, cuando el procesador necesita un dato y este
no está disponible en la memoria caché, se tendrá que
llevar a ella desde el nivel en el que esté disponible.
Por otra parte, si el procesador modifica un dato en un
nivel de la jerarquía de memorias, hay que garantizar
que la modificación se efectúe en el resto de los
niveles en los que el dato se encuentre almacenado. Si
esto no se hiciera así, la siguiente vez que se accediera
a este dato, se podría tomar un valor incorrecto. Este
problema se denomina coherencia.
Como los niveles de memoria más próximos al
procesador no son muy grandes, se podría pensar que
se pierde mucho tiempo trasladando los datos desde
un nivel hasta otro, ya que este movimiento tiene que
ser constante. En realidad, eso no es cierto: los datos
se reutilizan con mucha frecuencia, por lo que resulta
útil que estén en el nivel más próximo al procesador.
Más adelante estudiaremos por qué se produce esta
reutilización y, por lo tanto, por qué es efectiva la
jerarquía de memorias.
A continuación se ofrece una descripción de las
características principales de los diferentes niveles de
una jerarquía de memoria.