Qué es el microcódigo Intel?


Por lo que he leído se utiliza para corregir errores en la CPU sin modificar el BIOS. De mis conocimientos básicos de Ensamblaje sé que las instrucciones de ensamblaje se dividen en microcódigos internamente por la CPU y se ejecutan en consecuencia. Pero intel de alguna manera da acceso para hacer algunas actualizaciones mientras el sistema está en funcionamiento.

¿Alguien tiene más información sobre ellos? ¿Hay alguna documentación sobre qué se puede hacer con los microcódigos y cómo se pueden utilizar?


EDITAR: He leído el artículo de Wikipedia: no descubrí cómo puedo escribir algunos por mi cuenta, y qué usos tendría.

Author: edmz, 2010-12-06

3 answers

En tiempos antiguos, el microcódigo se usaba mucho en la CPU: cada instrucción se dividía en microcódigo. Esto permitió conjuntos de instrucciones relativamente complejos en CPU modesta (considere que un Motorola 68000, con sus muchos modos de operando y ocho registros de 32 bits, cabe en 40000 transistores, mientras que un x86 moderno de un solo núcleo tendrá más de cien millones). Esto ya no es cierto. Por razones de rendimiento, la mayoría de las instrucciones ahora están "cableadas": su interpretación es realizado por circuitos inflexibles, fuera de cualquier microcódigo.

En un x86 reciente, es plausible que algunas instrucciones complejas como fsin (que calcula la función seno en un valor de coma flotante) se implementen con microcódigo, pero las instrucciones simples (incluida la multiplicación de enteros con imul) no lo son. Esto limita lo que se puede lograr con microcódigo personalizado.

Dicho esto, el formato de microcódigo no solo es muy específico para el modelo de procesador específico (por ejemplo, microcódigo para un Pentium III y un Pentium IV no se pueden intercambiar libremente entre sí) y, por supuesto, usar microcódigo Intel para un procesador AMD está fuera de discusión), pero también es un secreto severamente protegido. Intel ha publicado el método por el cual un sistema operativo o una placa base BIOS puede actualizar el microcódigo (debe hacerse después de cada reinicio; la actualización se mantiene en RAM volátil), pero el contenido del microcódigo no está documentado. El Software de arquitecturas Intel® 64 e IA-32 El Manual del desarrollador (volumen 3a) describe el procedimiento de actualización (sección 9.11 "instalaciones de actualización de microcódigo"), pero indica que el microcódigo real está "cifrado" y lleno de sumas de verificación. La redacción es lo suficientemente vaga como para que casi cualquier tipo de protección criptográfica pueda estar oculta, pero la conclusión es que actualmente no es posible, para personas que no sean Intel, escribir y probar algún microcódigo personalizado.

Si el "cifrado" no incluye una firma digital (asimétrica) y / o si la gente de Intel estropeó el sistema de protección de alguna manera, entonces puede ser concebible que algún esfuerzo notable de ingeniería inversa podría potencialmente permitir que uno produzca dicho microcódigo, pero, dada la aplicabilidad probablemente limitada (ya que la mayoría de las instrucciones están cableadas), es probable que esto no compre mucho, en lo que respecta a la potencia de programación.

 74
Author: Thomas Pornin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-06 18:05:59

Piense libremente en una máquina virtual o simulador donde, por ejemplo, qemu-arm puede simular un procesador arm en un host x86, idealmente el software que se ejecuta en el arm simulado no tiene idea de que no es un arm real. Lleva esta idea al nivel donde todo el chip está diseñado de tal manera que siempre parezca que eres un x86, el software nunca sabe que hay algunos elementos programables dentro del chip. Y que algún otro procesador dentro está algo diseñado con el propósito de implementar / simular un x86. Supuestamente, la popular línea de productos AMD 29000 simplemente desapareció porque el equipo de hardware y quizás el procesador / núcleo se convirtieron en las entrañas de un clon x86 temprano. Transmeta, donde Linus trabajaba, tenía un procesador vliw que fue hecho para ser un x86 de baja potencia. En ese caso, la capa de traducción no era (tanto de) un secreto. Vliw, palabra de instrucción muy larga, RISC llevado al extremo, es el tipo de cosa que se construye para este tipo de tarea.

No es tanto de un capa de emulación como estoy insinuando, no hay algún linux corriendo allí con un programa qemu dentro de cada chip. Está en algún lugar entre cableado donde no hay software / microcódigo en el medio y una emulación de golpe completo. Los bits programables pueden ser como un fpga, puertas programables, o puede ser software o máquinas de estado programables, lo que significa puertas no programables, solo lo que se ejecuta en las puertas es programable.

Sus procesadores de tipo hierro no x86, no grandes. Tome el BRAZO, por ejemplo, son cableado, sin microcódigo. Microcontroladores, PIC, MSP430, AVR, asumen que no están microcodificados. Básicamente no asumamos que todos los procesadores son microcodificados, pocas familias de procesadores lo son. Es solo que los que tratamos en pcs han sido y pueden seguir siendo, por lo que puede parecer que todos lo son.

Por divertido que pueda sonar jugar con este microcódigo, es probable que sea muy específico para la familia de procesadores, y es probable que nunca obtenga acceso a cómo funciona a menos que trabaje para Intel o AMD, cada uno de los cuales probablemente tienen sus propios internos. Por lo que tendría que conseguir un trabajo en uno de los dos, a continuación, trabajar su camino a través de las trincheras para convertirse en uno de lo que es probable que un equipo de élite que hace este trabajo. Y una vez que llegue tan lejos, su carrera está atrapada, sus habilidades pueden limitarse a un trabajo en una empresa. Es posible que te diviertas más programando GPU individuales en una tarjeta de video, algo que esté documentado o al menos tenga herramientas, algo que puedes hacer hoy sin pasar 10 años en AMD o Inteligencia para posiblemente llegar a ninguna parte.

 16
Author: old_timer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-06 19:38:40

Normalmente no escribes micro-código. Para ello se requiere un profundo conocimiento de la microarquitectura de la CPU. Intel no publica información general sobre su microarquitectura o su microcódigo.

 8
Author: Paul R,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-06 14:00:54