¿Qué es exactamente el microcódigo y en qué se diferencia del firmware?

50

En cuanto a la terminología, ¿qué es exactamente el "microcódigo" y, si puede actualizarse, en qué se diferencia del firmware?

Esta pregunta no es un duplicado de esta pregunta (por lo que puedo decir) que también he preguntado sobre la modificación del microcódigo. Aquí estoy estrictamente queriendo saber cómo usar estos términos correctamente.

Actualizar

Tengo una respuesta seleccionada, pero no estoy particularmente satisfecho con ella. Involucré muchas de las respuestas y encuentro muchas de esas respuestas igualmente insatisfactorias. Déjame presentarte mis dos cuadros,

  1. "El microcódigo del procesador es similar al firmware del procesador". A medida que leo esto más y más, así es como lo tomo. "Microcódigo" en este contexto es solo marketing sobre "firmware de procesador". Tengan paciencia conmigo,..
  2. O, estoy equivocado, ¡y sé que sucede! En este caso, necesito una idea mucho más exhaustiva de por qué estoy equivocado. En esas respuestas que leí para señalarme que estaba equivocado, estoy luchando por comprenderlas,
    • "Ejecución vs datos" muchas respuestas usan este paradigma, pero para la CPU eso no tiene mucho sentido para mí. Algunos afirman que se ejecuta el firmware, pero ¿por qué? Cuando se trata de la CPU, ¿son las instrucciones o los datos de los programas?
    • Si el firmware une software y hardware (léase: el material de ingeniería eléctrica de los Dioses), entonces, ¿cómo es que el microcódigo no satisface esa distinción?
    • "Interpretar" a medida que pasa el tiempo, esto tiene cada vez menos sentido. ¿Qué significa decir "las instrucciones de hardware se interpretan" con Microcode. Si eso fuera cierto, ¿sería algo tan eficaz si no se interpretara sino que se precompilara con diferentes instrucciones de hardware y simplemente se "ejecutara"? Además, ¿cómo no se interpreta General MIDI de la misma manera? Es un lenguaje que se interpreta mediante "microcódigo MIDI" y se ejecuta en el hardware. ¿O terminales tontos que interpretan las instrucciones de la teleimpresora para la visualización?
    • ¿Se aplica el "microcódigo" al código que se ejecuta en tarjetas de sonido y tarjetas de video (GPU) ?
Evan Carroll
fuente
No soy un experto, pero diría que el microcódigo es el firmware del procesador. Me imagino que todos los datos sobre cómo se ejecuta el microcódigo serían propiedad de Intel / AMD, pero puedo adivinar cómo funcionaría. Tiene un conjunto de CPU simple, cosas básicas como la recuperación de memoria y operadores matemáticos. Entonces tiene un conjunto de instrucciones complejas (como x86 / intel). La CPU obtiene las instrucciones de la memoria y usa el microcódigo para convertir las instrucciones complejas en otras más simples. Un ejemplo sería la multiplicación. La mayoría de las CPU tienen una instrucción de multiplicación, pero en realidad la multiplicación consiste en múltiples cambios de bits.
Programmdude
El término Microcódigo se refiere al hecho de que utiliza / subyace a muchas de las instrucciones de "código" de la CPU. Básicamente le dice a la CPU cómo emular instrucciones y características. De ahí su nombre. Desde el punto de vista del propietario de una computadora, es otro conjunto de códigos enviado por el proveedor de hardware, por lo que, como alternativa, se puede resumir como firmware.
eckes el
En mi opinión, la mejor respuesta simple es: "Cada vez que un procesador ejecuta una instrucción, en realidad está ejecutando un programa de microcódigo". Lo que le parece una instrucción de procesador único es una secuencia particular de instrucciones de microcódigo, un 'programa de microcódigo'. Cada instrucción tiene su propio programa de microcódigo. Las instrucciones individuales de microcódigo habilitan / deshabilitan / etc. los diversos bits internos del procesador.
Ethan Reesor

Respuestas:

57

El origen de la palabra firmware es un punto medio entre el hardware y el software: software integrado en el hardware. Se refiere al software que se almacena en la memoria no volátil en un dispositivo de hardware. Algunos ejemplos son EEPROM y memoria Flash incorporada en dispositivos de hardware, cuando se usan para almacenar código que ejecuta el propio dispositivo.

Se está volviendo más común en algunos tipos de hardware que su "firmware" se almacene en el software del controlador y se cargue en el dispositivo cuando se inicia / inicia, en lugar de dejarlo permanentemente en el dispositivo. No es un gran problema hoy en día, por ejemplo, almacenar unos pocos cientos de KB de código de firmware en un controlador de software cargado en el sistema operativo host y enviarlo al dispositivo como lo inicializa el controlador.

Esto a menudo se conoce como "firmware" aunque, dependiendo de la definición de firmware que acepte, técnicamente no puede considerarlo firmware porque no reside en el hardware (si desconecta el hardware y lo coloca en otro sistema, no retendrá esa versión de "firmware").

El microcódigo es un subconjunto de este último tipo de "firmware". Microcódigo no es un término genérico para todo el "firmware" que se carga en un dispositivo en el arranque. En cambio, es específico de las CPU, donde el microcódigo básicamente forma la capa de traducción entre las instrucciones de CPU estándar de nivel superior y las operaciones de nivel inferior específicas de esa CPU. El BIOS lo carga en la CPU durante el arranque, pero el SO también puede reemplazarlo más adelante en la etapa de arranque.

Una actualización de microcódigo puede permitir que se modifique el comportamiento de bajo nivel de una CPU para evitar ciertos errores aún por descubrir, sin necesidad de reemplazar el hardware de la CPU. El microcódigo generalmente contiene el mapeo más eficiente de las instrucciones de nivel más alto a más bajo posible para la mejor velocidad y eficiencia energética, por lo que a veces, cuando es necesario cambiar el microcódigo para corregir algún error, puede reducir el rendimiento.

Tenga en cuenta que Meltdown (la vulnerabilidad que afecta solo a los chips Intel) no se puede solucionar solo con actualizaciones de microcódigo y requiere cambios en la funcionalidad del sistema operativo central, lo que puede reducir aún más el rendimiento. Spectre (la vulnerabilidad que afecta a los chips Intel, AMD y ARM) puede solucionarse solo con actualizaciones de microcódigo.


Para responder algunas de sus preguntas específicas desde su edición:

  1. Sí, el microcódigo es básicamente firmware que se ejecuta en el procesador. El término especial "microcódigo" se refiere específicamente al firmware en un procesador que contiene el plan para traducir del lenguaje de máquina estándar a instrucciones de procesador de bajo nivel. Por lo tanto, es un término más específico que firmware.

    Tenga en cuenta que, como mencioné anteriormente, no se almacena en la CPU mientras está apagado, sino que se carga en él cada vez que inicia, por lo que, en cierto sentido, no funciona como el firmware tradicional. Sin embargo, una gran cantidad de hardware hace esto ahora y todavía se llama "firmware", por lo que es aceptable llamarlo firmware.

  2. No creo que te equivoques. El firmware no tiene que estar escrito en un lenguaje de máquina determinado y su ejecución no tiene que activarse de cierta manera. En cierto nivel bajo, todo el código de la máquina son "datos" que son "leídos" por un procesador e interpretados de cierta manera.

    El término "microcódigo" generalmente se usa solo para CPU principales y no para tarjetas gráficas u otro hardware, a pesar de que esos otros dispositivos pueden tener código cargado en ellos de la misma manera.

thomasrutter
fuente
1
Tu segunda oración es incorrecta; El firmware incluye software almacenado en ROM. Érase una vez que la mayoría del firmware estaba en ROM, antes de que las alternativas se volvieran asequibles.
Harry Johnston
1
Claramente, el "microcódigo" es específico de una CPU. La pregunta es distinta de ser específica: ¿es diferente? Al eliminar el alcance ("la CPU"), se obtiene una cita casi directa de "capa de traducción entre las instrucciones de nivel superior y las operaciones de nivel inferior". Eso es prácticamente solo la definición de firmware. ¿No es eso lo que hace todo el firmware? Son muchas palabras, pero creo que la descripción más descriptiva y concisa es la anterior: "El microcódigo del procesador es similar al firmware del procesador".
Evan Carroll
@Evan, la mayoría de los dispositivos reciben sus instrucciones indirectamente, enviadas desde el código que se ejecuta en la CPU. Solo la CPU procesa directamente el código proporcionado por el usuario. También considere que la mayoría de los dispositivos contienen una CPU integrada de algún tipo que ejecuta el firmware, y que la CPU podría tener su propio microcódigo. La distinción puede ser importante solo para diseñadores de hardware y programadores de kernel, pero no es arbitraria.
Harry Johnston
"la mayoría de los dispositivos contienen una CPU integrada de algún tipo que ejecuta el firmware, y esa CPU podría tener su propio microcódigo", eso es lo que quiero decir. ¿Entonces el código que procesa una transmisión midi en una tarjeta de sonido también es "microcódigo"? ¿O el código que dibuja / muestra caracteres de visualización en una terminal tonta?
Evan Carroll
No. El código que se ejecuta en la tarjeta de sonido para procesar una transmisión MIDI es simplemente un firmware normal. El código que procesa el código que se ejecuta en la tarjeta de sonido para procesar una transmisión MIDI sería microcódigo. (En la práctica, no estoy seguro de que la CPU incorporada en algo tan simple como una tarjeta de sonido necesite un microcódigo en primer lugar, pero eso no viene al caso). La clave es una transmisión MIDI o los caracteres que se envían a una terminal tonta, no son código. Son solo datos.
Harry Johnston el
23

https://wiki.debian.org/Microcode

Microcódigo de CPU

El microcódigo del procesador es similar al firmware del procesador. El núcleo puede actualizar el firmware del procesador sin la necesidad de actualizarlo a través de una actualización del BIOS. Una actualización de microcódigo se mantiene en la memoria volátil, por lo que el BIOS / UEFI o el núcleo actualiza el microcódigo durante cada arranque.

Los procesadores de Intel y AMD pueden necesitar actualizaciones de su microcódigo para funcionar correctamente. Estas actualizaciones corrigen errores / erratas que pueden causar cualquier cosa, desde el procesamiento incorrecto hasta la corrupción de código y datos, y bloqueos del sistema.

El BIOS (o UEFI) actualiza el microcódigo de la CPU durante el arranque, sin embargo, la mayoría de las veces, el proveedor de la placa base no emitirá actualizaciones frecuentes de BIOS / UEFI, o el usuario no instalará dichas actualizaciones. Por estas razones, es probable que el procesador del sistema se ejecute con microcódigos obsoletos en una gran cantidad de sistemas.

Ejemplos:

https://www.win-raid.com/t3355f47-Intel-AMD-amp-VIA-CPU-Microcode-Repositories.html

Julian
fuente
99
No es tan simple: el microcódigo es "una técnica que impone un intérprete entre el hardware y el nivel arquitectónico de una computadora". Como tal, el microcódigo es una capa de instrucciones de nivel de hardware que implementan instrucciones de código de máquina de nivel superior o secuencia de máquina de estado interna en muchos elementos de procesamiento digital. Fuente: en.wikipedia.org/wiki/Microcode
17
Entonces espera ... ¿un "bote" es solo un tipo particular de "vehículo"? ¡Qué palabra inútil! :-)
Harry Johnston
44
@HarryJohnston Bueno, considero que es bastante útil distinguir "un bote" de otros tipos de vehículos en ciertos contextos ... y "microcódigo" es un tipo muy específico de "algo" que está presente en muchas CPU modernas ... ( por lo tanto, es bastante deseable tener un término para ello).
Radovan Garabík
44
@ RadovanGarabík: Ese es exactamente el punto de Harry, hecho con sarcasmo.
Peter Cordes
44
No lo entiendo Si "el núcleo puede actualizar el firmware del procesador sin la necesidad de actualizarlo a través de una actualización del BIOS", entonces ¿por qué el hecho de que "el proveedor de la placa base no emitirá actualizaciones frecuentes de BIOS / UEFI" significa que "el procesador del sistema es es probable que se ejecute con microcódigo desactualizado en una gran cantidad de sistemas "? ¿Por qué el kernel no solo parchea el microcódigo? ¿Por qué confiar en el BIOS si el BIOS nunca se actualiza y hay una alternativa disponible que se actualiza con más frecuencia?
Ajedi32
6

Bueno, las "actualizaciones de microcódigo" de Intel son de hecho actualizaciones de "firmware" en el sentido de que actualizan mucho más que la unidad de traducción de microcódigo del procesador.

Estas actualizaciones de paquete de procesador unificado que llamamos "actualizaciones de microcódigo" para Intel también actualizan otros microcontroladores integrados (como la PMU y el núcleo de administración de energía), así como varias tablas de parámetros para diferentes subsistemas de procesadores integrados. Son bastante complejos.

Esta información está disponible en varias de las patentes de Intel relacionadas con las actualizaciones de microcódigo y microcódigo.


fuente
4

Creo que el término "microcódigo" se refiere principalmente a lo que hace el código (ejecuta instrucciones de bajo nivel utilizando incluso instrucciones de nivel inferior), mientras que el término "firmware" se refiere principalmente a cómo se almacena y administra (menos fácil de actualizar que el software , se actualiza más fácilmente que el hardware). En ese sentido, es más bien como la distinción entre una "aplicación" y un "archivo JAR": el mismo programa podría ser ambos, pero lo está mirando desde dos perspectivas diferentes.

Por cierto, la idea del microcódigo se remonta a Maurice Wilkes en 1951, décadas antes de que los procesadores de computadoras se integraran en silicio.

Michael Kay
fuente
3

El firmware generalmente se refiere al código para dispositivos que contienen una CPU, no la CPU misma, por ejemplo, el firmware para un teléfono Android.

El microcódigo es una capa de traducción entre conjuntos de instrucciones complejas (por ejemplo, 486, 686, ect. AMD-64) y las instrucciones de nivel inferior para las que los fabricantes de chips diseñan silicio. Por lo tanto, una serie de instrucciones en el conjunto de instrucciones de la CPU no se implementan en silicio, sino que se traducen mediante microcódigo en múltiples instrucciones que se implementan en silicio.

David Waters
fuente
Pero, ¿no es cierto para todo el firmware? ¿Instrucciones ABI que podrían implementarse en Silicon pero que no son y son actualizables a través del software?
Evan Carroll
1
Las "actualizaciones de microcódigo" de Intel pueden hacer mucho más que modificar cómo decodifican las instrucciones microcodificadas . por ejemplo, pueden deshabilitar el búfer de bucle (en Skylake para corregir la errata SKL150) porque, cuando es posible, la CPU está diseñada para hacerlo posible en caso de que se descubran errores de hardware.
Peter Cordes
3

"Microcódigo" era el término original, y se refería a las instrucciones que se utilizaron para implementar un intérprete para el conjunto de instrucciones "públicas" de un procesador.

Pero con el tiempo, con muchas variaciones en los esquemas de implementación, la distinción, como era, se volvió más vaga. Primero hubo microcódigo horizontal versus vertical, luego varios esquemas para escribir "microcódigo" (para implementar, por ejemplo, las instrucciones de E / S) en el conjunto de instrucciones del procesador "principal". Luego, era necesario distinguir entre el código que se cargaba fácilmente mediante las operaciones ordinarias de "ejecución" del programa, frente al código (para BIOS, por ejemplo) que se guardaba en la ROM o en algún otro almacenamiento protegido y relativamente inmutable. Por lo tanto, el término "firmware" se inventó para referirse a estas instrucciones que de alguna manera se hicieron más persistentes (y menos accesibles para la modificación del usuario) en el almacenamiento.

Pero las cosas se han transformado y torcido muchas veces desde que se hicieron estas primeras distinciones, y los términos solo se pueden definir con precisión dentro de un determinado procesador y entorno de SO.

Daniel R Hicks
fuente
+1, la clave aquí es que hay muchos significados del término "microcódigo", y creo que el OP realmente quiere saber sobre "actualizaciones de microcódigo", no los otros significados.
Peter Cordes
3

[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.

Harry Johnston
fuente
1

El microcódigo ( "almacén de control" ) son datos que residen en una memoria volátil o no volátil, generalmente una memoria bastante pequeña pero muy amplia, cuyas señales de salida de datos están conectadas a las entradas de señal de control de unidades funcionales de hardware paralelas, lógica de control aleatorio, etc. Las entradas de dirección de la memoria de microcódigo son proporcionadas por una máquina de estado que recorre una palabra de memoria ("instrucción de microprograma") a la vez, para secuenciar efectivamente las señales de control de uno o varios bloques de hardware. Este hardware multiplexa en el tiempo y permite la implementación de operaciones complejas con una lógica significativamente menos aleatoria.

En los microprocesadores modernos puede haber una jerarquía de unidades de microcódigo / secuenciación necesarias para abstraer la microarquitectura física de silicio a una familia de arquitectura más general con una interfaz común de "código de máquina". Por ejemplo, puede haber varias capas de microcódigo / secuencia para implementar decodificadores de instrucciones y unidades de coma flotante.

El firmware en un sentido tradicional es cualquier software / datos que residen en una memoria no volátil, que se espera que sea infrecuente o que nunca cambie. Esto contrasta directamente el software almacenado o, mejor dicho, escrito y ejecutado desde la memoria del sistema, que cambia constantemente. Microcódigo se refiere específicamente a datos que representan un microprograma para secuenciar el control del hardware.

El microcódigo puede implementarse en el firmware / el firmware puede contener microcódigo, pero no son lo mismo.


fuente
1
Las CPU x86 modernas están mucho más cableadas de lo que usted describe; parece que estás describiendo un 386 no canalizado, no un Haswell / Skylake. Las "actualizaciones de microcódigo" de Intel pueden hacer mucho más que modificar cómo decodifican las instrucciones microcodificadas . por ejemplo, pueden deshabilitar el búfer de bucle (en Skylake para corregir la errata SKL150) porque, cuando es posible, la CPU está diseñada para hacerlo posible en caso de que se descubran errores de hardware.
Peter Cordes
@PeterCordes 1) la arquitectura x86 es irrelevante para presentar el concepto de microcódigo 2) si hubiera entendido mi respuesta, estaríamos de acuerdo en que secuencia las señales de control, como usted alude
1
No, Intel Uops no son realmente señales de control. No programan directamente las unidades lógicas como en una tubería clásica de MIPS. El programador fuera de servicio lee los uops para descubrir qué uops tienen una dependencia de datos de qué otros uops. Este es un modelo interno muy diferente de algo así como un 6502 donde los múltiples pasos de ejecución de una sola instrucción se leen desde una ROM de decodificación. Lo que usted describe es un significado histórico del término microcódigo, pero no se trata de "actualizaciones de microcódigo" para las CPU modernas.
Peter Cordes
¿Dónde mencioné (o la pregunta) micro-operaciones Intel o x86 (que NO es lo mismo que un "microprograma" en una tienda de control)? Además, literalmente, cualquier cosa proporcionada por un almacén de control es una señal de control, ya sea que la señal sea secuenciada o no, estática, lógica o un cable. Lo que describo es la definición literal de microcódigo, "actualizaciones de microcódigo" también. Estás obsesionado con el aspecto de secuencia de mi respuesta porque muchas de dichas señales en un Haswell serán estáticas. Para el registro, muchos están secuenciados, la secuenciación no es mutuamente exclusiva para la canalización o el OoOE.
1
Entonces está respondiendo correctamente la pregunta "¿qué es una instrucción microcodificada?" , Pero una "actualización de microcódigo" para una CPU no tiene el mismo significado técnico de la palabra "microcódigo". Este es un punto importante que debe hacerse explícitamente, ya que está en la raíz de la confusión del OP, creo.
Peter Cordes
0

El firmware es un código ejecutable colocado en una ROM u otra memoria no volátil.

El propósito original y principal del firmware es estar allí cuando se inicia una CPU, por lo que tiene un código que ejecutar para iniciar o iniciar cualquier sistema del que forme parte la CPU. En el caso de las PC, el firmware también se utiliza para proporcionar servicios al sistema operativo en ejecución y también contiene código para los controladores integrados que controlan los ventiladores, la alimentación y algunas otras cosas, y el código para el ME / PSP que se ejecuta en segundo plano. .

Los dispositivos periféricos que llevan firmware, como discos duros, dispositivos USB, etc. tienen una CPU incorporada.


Microcode no es un código ejecutable, sino un código utilizado por las instalaciones internas de un dispositivo.

Se carga en las CPU Intel o AMD con una instrucción WRMSR. Cargar firmware en un dispositivo implica programar una ROM o medio flash, o confiar en un pequeño programa de carga que estará presente en el dispositivo para aceptar el firmware.

Las actualizaciones de firmware y microcódigo se encuentran en una categoría similar: cosas que debe hacer para que el hardware funcione y puede necesitar actualizaciones de vez en cuando, pero son cosas muy diferentes.

Las instrucciones complejas en muchas CPU no están conectadas directamente en el hardware, sino que son "ejecutadas" por una instalación más pequeña similar a una CPU en la CPU principal. El microcódigo controla estas operaciones. Esto se remonta al menos al Motorola 68000 que tenía un "MicroROM" que contenía un microcódigo.

Nadie más que los procesadores Intel o AMD saben lo que el microcódigo realmente controla o hace, ya que no revelan detalles. Hay intentos de hackearlo. Referencia .

Prácticamente, las actualizaciones de microcódigo se usan esencialmente para deshabilitar las instrucciones que causan problemas en los modelos / pasos conocidos de CPU, y las últimas CPU de Intel a menudo requieren al menos una actualización de microcódigo antes de funcionar de manera confiable.


Si lee acerca de la ROM de decodificación de PLA 6502, se puede obtener una perspectiva de lo que un microcódigo de CPU podría hacer / realmente : el 6502 es una CPU de 8 bits antigua y sus instrucciones fueron secuenciadas / controladas por un PLA interno. El PLA básicamente diría qué partes del chip estaban involucradas en cada paso de cada instrucción (las instrucciones 6502 varían de 2 a 7 ciclos). Esto es mucho, mucho antes de cosas como el almacenamiento en caché, la arquitectura superescalar, la predicción de ramas, etc. No estoy seguro de si el microcódigo en las CPU modernas controlaría algo así como ese PLA.

LawrenceC
fuente
1
Las "actualizaciones de microcódigo" de Intel pueden hacer mucho más que modificar cómo decodifican las instrucciones microcodificadas . por ejemplo, pueden deshabilitar el búfer de bucle (en Skylake para corregir la errata SKL150) porque, cuando es posible, la CPU está diseñada para hacerlo posible en caso de que se descubran errores de hardware.
Peter Cordes
1
Punto interesante sobre el 6502 PLA, pero las CPU canalizadas tienen que estar más cableadas que eso. Classic MIPS utilizó diferentes campos de la palabra de instrucción para controlar directamente la lógica interna de una manera similar a eso, pero, por supuesto, una CPU canalizada tiene múltiples instrucciones en vuelo, potencialmente una para cada etapa de canalización si no hay paradas. (O para el superescalar, 2 o más en cada etapa de canalización, y fuera de orden es aún más complejo). Muchas de las partes internas de las CPU modernas están conectadas, pero con mandos que las actualizaciones de microcódigo pueden modificar.
Peter Cordes
0

Terminología

Contestaré esto usando solo el contexto de uso en este pdf .

  • Firmware : el microcódigo se actualiza a través de una ruta proporcionada por el firmware de la CPU.

    "Por lo general, un parche de microcódigo se carga en la CPU mediante el firmware de la placa base (por ejemplo, BIOS o UEFI) o el sistema operativo durante el proceso de arranque inicial".

  • Microcódigo : son los datos utilizados por la "Unidad de decodificación de instrucciones (IDU)". Una IDU puede estar cableada o microcodificada . Microcodificado en este contexto simplemente significa programado. TAMBIÉN significa "la pluralidad de microcódigo". El IDU

    La IDU desempeña un papel central dentro de la unidad de control y genera señales de control basadas en el contenido del registro de instrucciones.

  • Macroinstrucción una instrucción enviada a la IDU para decodificar, puede devolver cualquier cantidad de microinstrucciones .

  • Microinstrucción uno precalculados "palabra de control", todo el estado y las instrucciones para ejecutar un ciclo de reloj. Enviado a la CPU para generar las señales de control .

Entonces, en este contexto, actualizaría el microcódigo con firmware. Enviaría macroinstrucciones a la IDU microcodificada para resolver la macroinstrucción en una "microinstrucción" para su ejecución en la CPU, que las convierte en señales de control.

Mi lectura de esto

El microcódigo son datos , pero la actualización del microcódigo se realiza a través del firmware. Y de manera confusa porque estás hablando de lo que esencialmente equivale a una tabla de búsqueda interna, ciertamente también es firmware en sí mismo, ya que esencialmente se almacena en el chip y se usa en el flujo de ejecución del chip. Creo que podría argumentar que General MIDI, PostScript de hardware y señales de control para terminales tontas también se interpretan en el mismo sentido, en hardware, y que algo toma las instrucciones y finalmente genera "señales de control" en algún tipo de proceso de interpretación .

Parece que tenemos nombres especiales para estos procesos y componentes dentro de la CPU: "IDU" en una CPU, y un nombre para la tabla de entrada específica que emplea la IDU que contiene todas las "microinstrucciones": el "microcódigo". La información sobre ese proceso es exclusiva y cerrada. Supongo que es análogo a cualquier otra tecnología desde módems (con ATDT y similares en un módem Hayes) hasta tarjetas MIDI, pero no nombramos la tabla de búsqueda específica "microcódigo", y en su lugar utilizamos el término general "firmware" para el proceso de flasheo y toda la carga útil almacenada en el chip.

Evan Carroll
fuente
2
Linux (y Windows) puede actualizar el microcódigo de la CPU de forma totalmente independiente del firmware de la placa base de la que está hablando. Firmware placa base hace contienen el último microcódigo de la CPU y un mecanismo para aplicar antes de cualquier código se carga desde el disco, pero si usted no ha actualizado el firmware de la placa madre por un tiempo, usted todavía puede tener la última microcódigo de la CPU simplemente actualizar el software. Estás haciendo un gran problema con la conexión entre el firmware mobo y el microcódigo de la CPU. Es útil que el firmware actualice el microcódigo en cada arranque, pero no es necesario (a excepción de la estabilidad a veces).
Peter Cordes
2
Además, no todas las macro instrucciones x86 se decodifican buscándolas en la ROM del secuenciador de microcódigo. En las CPU Intel, las instrucciones que decodifican a 4 o menos unidades (micro-ops) están codificadas en los decodificadores. La mayoría de las instrucciones no están "microcodificadas" en este sentido de la palabra. La división de enteros es ( divy idiv), pero incluso la división de FP es uop simple (debido a que es más crítico para el rendimiento, la lógica iterativa de varios pasos se realiza dentro de la unidad de división en lugar de con uops microcodificados).
Peter Cordes
@PeterCordes eres el tipo que escribe esta respuesta, edita cualquiera de mis respuestas para que sea técnicamente más correcta. Tienes la carta blanca. Aunque intentaré aplicar esos cambios esta noche, si tienes poco tiempo.
Evan Carroll
Si llego a eso, terminaré de escribir la respuesta que comencé. Por ahora, la respuesta de Harry Johnston es probablemente la mejor hasta ahora para responder lo que creo que realmente quieres saber (que es lo que realmente actualiza una "actualización de microcódigo", que no es lo mismo que hace el "microcódigo de CPU", porque es un nombre demasiado simplificado, como es común con las cosas técnicas que necesitan un nombre de una palabra que el público en general pueda seguir.)
Peter Cordes
0

He tomado un curso de diseño básico de ISA, principalmente en el estudio y diseño de un procesador RISC modelado a partir de conceptos MIPS. Esto es lo que he venido a recordar.

Según tengo entendido, los bloques básicos de un procesador como registros, ALU, multiplexores y módulos de memoria requieren ciertas señales para que puedan realizar su trabajo. Llamaría a estas señales sus señales de "aserción", ya que son las señales requeridas para operar estos bloques. Las CPU, en esencia, son un bloque de espagueti de ALU, módulos de memoria, registros y otro hardware. Lo que significa que cada CPU debe afirmar una cierta secuencia de señales de control para hacer su trabajo (me refiero a instrucciones básicas como ANDI, ORI, JMP, BNE, BEQ, etc.). Tuve sentimientos encontrados al respecto cuando tuve que hacer valer las señales yo mismo (literalmente, siguiendo todas las instrucciones MIPS) durante las pruebas y la depuración de un conjunto de instrucciones ya que el ritmo del plan de estudios no me había enseñado nada sobre las unidades de control en ese momento.

Por otro lado, el lenguaje del ensamblador se reduce a códigos de operación y sus operandos en la palabra de instrucción (básicamente el ancho de su bus de datos). En términos de MIPS, los primeros 6 bits de su palabra de instrucción es su código de operación. Por simple inspección matemática por sí sola, no puede "afirmar" su ALU, registro, memoria, muxes ... básicamente el resto de su hardware con solo 6 bits.

No, a menos que tenga ... UN DECODIFICADOR DE INSTRUCCIONES. El decodificador de instrucciones básicamente toma su código de operación y genera TODAS sus señales de "aserción" requeridas para operar su hardware. Sin embargo, los decodificadores de instrucciones difieren en la implementación entre arquitecturas y, en algunos casos, es programable. El microcódigo afecta la sección programable del decodificador de instrucciones.

He llegado a creer que el firmware es un término general para cualquier información integrada en el hardware. En algunos casos, también se referiría al microcódigo, ya que su flujo de bits se puede codificar y almacenar en hardware como EEPROM y memoria flash. Sin embargo, la mayoría de las veces es código compilado, asm o incluso flujos de bits VHDL / Verilog utilizados en FPGA. El microcódigo me parece una semántica utilizada para especificar las "señales de aserción" en el procesador de elección.

Jackson Young
fuente
-2

El microcódigo es de nivel sub-asm, firmware integrado en la CPU.

Peter dice reinstalar a Mónica
fuente