[Nota: esta resposta visa especificamente a edição recente e, de outra forma, não contribui para as várias respostas sonoras que já foram publicadas.]
Portanto, reiterar: microcódigo (pelo menos para uma primeira aproximação) é um tipo específico de firmware.
"Microcódigo" é, neste contexto, apenas marketing sobre "firmware do processador".
Bem, não é marketing. Comercialização teria chamado XBoost Pro (TM) ou algo assim. Pelo contrário, é um termo de engenharia; se você projetar CPUs, a distinção entre o microcódigo e o outro firmware da CPU (e o tipo de firmware típico de outros dispositivos) é importante para você. Se não, provavelmente não é.
Se você cria placas-mãe ou escreve sistemas operacionais, provavelmente usa a "atualização de microcódigo" como atalho para a "atualização de firmware da CPU" mais pesada e menos familiar. A maioria das atualizações de firmware da CPU afeta principalmente o microcódigo, por isso é suficientemente próximo da mesma coisa. Você provavelmente sabe a diferença, mas não precisa se preocupar com isso.
O usuário final não precisa saber ou se preocupar com a diferença e, em um mundo ideal, nunca ouviria a palavra "microcódigo".
Eu acho que isso chamou sua atenção na cobertura da imprensa sobre as recentes vulnerabilidades especulativas de execução, embora você também possa ter ouvido isso antes em um contexto que tornou mais óbvio que você não precisava se preocupar. Essas vulnerabilidades foram lançadas mais cedo do que o planejado, o que pode resultar na cobertura da imprensa com menos curadoria do que poderia ter sido. Do ponto de vista do usuário final, você precisa instalar atualizações do BIOS, atualizações do sistema operacional e, em alguns casos, atualizações de aplicativos; você não precisa saber nem se importar se algum deles inclui um novo microcódigo.
Assim, mesmo percebendo que você provavelmente não precisa saber ou se importar, você ainda pode estar interessado por pura curiosidade: como você pode distinguir microcódigo de outro firmware?
Bem, a primeira coisa a reconhecer é que não existe necessariamente uma definição única e rápida, é mais uma situação de Bleggs e Rubes . Ainda assim, há algumas coisas que podemos dizer sobre microcódigo:
O microcódigo geralmente é executado dentro de uma CPU e não em uma CPU. Essa é a visão de alto nível.
A arquitetura do microcódigo normalmente parece bastante diferente da arquitetura do código comum, incluindo o firmware comum. É provável que seja altamente paralelo e seja implementado muito mais próximo do hardware. Várias das respostas existentes (incluindo sua própria resposta) discutem isso, embora seja necessário observar que os detalhes podem variar dependendo do design da CPU.
Embora o hardware geralmente seja projetado para executar apenas o firmware fornecido pelo fabricante, não é incomum o uso de firmware de terceiros - embora provavelmente invalide a garantia! O microcódigo de terceiros é muito mais raro, embora eu acredite que, nos tempos antigos (estou falando de quando uma CPU tinha o tamanho de uma caixa de pão), alguns usuários finais modificariam o microcódigo em suas CPUs. Até onde eu sei, isso não é possível no tipo de CPUs usadas em PCs.
O microcódigo geralmente traduz ou ajuda a implementar uma arquitetura de conjunto de instruções públicas, ou seja, executa o código da máquina que o designer do sistema operacional e os programadores de aplicativos usam. Mais sobre isso na próxima seção.
"Execução versus dados" muitas respostas usam esse paradigma
De maneiras confusas e diferentes, receio, mas abordarei meu próprio comentário. Esta seção também serve para expandir o último marcador acima. O objetivo aqui é tentar distinguir entre o trabalho que uma CPU está realizando (alcançado por uma combinação de hardware e microcódigo) e o trabalho que um dispositivo típico está realizando (alcançado por uma combinação de hardware e firmware). Vou escolher uma unidade de disco rígido SATA.
A unidade SATA segue as instruções do computador, seguindo as linhas de "leia os dados do setor 5.123" e "grave esses dados no setor 1.321". O firmware da unidade é responsável por fazer com que o hardware faça isso acontecer, e normalmente é um código bastante comum sendo executado em algum tipo de CPU embutida. As instruções da unidade chegam seqüencialmente, embora possam não ser processadas na ordem em que chegam. Essas instruções não são um programa, são enviadas por um programa em execução na CPU principal. Em particular, não há fluxo de controle, ou seja, nenhuma instrução para informar à unidade SATA quais instruções executar a seguir.
A CPU está encarregada do computador. Após concluir a inicialização, ele executa as instruções ("código da máquina") fornecidas pela placa-mãe (BIOS, outro tipo de firmware) que o direcionam para executar o código da máquina fornecido pelo sistema operacional que o instrui a executar o código da máquina fornecido por fornecedores de aplicativos. A própria CPU recupera o código da máquina da EEPROM (no caso do BIOS) ou RAM (no caso do sistema operacional e dos aplicativos). Em particular, o código da máquina possui um fluxo de controle: o código da máquina informa à CPU qual código da máquina executar a seguir. Você pode repetir o mesmo código de máquina repetidamente, executar diferentes bits de código, dependendo dos dados em que o código está trabalhando - as instruções em um idioma da interface do dispositivo, como o código SATA, podem executar um conjunto limitado de tarefas simples, mas o código da máquina pode Fazqualquer coisa . (Veja também Turing Completeness .)
Poderíamos reescrever esse ponto final acima: microcódigo geralmente implementa uma linguagem Turing Complete; firmware comum geralmente não.
O que significa dizer "instruções de hardware são interpretadas" com microcódigo.
Verdadeiro, mas provavelmente confuso; o ponto importante é a distinção entre código de máquina, que possui um fluxo de controle e é Turing Complete, e as instruções definidas por uma interface de dispositivo como SATA, que não tem e não é.
O "microcódigo" se aplica ao código executado nas placas de som
Não, as placas de som recebem instruções, não códigos, assim como as unidades SATA. As instruções podem ser como "reproduzir A sharp" ou "interpretar esses dados como uma forma de onda e reproduzi-los". Ainda é muito simples.
e placas de vídeo (GPUs)?
Placas de vídeo antiquadas (aquelas sem GPUs) são iguais às unidades SATA. As instruções são como "defina este pixel para esta cor" ou "escreva um A para esta posição".
... As GPUs são complicadas e ficam em algum lugar entre os dois mundos que tentei descrever acima. Provavelmente é mais simples pensar neles como um computador especializado localizado dentro do computador principal, que possui suas próprias CPUs. É verdade que dispositivos como unidades SATA também possuem CPUs incorporadas, mas a diferença é que a CPU incorporada em uma unidade SATA executa apenas o código fornecido pelo fabricante da unidade, enquanto as GPUs também executam o código fornecido pelo sistema operacional e / ou fornecedor do aplicativo. Realmente, essa é uma questão totalmente separada.
TL; DR: microcódigo é um tipo específico de firmware, que ajuda o hardware a implementar um conjunto de instruções Turing Complete.