# Registro de rango de tipo de memoria

Los registros de rango de tipo de memoria (MTRRs, del inglés memory type range registers) son un conjunto de registros extendidos que proveen a software de sistema con control sobre la manera en que el CPU cachea accesos a rangos de memoria. Constan de registros de modelo específico (MSRs), registros especiales proporcionados por CPUs modernos. Los modos de acceso posibles para regiones de memoria incluyen no cachear, escribir a través de, combinación de escrituras, protección de escritura y retardo de escritura. En modo de retardo de escritura, las escrituras se realizan a caché, que se marca como modificado, de modo que sus contenidos serán escritos a memoria en algún momento posterior.

## Combinación de escrituras

La combinación de escritura permite a las transferencias de escritura ser combinadas en una transferencia más grande antes de pasarlas al bus de memoria, lo cual facilita escrituras más eficientes a recursos del sistema tales como memoria gráfica.Esto a menudo aumenta la velocidad de operaciones de escritura de imagen en varios órdenes de magnitud, a costo de perder las sencillas semánticas de lectura y escritura secuencial de la memoria normal. Existen bits adicionales proporcionados por arquitecturas, como AMD64, admiten el shadowing de contenidos de ROM en la memoria de sistema (ROM sombra), y la configuración de E/S mapeada en memoria.

## MTRRs en procesadores x86

En sistemas x86 tempranos, especialmente cuando caché se encontraba en chips externos al paquete de CPU, esta función estuvo controlada por el chipset y configurada en preferencias de BIOS.
Cuando se movió caché al mismo paquete el que CPU, los CPUs comenzaron a implementar MTRRs de rango fijo que cubren el primer mebibyte de memoria por compatibilidad con lo que los BIOSes proporcionaban en aquel tiempo. Estos suelen controlar la política de caché necesitada para el acceso a VGA y todos los accesos de memoria mientras el sistema se ejecuta en modo real. Por enciam de 1 MiB, los CPUs proporcionar un número de MTRRs de rango variable, los cuales pueden ser libremente delimitados e incluso traslaparse entre sí. Estos MTRRs de rango variable pueden ser utilizados para establecer la política de caché de memoria gráfica y otros rangos de memoria utilizados por dispositivos PCI.
Empezando con la familia Intel P6 (Pentium Pro, Pentium II y posteriores), los MTRRs pueden usarse para controlar el acceso del procesador a rangos de memoria.
Los procesadores Cyrix 6x86, 6x86MX y MII tienen Registros de Rango de Direcciones (ARRs) que proporcionan una funcionalidad similar a los MTRRs.
El AMD K6-2 (stepping 8 y superior) y el K6-III tienen dos MTRRs. La familia AMD Athlon proporciona 8 MTRRs compatibles con Intel.
El Centaur C6 WinChip tiene 8 registros de este tipo, permitiendo combinación de escrituras.
Los procsadores VIA Cyrix III y VIA C3 ofrecen 8 MTRRs compatibles con Intel.
La interfaz de memoria de CPUs AMD K8 soporta "codificaciones extendidas del campo tipo de MTRR de rango fijo" que permite especificar si los accesos a ciertos rangos de direcciones son ejecutados accesando a RAM a través del Direct Connect Architecture o por E/S mapeada en memoria. Esto permite, por ejemplo, RAM sombra implementada copiando contenidos de ROM a RAM.

## Sucesores

CPUs x86 más recientes soportan una técnica más avanzada llamada tablas de atributos de página (PATs) que permite selección de modos por página individual, en vez de haber un número limitado de registros de baja granularidad, para tratar con tamaños de memoria modernos.
Los detalles del funcionamiento de los MTRRs se describen en los manuales de procesador de los distintos vendedores.