[Nota: esta respuesta está destinada específicamente a abordar la edición reciente y no se agrega a las varias respuestas sonoras que ya se han publicado.]
Entonces, para reiterar: el microcódigo (al menos en una primera aproximación) es un tipo específico de firmware.
"Microcódigo" en este contexto es solo marketing sobre "firmware de procesador".
Bueno, no es marketing. El marketing lo habría llamado XBoost Pro (TM) o algo así. Más bien, es un término de ingeniería; Si diseña CPU, la distinción entre el microcódigo y el otro firmware de la CPU (y el tipo de firmware típico de otros dispositivos) es importante para usted. Si no, probablemente no lo sea.
Si diseña placas base o escribe sistemas operativos, probablemente utilice "actualización de microcódigo" como abreviatura para la "actualización de firmware de CPU" más difícil de manejar y menos familiar. La mayoría de las actualizaciones de firmware de la CPU afectan principalmente al microcódigo, por lo que está lo suficientemente cerca de lo mismo. Probablemente sepa la diferencia, pero no necesita preocuparse por eso.
El usuario final no necesita saber ni preocuparse por la diferencia, y en un mundo ideal nunca escucharía la palabra "microcódigo".
Supongo que llamó su atención en la cobertura de prensa sobre las recientes vulnerabilidades de ejecución especulativa, aunque es posible que también lo haya escuchado antes en un contexto que hizo más obvio que no tenía que preocuparse. Estas vulnerabilidades se lanzaron antes de lo planeado, lo que puede haber resultado en una cobertura de prensa menos curada de lo que podría haber sido. Desde el punto de vista del usuario final, debe instalar actualizaciones de BIOS, actualizaciones del sistema operativo y, en algunos casos, actualizaciones de aplicaciones; no necesita saber ni preocuparse si alguno de estos incluye un nuevo microcódigo
Por lo tanto, incluso al darse cuenta de que probablemente no necesite saber ni preocuparse, aún puede estar interesado por pura curiosidad: ¿cómo podría distinguir el microcódigo de otro firmware?
Bueno, lo primero que hay que reconocer es que no necesariamente hay una sola definición dura y rápida, sino más bien una situación de Bleggs y Rubes . Aún así, hay algunas cosas que podemos decir sobre el microcódigo:
Microcode generalmente se ejecuta dentro de una CPU en lugar de en una CPU. Esa es la vista de alto nivel.
La arquitectura del microcódigo generalmente se ve bastante diferente a la arquitectura del código ordinario, incluido el firmware ordinario. Es probable que sea muy paralelo y se implemente mucho más cerca del hardware. Varias de las respuestas existentes (incluida su propia respuesta) discuten esto, aunque debe tenerse en cuenta que los detalles pueden variar según el diseño de la CPU.
Aunque el hardware a menudo está diseñado para ejecutar solo el firmware proporcionado por el fabricante, no es particularmente raro que se use firmware de terceros, ¡aunque probablemente invalidará la garantía! El microcódigo de terceros es mucho más raro, aunque creo que en la antigüedad (estoy hablando de cuando una CPU era del tamaño de una caja de pan), algunos usuarios finales modificarían el microcódigo en sus CPU. Hasta donde sé, esto no es posible en el tipo de CPU que se usan en las PC.
Microcode generalmente traduce o ayuda a implementar una arquitectura de conjunto de instrucciones públicas, es decir, ejecuta el código de máquina que utilizan el diseñador del sistema operativo y los programadores de aplicaciones. Más sobre esto en la siguiente sección.
"Ejecución vs datos" muchas respuestas usan este paradigma
Temo de maneras confusamente diferentes, pero abordaré mi propio comentario. Esta sección también sirve para expandir el último punto anterior. El objetivo aquí es tratar de distinguir entre el trabajo que está haciendo una CPU (logrado mediante una combinación de hardware y microcódigo) y el trabajo que está haciendo un dispositivo típico (logrado mediante una combinación de hardware y firmware). Voy a elegir una unidad de disco duro SATA.
La unidad SATA sigue las instrucciones de la computadora, que están en la línea de "leer los datos del sector 5,123" y "escribir estos datos en el sector 1,321". El firmware de la unidad es responsable de hacer que el hardware haga que esto suceda, y generalmente es un código bastante común que se ejecuta en una CPU integrada de algún tipo. Las instrucciones de la unidad llegan secuencialmente, aunque es posible que no se procesen en el orden en que llegan. Estas instrucciones no son un programa, son enviadas por un programa que se ejecuta en la CPU principal. En particular, no hay flujo de control, es decir, no hay instrucciones para indicarle al disco SATA qué instrucciones ejecutar a continuación.
La CPU está a cargo de la computadora. Una vez que ha terminado de inicializarse, ejecuta las instrucciones ("código de máquina") proporcionadas por la placa base (el BIOS, otro tipo de firmware) que le indica que ejecute el código de máquina provisto por el sistema operativo que lo dirige a ejecutar el código de máquina proporcionado por vendedores de aplicaciones. La CPU misma recupera el código de máquina de EEPROM (en el caso del BIOS) o RAM (en el caso del sistema operativo y las aplicaciones). En particular, el código de máquina tiene un flujo de control: el código de máquina le dice a la CPU qué código de máquina debe realizar a continuación. Puede recorrer el mismo código de máquina repetidamente, puede ejecutar diferentes bits de código dependiendo de los datos en los que está trabajando el código: las instrucciones en un lenguaje de interfaz de dispositivo como el código SATA pueden hacer un conjunto limitado de tareas simples, pero el código de máquina puede hacernada . (Ver también Turing Completeness ).
Podríamos reescribir ese último punto como: el microcódigo generalmente implementa un lenguaje Turing Complete; el firmware ordinario generalmente no lo hace.
¿Qué significa decir "las instrucciones de hardware se interpretan" con microcódigo?
Cierto pero probablemente confuso; El punto importante es la distinción entre el código de máquina, que tiene un flujo de control y es Turing Complete, y las instrucciones definidas por una interfaz de dispositivo como SATA, que no lo hace y no lo es.
¿Se aplica el "microcódigo" al código que se ejecuta en las tarjetas de sonido?
No, las tarjetas de sonido reciben instrucciones, no códigos, al igual que las unidades SATA. Las instrucciones pueden ser como "tocar A sharp" o "interpretar esta información como una forma de onda y reproducirla". Aún muy simple.
y tarjetas de video (GPU)?
Las tarjetas de video antiguas (las que no tienen GPU) son las mismas que las unidades SATA. Las instrucciones son como "establecer este píxel en este color" o "escribir una A en esta posición".
... Las GPU son complicadas y se encuentran en algún lugar entre los dos mundos que he intentado describir anteriormente. Probablemente sea más simple pensar en ellos como una computadora especializada ubicada dentro de la computadora principal, una que tiene sus propias CPU. Es cierto que los dispositivos como las unidades SATA también tienen CPU integradas, pero la diferencia es que la CPU integrada en una unidad SATA solo ejecuta el código proporcionado por el fabricante de la unidad, mientras que las GPU también ejecutan el código proporcionado por el sistema operativo y / o el proveedor de la aplicación. Realmente esta es una pregunta completamente separada.
TL; DR: el microcódigo es un tipo específico de firmware, que ayuda al hardware a implementar un conjunto de instrucciones Turing Complete.