Con las vulnerabilidades de hardware, el microcódigo ha pasado de estar en un segundo plano a estar en boca de todos. Sin embargo, aún sigue siendo misterioso para muchos, y eso es lo que intentaremos solucionar aquí, contándote todo lo que tienes que saber sobre este código y cómo afecta a tu CPU.
Índice de contenidos
Te recomiendo leer también sobre qué es el firmware, ya que está estrechamente relacionado
La Unidad de Control (UC) es el centro de un procesador. Es el componente encargado de coordinar y gestionar todas las operaciones internas de la CPU, es decir, de controlar qué es lo que tiene que hacer cada una de las unidades funcionales según la instrucción del programa que se está ejecutando.
De esta forma, asegurando que cada instrucción se ejecute de manera secuencial y correcta. En esencia, la UC es la que «dirige el tráfico» dentro del procesador, determinando qué datos se deben mover, cuándo y hacia dónde. Por ejemplo, imagina que llega una instrucción a la CPU de suma:
ADD AX, BX
Esto, en un x86, significaría que se debe sumar el contenido almacenado en el registro BX de la CPU al contenido del registro AX, y almacenar el resultado en AX. Para que esta instrucción se pueda ejecutar, la unidad de control tendrá que:
Es decir, la unidad de control es como el director de la orquesta, que irá indicando los pasos que las unidades tienen que realizar, como indicar a los registros que tendrán un acceso de lectura o escritura, decirle a la ALU o FPU si tiene que realizar una suma, multiplicación, etc. Y finalmente, también indicar lo que se hace con el resultado. Todo ello dependerá también de los modos de direccionamiento que la CPU admita y de la propia instrucción en sí.
También se encargará de cuestiones relacionadas con la seguridad, diferenciando entre código privilegiado (modo kernel) y código no privilegiado (modo usuario). E incluso gestionará otras operaciones como las excepciones, interrupciones, etc.
También te podría interesar conocer los mejores procesadores del mercado
La UC, históricamente, se han utilizado dos enfoques principales para su implementación:
Actualmente, tanto los CISC como los RISC (incluso algunas GPUs) suelen tener unidades programadas, dada la complejidad de los actuales sistemas. Además, el microcódigo ni siempre está en una ROM dentro de la CPU, también puede estar instalada en otras partes del firmware del sistema, como en el BIOS/UEFI, y durante el arranque, el microcódigo se cargará para que la CPU pueda funcionar. Así se permite que pueda ser modificado sin necesidad de fabricar un chip diferente.
Es decir, el BIOS/UEFI puede emitir actualizaciones del microcódigo durante el arranque de tu sistema, e incluso también el propio sistema operativo puede hacer ajustes en el microcódigo de la CPU, mediante actualizaciones del firmware. Por tanto, las nuevas unidades no son tan «rígidas» como las que usaban una memoria ROM de solo lectura, sino que tienen una memoria tipo flash donde se carga el microcódigo durante el arranque de la máquina.
Esto es gracias a un mecanismo de instrucciones llamado RDMSR (Read Model-Specific Register) y WRMSR (Write Model-Specific Register). Estas instrucciones permiten al software leer y escribir directamente en registros especiales del procesador, conocidos como registros específicos del modelo (MSR). Estos registros contienen información crucial sobre el estado del procesador, sus características y configuraciones que, por lo general, no están expuestas a través de las instrucciones estándar del conjunto de instrucciones (ISA).
Pensarás que para que esto funcione, debe estar el microcódigo cargado en la CPU, puesto que no podría hacer nada sin él, pero la verdad es que siempre hay un microcódigo dentro de la CPU, uno básico que pueda ejecutar las instrucciones necesarias para el arranque, y cargar las actualizaciones. Esto quiere decir que, los procesadores no funcionarán conforme a las nuevas actualizaciones cuando el código debe ser cargado desde el BIOS/UEFI durante el arranque, y empezarán ha hacerlo una vez el microcódigo se ha cargado.
El microcódigo es un código básico, un programa elemental que se almacena en una memoria y actúa a muy bajo nivel, es decir, un firmware para la CPU. Por tanto, actúa como un puente entre el hardware y la ISA, y por tanto, el software. Es un conjunto de instrucciones de bajo nivel que definen cómo un procesador ejecuta instrucciones de código máquina de alto nivel.
Gracias a este microcódigo, la unidad de control sabrá cómo se trata cada instrucción, o mejor dicho, qué se hace al recibir cada instrucción. Por tanto, se puede decir que es una forma de cambiar el modo de comportarse de un procesador.
Por otro lado, existen varios tipos de microcódigo, como el horizontal y el vertical. Mientras que el horizontal genera señales de control para múltiples unidades funcionales, el vertical controlará una sola unidad.
Ahora que ya conoces qué es el microcódigo y para qué sirve, es momento de contestar a la pregunta del título. ¿Cómo una actualización de microcódigo puede solucionar los problemas? Pues bien, cuando se aplica un parche, puede contribuir a:
Por ejemplo, la vulnerabilidad Spectre explotaba una debilidad en la forma en que los procesadores con ejecución especulativa ejecutaban instrucciones. Para corregir esta vulnerabilidad, las actualizaciones de microcódigo introdujeron cambios en la forma en que el procesador manejaba la ejecución especulativa, evitando que los atacantes de canal lateral pudieran aprovechar esta característica para acceder a información confidencial almacenada en la memoria caché.
Comenta todas tus dudas, impresiones, sugerencias, etc.
CHIEFTEC acaba de presentar dos nuevas cajas para PC, Visio y Visio Air con un…
Asus ZenWiFi BT8 es un sistema Mesh Wi-Fi 7 el cual se sitúa por debajo…
Qualcomm anuncia nuevos SoC Snapdragon X, pero no se trata de una nueva generación, sino…