Un controlador de memoria , también conocido como controlador de chip de memoria ( MCC ) o unidad controladora de memoria ( MCU ), es un circuito digital que administra el flujo de datos que van hacia y desde la memoria principal de una computadora . [1] [2] Cuando un controlador de memoria está integrado en otro chip, como una parte integral de un microprocesador , generalmente se le llama controlador de memoria integrado ( IMC ).
Los controladores de memoria contienen la lógica necesaria para leer y escribir en la memoria de acceso aleatorio dinámico (DRAM) y para proporcionar la actualización crítica de la memoria y otras funciones. La lectura y escritura en la DRAM se realiza seleccionando las direcciones de datos de fila y columna de la DRAM como entradas al circuito multiplexor , donde el demultiplexor de la DRAM utiliza las entradas convertidas para seleccionar la ubicación de memoria correcta y devolver los datos, que luego se pasan de nuevo a través de un multiplexor para consolidar los datos con el fin de reducir el ancho de bus necesario para la operación. Los anchos de bus de los controladores de memoria varían de 8 bits en los sistemas anteriores a 512 bits en sistemas más complicados, donde normalmente se implementan como cuatro controladores de memoria simultáneos de 64 bits que funcionan en paralelo, aunque algunos funcionan con dos controladores de memoria de 64 bits que se utilizan para acceder a un dispositivo de memoria de 128 bits .
Algunos controladores de memoria, como el integrado en los procesadores PowerQUICC II, incluyen hardware de detección y corrección de errores . [3] Una forma común de controlador de memoria es la unidad de gestión de memoria (MMU), que en muchos sistemas operativos implementa direccionamiento virtual .
Las computadoras antiguas basadas en Intel y PowerPC tienen chips controladores de memoria que están separados del procesador principal. A menudo, estos están integrados en el puente norte de la computadora, también llamado concentrador de controlador de memoria.
La mayoría de los microprocesadores de escritorio o de estaciones de trabajo modernos utilizan un controlador de memoria integrado ( IMC ), incluidos los microprocesadores de Intel , AMD y aquellos construidos alrededor de la arquitectura ARM . Antes de K8 (circa 2003), los microprocesadores AMD tenían un controlador de memoria implementado en el puente norte de su placa base . En K8 y posteriores, AMD empleó un controlador de memoria integrado. [4] Del mismo modo, hasta Nehalem (circa 2008), los microprocesadores Intel usaban controladores de memoria implementados en el puente norte de la placa base. Nehalem y posteriores cambiaron a un controlador de memoria integrado. [5] Otros ejemplos de arquitecturas de microprocesadores que usan controladores de memoria integrados incluyen Fermi de NVIDIA , POWER5 de IBM y UltraSPARC T1 de Sun Microsystems .
Si bien un controlador de memoria integrado tiene el potencial de aumentar el rendimiento del sistema, por ejemplo, al reducir la latencia de la memoria , bloquea el microprocesador a un tipo (o tipos) específico de memoria, lo que obliga a un rediseño para admitir tecnologías de memoria más nuevas. Cuando se presentó la SDRAM DDR2 , AMD lanzó nuevas CPU Athlon 64. Estos nuevos modelos, con un controlador DDR2, utilizan un zócalo físico diferente (conocido como Socket AM2 ), de modo que solo encajarán en placas base diseñadas para el nuevo tipo de RAM. Cuando el controlador de memoria no está en la matriz, se puede instalar la misma CPU en una nueva placa base, con un puente norte actualizado para usar memoria más nueva.
Algunos microprocesadores de la década de 1990, como el DEC Alpha 21066 y el HP PA-7300LC , tenían controladores de memoria integrados; sin embargo, en lugar de buscar mejoras en el rendimiento, esto se implementó para reducir el costo de los sistemas al eliminar la necesidad de un controlador de memoria externo. [ cita requerida ]
Algunas CPU están diseñadas para tener sus controladores de memoria como componentes externos dedicados que no son parte del chipset. Un ejemplo es IBM POWER8 , que utiliza chips Centaur externos que se montan en módulos DIMM y actúan como buffers de memoria, chips de caché L4 y como los controladores de memoria reales. La primera versión del chip Centaur usaba memoria DDR3, pero luego se lanzó una versión actualizada que puede usar DDR4. [6]
Algunos controladores de memoria experimentales contienen un segundo nivel de traducción de direcciones, además del primer nivel de traducción de direcciones realizado por la unidad de gestión de memoria de la CPU para mejorar el rendimiento del caché y del bus. [7]
Los controladores de memoria integrados en ciertos procesadores Intel Core ofrecen codificación de memoria como una función que convierte los datos de usuario escritos en la memoria principal en patrones pseudoaleatorios . [8] [9] La codificación de memoria tiene el potencial de evitar el análisis forense y de ingeniería inversa basado en la remanencia de datos de DRAM al hacer que varios tipos de ataques de arranque en frío sean ineficaces. En la práctica actual, esto no se ha logrado; la codificación de memoria solo se ha diseñado para abordar problemas eléctricos relacionados con DRAM. Los estándares de codificación de memoria de finales de la década de 2010 abordan problemas de seguridad y no son criptográficamente seguros ni están abiertos a la revisión o análisis público. [10]
ASUS e Intel tienen sus propios estándares de codificación de memoria. Las placas base ASUS han permitido al usuario elegir qué estándar de codificación de memoria utilizar (ASUS o Intel) o si desea desactivar la función por completo. [ cita requerida ]
Los controladores de memoria de doble velocidad de datos (DDR) se utilizan para controlar la memoria DDR SDRAM , donde los datos se transfieren tanto en los flancos ascendentes como descendentes del reloj de memoria del sistema. Los controladores de memoria DDR son significativamente más complicados en comparación con los controladores de velocidad de datos única, [ cita requerida ] pero permiten transferir el doble de datos sin aumentar la velocidad de reloj de la memoria o el ancho del bus.
Los controladores de memoria multicanal son controladores de memoria en los que los dispositivos DRAM están separados en varios buses para permitir que los controladores de memoria accedan a ellos en paralelo. Esto aumenta la cantidad teórica de ancho de banda del bus por un factor de la cantidad de canales. Si bien un canal para cada DRAM sería la solución ideal, agregar más canales aumenta la complejidad y el costo.
Los sistemas de memoria con buffer completo colocan un dispositivo de buffer de memoria en cada módulo de memoria (llamado FB-DIMM cuando se utiliza RAM con buffer completo), que a diferencia de los dispositivos de controlador de memoria tradicionales, utiliza un enlace de datos en serie con el controlador de memoria en lugar del enlace paralelo utilizado en los diseños de RAM anteriores. Esto reduce la cantidad de cables necesarios para colocar los dispositivos de memoria en una placa base (lo que permite utilizar una menor cantidad de capas, lo que significa que se pueden colocar más dispositivos de memoria en una sola placa), a expensas de aumentar la latencia (el tiempo necesario para acceder a una ubicación de memoria). Este aumento se debe al tiempo necesario para convertir la información paralela leída desde la celda DRAM al formato en serie utilizado por el controlador FB-DIMM, y de nuevo a un formato paralelo en el controlador de memoria de la placa base.
En teoría, el dispositivo de búfer de memoria del FB-DIMM podría construirse para acceder a cualquier celda DRAM, lo que permitiría un diseño de controlador de memoria independiente de la celda de memoria, pero esto no se ha demostrado ya que la tecnología está en sus inicios.
Muchos dispositivos de memoria flash , como las unidades flash USB y las unidades de estado sólido , incluyen un controlador de memoria flash . El acceso a la memoria flash es inherentemente más lento que el de la RAM y, a menudo, se vuelve inutilizable después de unos pocos millones de ciclos de escritura, lo que generalmente la hace inadecuada para aplicaciones de RAM.