InicioInfoLa verdad de las memorias RAM

La verdad de las memorias RAM

InfoFecha desconocida
La verdad de las memorias RAM

Consideraciones sobre latencias y tazas de refresco


Leyendo muchos artículos y libros al respecto, hemos llegado a armar algo así como un resúmen básico sobre la verdad de las memorias RAM como unidades de almacenamiento de datos para agilizar el rendimiento del sistema. Las latencias y las tazas de refresco juegan un papel relevante en el mundo de la programación y en el mundo del overclocking y nos parece interesante escribir al respecto.

Bueno, empecemos con un repaso básico sobre las memorias:

Una memoria es un dispositivo electrónico en el que se pueden escribir y leer datos. Básicamente se distinguen en ROM, o memorias de sólo lectura (Read Only Memory), y RAM, mal llamadas memorias de acceso aleatorio (Random Access Memory). Esto último viene de que hay cierto tipo de sistemas de almacenamiento que son secuenciales, lo que significa que para leer un dato tenés que primero buscarlo; es lo que sucede con los cassetes de cinta magnética, que tenes que hacerlas avanzar o retroceder hasta llegar al punto de interés. En ese sentido, tanto las ROM como las RAM son memorias de acceso aleatorio (puedes acceder a cualquier posición directamente); la distinción entre unas y otras es actualmente bastante difusa, y podríamos decir que se reduce ya únicamente a la volatilidad, que ahora comentaremos.

Las memorias RAM pierden toda su información una vez desconectadas de su alimentación; es, sin embargo, un precio muy pequeño a pagar a cambio de alta velocidad, bajo costo y elevada densidad de integración (podemos hacer memorias de gran capacidad en muy poco espacio), sin olvidar que podemos escribir en ella cuantas veces querramos, de manera inmediata. Aunque hay muchos subtipos de memoria RAM, nos interesan 2 grandes grupos, cuya presencia hay en nuestras PC: estáticas (SRAM) y dinámicas (DRAM). Las denominadas SDRAM no son Estáticas-Dinámicas (una cosa o la otra, pero no las dos). Las memorias SDRAM son RAMs dinámicas síncronas, lo cual quiere decir que funcionan con un clock que marca el ritmo de trabajo. Las DRAM que se montan en los ordenadores actuales son SDDDR RAM (Synchronous Dinamic Double Data Rate).

La distinción entre estática y dinámica es sencilla. Una memoria estática guarda sus datos mientras esté conectada a la alimentación. Una dinámica, además de esto, sólo retiene la información durante un tiempo muy bajo, en algunos casos del orden de milisegundos. ¿Cómo? ¿Milisegundos? Lo que sucede es que cada bit (Binary Digit o digito en binario como sería el caso del castellano) está guardado en la memoria en forma de carga de un pequeño condensador, que retiene una determinada tensión entre sus extremos. Ese condensador por desgracia no es perfecto (tiene pérdidas), así que con el paso del tiempo ese voltaje va decayendo lentamente hasta que su tensión cae a un nivel tan bajo que ya no se puede distinguir si lo que había ahí era un "1" o un "0" lógico. Por ello tiene que haber un circuito anexo a la memoria propiamente dicha que se encargue cada cierto tiempo de leer la tensión de ese condensador, y cargarlo para elevarla al nivel correcto. Todo esto se hace automáticamente a nivel de circuito.

Acá entran en juego las latencias de refresco.

Hay diversos tipos de tazas de refresco, pues cada chip que está integrado a la memoria tiene distintos pines, y cada uno (o cada grupo mejor dicho) cumple una función de I/O (Input/Output o Entrada/Salida en castellano) diferente, y en torno a éstas se determina una lectura/escritura más eficiente en la memoria.

La RAM se organiza en forma de matriz de filas "rows" y columnas "columns", que a su vez se agrupan en bancos "banks"... es decir es una matriz de 3 dimensiones, de filas y columnas dentro de bancos.

Cuando se solicita un dato dentro de la memoria hay q darle la dirección donde se contiene, se hará especificando el banco. Dentro de él la fila, y a su vez la columna dentro de la fila.

Es decir no se lee solo una posición sino ráfagas enteras, para ello se mantiene fija la fila y el banco se va cambiando de columna para ir avanzando (si se llegase al final de fila, habría que cambiar a la siguiente, si se llegase al final de banco también habría q cambiar al siguiente). Así hasta finalizar la lectura del "burst" de datos q interesa.

El direccionamiento ser realiza mediante varias señales:

-Señal "ACTIVE": establece un banco de memoria como activo, tiene una duración mínima en ciclos.

Hasta que no concluyan los ciclos mínimos de la señal ACTIVE, no puede lanzarse una señal PRECHARGE para cerrar ese banco.

Hay q tener en cuenta que mientras un banco permanece activo está "bloqueado" para esa lectura/escritura, antes de poder volver a utilizarlo en otra lectura/escritura diferente hay que cerrarlo.

-Señal "RAS": Row Access Strobe, establece una fila dentro de un banco activo como seleccionada, esta señal consume varios ciclos para localizar la fila necesaria.

-Señal "CAS": Column Access Strobe, establece una columna dentro de una fila como seleccionada, esta señal consume varios ciclos para localizar la columna necesaria.

-Señal "PRECHARGE": cierra un banco de memoria activo, dejándolo libre para realizar sobre él otra lectura/escritura (lanzando otra señal ACTIVE con dirección a ese banco), consume un número de ciclos para realizar el cierre.

Pues bien... las latencias aparecen del siguiente modo:

Se lanza una señal ACTIVE que activa el banco dentro del cual está la posición de memoria, "bloqueando" ese banco para otras lecturas/escrituras. Durará un mínimo de Ax ciclos.

Se lanza una señal RAS para localizar la fila dentro del banco, esta señal tardará Rx ciclos en completarse.

Una vez encontrada la fila, se lanza una señal CAS, esta señal tardará Cx ciclos en completarse.

Una vez completos los ciclos de las señales el dato está disponible en el bus, pero hay q seguir leyendo para completar el número de posiciones q completan el "burst" de datos que se lee.

Con lo cual se vuelve a activar una señal CAS para avanzar a la siguiente columna dentro de la fila, y se añade una nueva latencia de Cx ciclos para completar la señal.

Habrá N° señales CAS para completar la lectura del "burst" da datos, por tanto la latencia de la señal CAS será n*Cx

Un vez completada la lectura/escritura del "burst" se lanza una señal PRECHARGE para cerrar el banco activo y dejarlo libre para otra lectura/escritura, consumiendo esta señal Px ciclos.

Nota 1: Si no se hubiesen consumido los ciclos de la señal ACTIVE durante la lectura de las posiciones del "burst", habría q esperar hasta q concluyesen.

Nota 2: Mientras esta señal esta activa puede haber señales ACTIVE a otros bancos, con lo cual, solo añade latencia si se quisiese acceder a ese banco en concreto mientras se está cerrando.

La latencia total de la lectura/escritura será del siguiente modo:

Ax>= Rx + n*Cx

T = Rx + n*Cx + Px

Se deduce de lo anterior q el banco debe estar activo un mínimo de tiempo (que podrá ser mayor o igual al tiempo de la lectura del "burst", mayor si el burst no consume los ciclos mínimos de la Señal ACTIVE, igual si los supera).

En la latencia total es "peso" de las distintas señales es diferente…

Se da una señal RAS, por N° señales CAS.

La señal ACTIVE puede solaparse temporalmente con las anteriores llegando a no tener ninguna influencia sobre la latencia total.

La señal PRECHARGE solo añadirá latencia real si se solicita otra señal ACTIVE sobre el mismo banco mientras sucede la señal PRECHARGE (mientras se está cerrando).

Por tanto se deduce que a la hora de obtener el tiempo total, la señal que más "pesa" es la señal CAS, que es la q suelen dar los fabricantes cuando se consulta las características sobre módulos de memoria.

Por ej: Kingstong DDR400 VALUERAM CL 2,5 --> CL = CAS Latency

Una vez que se llega al principio de la lectura (todo lo que decimos es análogo para escritura) se leen los datos en forma de ráfagas "bursts".

Las memorias dinámicas son más lentas que las estáticas, y no sólo por este proceso denominado refrezco, pero a cambio son mucho más baratas e integrables; la memoria principal de un ordenador es DRAM por este motivo.

Las SRAM son, por tanto, más caras, grandes y rápidas. Se reservan para situaciones en las que la velocidad es vital, y ese sobrecoste bien merece la pena; es el caso de las memorias caché, que son las que se encuentran más cerca del procesador (generalmente dentro del propio encapsulado). Un caso particular de memoria estática, aunque por su naturaleza no considerada como tal, es la de los registros del procesador; se trata de, con diferencia, la memoria más rápida y cara de todo el sistema, y un procesador sólo cuenta con unos pocos registros (algunas decenas en el mejor de los casos) de tamaño variable (en el caso de la familia x86, 16 y 32 bits, fundamentalmente, ahora también tenemos de 64, pero no los explotamos casi).

Una memoria está estructurada en Words, y cada Word es un grupo de bits, accesible a través de su dirección. Cada dirección es un número que identifica a una palabra. Un circuito de memoria está conectado entonces a, al menos, dos tipos de líneas, o hilos por donde viajan los bits (voltaje): datos, por donde viaja la información, y direcciones, por donde se identifica la posición que ocupa esa información. Existe un tercer tipo de líneas denominado de control; con estás líneas se indica el tipo de operación que se desea realizar sobre la memoria (leer o escribir, básicamente).

Un ejemplo de memoria podría tener 8 líneas de datos y 16 de direcciones. Si uno quisiera acceder a la palabra en la posición 165, colocaría el número 0000000010100101 (165 en binario) sobre las líneas de direcciones, y tras indicarle la operación con las líneas de control, aparecería en un pequeño lapso de tiempo el byte almacenado en esa dirección (un byte, en este caso, porque hay 8 líneas de datos y, por tanto, 8 bits). Para escribir sería el procesador quien colocaría el dato sobre las líneas de datos, así como la dirección, y al indicar la operación de escritura, la memoria leería ese dato y lo almacenaría en la posición indicada. Una memoria con un bus (o conjunto de líneas) de 16 bits de ancho, y un bus de datos de 8 bits, tiene una capacidad de 2^16 * 8 = 524288 bits, es decir, 65536 bytes (64kb). La anchura del bus de datos influye no sólo en el tamaño total de la memoria para un bus de direcciones dado, sino también la velocidad a la que son leídos/escritos estos datos; con un bus de 64 bits podríamos traer y llevar 8 bytes en cada viaje, y no uno sólo.

Nota @ Data Loss: Bueno, cuando los timings que se setean en la memoria son demasiado agresivos o demasiado largos, sucede que a nivel circuito, el refrezco llega demasiado rápido, o demasiado tarde a los condensadores y por lo tanto ese "1" lógico, o "0" lógico, no se distingue con precisión. En estos casos, es cuando al seguir la estructura del código en ejecución, se producen "crashes" (a modo de cuelgues), pues la aplicación recibe datos inesperados y por lo tanto no puede continuar. Puede pasar también que los condensadores del modulo estén defectuosos y por lo tanto, la memoria falle, aún en timings de stock, esto se soluciona lógicamente, cambiando el módulo.


FUENTE!
Datos archivados del Taringa! original
0puntos
1,114visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
0visitas
0comentarios
Dar puntos:

Posts Relacionados

Anónimo
0
archivado
Anónimo
0
archivado
Anónimo
0
archivado
Anónimo
0
archivado

Dejá tu comentario

0/2000

No hay comentarios nuevos todavía

Autor del Post

F
Flashangel🇦🇷
Usuario
Puntos0
Posts12
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.