Un registro de control es un registro de procesador que cambia o controla el comportamiento general de una CPU u otro dispositivo digital. Las tareas comunes que realizan los registros de control incluyen el control de interrupciones , el cambio del modo de direccionamiento , el control de paginación y el control del coprocesador .
Las primeras CPU carecían de registros de control dedicados y dependían de un conjunto limitado de señales y banderas internas. [1] Cuando IBM desarrolló una versión de paginación [nota 1] del System/360 , agregaron 16 registros de control [2] [3] al diseño de lo que se convirtió en el 360/67 . IBM no proporcionó registros de control en otros modelos S/360, pero los convirtió en una parte estándar [4] del System/370 , aunque con diferentes asignaciones de registros y bits. A medida que IBM agregó nuevas características a la arquitectura, por ejemplo, DAS , S/370-XA , S/370-ESA , ESA/390 , agregaron campos adicionales a los registros de control. Con z/Architecture , IBM duplicó el tamaño del registro de control a 64 bits.
En el 360/67 , CR0 y CR2 se utilizan para la traducción de direcciones, CR 4-6 contienen indicadores diversos que incluyen máscaras de interrupción y modo de control extendido, [3] y CR 8-14 [5] contienen las configuraciones del interruptor en la unidad de configuración 2167.
El registro de control 0 contiene la dirección de la tabla de segmentos para la traducción de direcciones dinámicas.
El registro de control 2 es el registro de dirección de excepción de reubicación.
CR4 es el registro de máscara extendida para los canales 0 a 31. Cada bit es la máscara de canal 1/0 para el canal correspondiente.
CR5 está reservado para el registro de máscara extendida de los canales 32 a 63. Cada bit es la máscara de canal 1/0 para el canal correspondiente.
CR6 contiene dos indicadores de modo más extensiones a los bits de máscara PSW.
El registro de control 8 contiene las asignaciones de las unidades de almacenamiento del procesador 1 a 4 a las unidades centrales de procesamiento (CPU) y a los controladores de canal (CC).
El registro de control 9 contiene las asignaciones de las unidades de almacenamiento del procesador 5 a 8 a las unidades centrales de procesamiento (CPU) y a los controladores de canal (CC).
El registro de control 10 contiene los códigos de asignación de dirección de almacenamiento del procesador.
El registro de control 11 contiene las asignaciones del controlador de canal (CC).
CR12 contiene particiones de unidad de control de E/S.
CR13 contiene particiones de unidad de control de E/S.
CR14 contiene indicadores.
Los registros de control de ESA/390 [6] en el IBM S/390 son una mejora evolutiva de los registros de control de los procesadores ESA/370 [7] , S/370-XA [8] y S/370 [9] anteriores . Para obtener detalles sobre qué campos dependen de características específicas, consulte los Principios de funcionamiento. [10]
Los registros de control de z/Architecture [11] son una mejora evolutiva de los registros de control del ESA/390 anterior en los procesadores IBM S/390 . Para obtener detalles sobre qué campos dependen de características específicas, consulte los Principios de funcionamiento. [12] Debido a que z/Architecture amplía los registros de control de 32 bits a 64, la numeración de bits difiere de la de ESA/390.
El registro CR0 tiene una longitud de 32 bits en los procesadores 386 y superiores. En los procesadores x64 en modo largo , este registro (y los demás registros de control) tiene una longitud de 64 bits. CR0 tiene varios indicadores de control que modifican el funcionamiento básico del procesador. El registro CR0 es la versión de 32 bits del antiguo registro de palabra de estado de la máquina (MSW). El registro MSW se amplió al registro de control con la aparición del procesador i386.
Reservado, la CPU lanzará una excepción #UD al intentar acceder a él.
Contiene un valor denominado Dirección lineal de fallo de página (PFLA). Cuando se produce un fallo de página, la dirección a la que el programa intentó acceder se almacena en el registro CR2.
Se utiliza cuando se habilita el direccionamiento virtual , es decir, cuando el bit PG está establecido en CR0. CR3 permite que el procesador traduzca direcciones lineales en direcciones físicas al ubicar el directorio de páginas y las tablas de páginas para la tarea actual. Normalmente, los 20 bits superiores de CR3 se convierten en el registro base del directorio de páginas (PDBR), que almacena la dirección física del primer directorio de páginas. Si el bit PCIDE en CR4 está establecido, los 12 bits inferiores se utilizan para el identificador de contexto de proceso (PCID). [13]
Se utiliza en modo protegido para controlar operaciones como compatibilidad con virtual-8086, habilitación de puntos de interrupción de E/S, extensión del tamaño de página y excepciones de verificación de máquina .
Reservado, mismo caso que CR1.
El registro de habilitación de funciones extendidas (EFER) es un registro específico del modelo que se agregó en el procesador AMD K6 para permitir la habilitación de la instrucción SYSCALL /SYSRET y, posteriormente, para ingresar y salir del modo largo . Este registro se vuelve arquitectónico en AMD64 y ha sido adoptado por Intel como IA32_EFER. Su número MSR es 0xC0000080.
CR8 es un nuevo registro accesible en modo de 64 bits mediante el prefijo REX. CR8 se utiliza para priorizar interrupciones externas y se lo conoce como registro de prioridad de tareas (TPR). [14]
La arquitectura AMD64 permite que el software defina hasta 15 clases de prioridad de interrupción externa. Las clases de prioridad se numeran del 1 al 15, siendo la clase de prioridad 1 la más baja y la clase de prioridad 15 la más alta. CR8 utiliza los cuatro bits de orden inferior para especificar una prioridad de tarea y los 60 bits restantes están reservados y deben escribirse con ceros.
El software del sistema puede utilizar el registro TPR para bloquear temporalmente las interrupciones de baja prioridad y evitar que interrumpan una tarea de alta prioridad. Esto se logra cargando TPR con un valor correspondiente a la interrupción de mayor prioridad que se va a bloquear. Por ejemplo, cargar TPR con un valor de 9 (1001b) bloquea todas las interrupciones con una clase de prioridad de 9 o menos, mientras que permite que se reconozcan todas las interrupciones con una clase de prioridad de 10 o más. Cargar TPR con 0 habilita todas las interrupciones externas. Cargar TPR con 15 (1111b) deshabilita todas las interrupciones externas.
El TPR se pone a 0 al reiniciarse.
XCR0, o Registro de Control Extendido 0, es un registro de control que se utiliza para alternar el almacenamiento o la carga de registros relacionados con funciones específicas de la CPU mediante las instrucciones XSAVE/XRSTOR. También se utiliza con algunas funciones para habilitar o deshabilitar la capacidad del procesador para ejecutar sus instrucciones correspondientes. Se puede cambiar mediante la lectura privilegiada XSETBV mediante las instrucciones no privilegiadas XGETBV. [21]
También existe el MSR IA32_XSS, que se encuentra en la dirección DA0h
. El MSR IA32_XSS controla bits de XCR0 que se consideran estado de "supervisor" y deberían ser invisibles para los programas regulares. Opera con las instrucciones XSAVES y XRSTORS privilegiadas agregando el estado de supervisor a los datos con los que operan. En pocas palabras, si el estado X87 estuviera habilitado en XCR0 y el estado PT estuviera habilitado en IA32_XSS, la instrucción XSAVE solo almacenaría el estado X87, mientras que la instrucción XSAVES privilegiada almacenaría tanto el estado X87 como el PT. Debido a que es un MSR, se puede acceder a él mediante las instrucciones RDMSR y WRMSR.