Como o microcódigo é carregado no processador?

4

Eu li que o microcódigo é carregado no processador em cada reinicialização. Ele reside na memória flash e quando a máquina é inicializada, ela é copiada para a CPU. Ou, no caso do Linux, o próprio SO tem a cópia do microcódigo para o processador. Mas como o microcódigo é copiado para o processador? Todos os dados são movidos em um computador pelo consentimento da CPU. A CPU recebe instruções em linguagem de máquina. Como o microcódigo é imprescindível para a execução dessas instruções de linguagem de máquina, sem que o microcódigo esteja presente no processador, como a instrução para acessar a memória flash e fazer as operações subsequentes é feita pela CPU? Isso significa que instruções não microcodificadas com fio copiam o microcódigo em modo real?

    
por Kraken 01.07.2015 / 23:53

4 respostas

6

I read that microcode is loaded in the processor on each reboot.

O BIOS pode emitir uma atualização de microcódigo durante a inicialização. Então, pode o sistema operacional.  Freqüentemente essas atualizações são necessárias, especialmente com processadores Intel posteriores.

It resides on flash memory and when the machine is booted, it gets copied to the CPU. Or in the case of Linux, the OS itself has the microcode copy for the processor. But how does the microcode get copied to the processor?

Modern Intel e CPUs têm um mecanismo chamado "Model Specific Registers", e instruções especiais de CPU para ler (RDMSR) e escrever para eles (WRMSR). Embora esses registros afetem as configurações da CPU, gravar em uma específica com o endereço do novo microcódigo diz à CPU para ler uma região de memória e aplicar sobre o microcódigo existente.

All data moves in a computer by the consent of the CPU. CPU is given instructions in machine language. As microcode is imperative for execution of these machine language instructions, so without the microcode being present in the processor, how the instruction for accessing the flash memory and doing the consequent operations are done by CPU?

Existe sempre um microcódigo. O mecanismo acima atualiza o microcódigo. A Intel / AMD realmente não publica detalhes sobre como funciona, eles apenas fornecem um mecanismo de atualização. Obviamente, de alguma forma, está copiando um microcódigo da ROM para algum tipo de memória interna do processador. Mas existe algum microcódigo quando a CPU é iniciada. Alguns processadores recentes da Intel e possivelmente da AMD não funcionarão de forma confiável após a inicialização sem uma atualização de microcódigo feita pela BIOS, mas, evidentemente, funcionarão bem o suficiente para executar uma atualização inicial do microcódigo.

Does this mean that hard-wired non-microcoded instructions copy the microcode in real mode?

A configuração inicial do microcódigo é feita internamente pela CPU e nenhuma instrução é executada para conseguir isso. É configurado antes que a primeira instrução da CPU seja executada.

Para atualizar o BIOS, as instruções apropriadas de RDMSR e WRMSR devem ser executadas.

Referência : "Esta instrução deve ser executada no nível de privilégio 0 ou no modo de endereço real; uma exceção de proteção geral #GP (0) será gerada. " Se não for executado em modo real, deve ser feito no anel 0 ou no modo kernel. Você pode atualizar o microcódigo a qualquer momento.

    
por 20.04.2017 / 23:24
8

CPUs modernas vêm com microcódigo completo já instalado. Este microcódigo reside em uma área ROM especial na própria CPU e não pode ser alterado / apagado. Assim, a CPU pode funcionar fora da caixa.

O BIOS do sistema e / ou o sistema operacional podem então iniciar o carregamento de um microcódigo atualização na CPU. Tal atualização é não um microcódigo completo, mas sim um pequeno patch para corrigir bugs. A CPU contém uma pequena área de RAM volátil para esse propósito.

Uma referência útil: link

    
por 02.07.2015 / 01:34
3

A questão é mal formulada. Existem muitos "microcodes" no CPU x86 / IA64 moderno, e existe uma diferença entre "patch de microcódigo" e microcódigo.

O microcódigo em seu entendimento clássico (como elementos passo a passo de execução de longas instruções de CPU) é quase certamente esculpido em silício, já que não há razão para manter bugs não corrigidos ao longo de muitas gerações de CPU, quando novos silício / RTL é compilado com cada novo nó de fabricação.

No entanto, todas as CPUs recentes possuem várias unidades internas que são controladas por microprocessadores independentes que estão embutidos no chip da CPU x86.

O mais notável / conhecido é o chamado " P-unit ", um processador que controla o gerenciamento dinâmico de energia da CPU. À medida que as frequências do núcleo aumentam e o vazamento aumenta com a miniaturização adicional dos transistores da CPU, a única maneira de manter a energia em um limite razoável é por meio do afogamento agressivo do clock e do gate dinâmico de energia. O problema é que a CPU pode executar infinitas variedades de códigos de software, e cada um atinge um certo pico de consumo de energia. Alguns padrões de "vírus de energia" podem não ser conhecidos no momento em que a CPU foi finalizada para o varejo, e alguns parâmetros de gerenciamento de algoritmos devem ser corrigidos. Isso é feito através de "patches de microcódigo" dedicados.

Existem vários outros microprocessadores deste tipo que controlam outros blocos de CPU como gráficos e memória.

Os detalhes do processo de correção são altamente sigilosos, para evitar interferência maliciosa. Aqui está algum relatório do hacker sobre a tentativa de fazer engenharia reversa do mecanismo.

Em suma, o microcódigo da arquitetura x86 não é carregado em CPUs modernas, mas os microcódigos para vários microprocessadores embarcados auxiliares podem ter patches.

    
por 22.01.2017 / 23:19
1

A atualização do microcódigo é um patch somente para o microcódigo da CPU existente que é gravado permanentemente na ROM. A CPU tem uma ROM permanente e um patch RAM que pode conter um novo código. Há também uma tabela de valores "match" que está na RAM. Esta tabela tem uma entrada para cada parte patchable da ROM. Quando a CPU executa uma instrução patchable, ela verifica essa tabela. Se houver uma entrada, ela usa o código na RAM. Se tiver o valor padrão, ele irá para a ROM. Portanto, para corrigir a CPU, é necessário fazer o upload do novo código para a RAM e, em seguida, modificar as entradas da tabela de correspondências adequadamente. O procedimento para fazer isso é aproximadamente o seguinte:

  1. Limpe o EAX, leia a assinatura do processador atual usando CPUID e carregue a atualização do microcódigo correspondente na memória do kernel.

  2. Limpe o EAX e o EBX e leia a revisão atual do microcódigo usando a instrução RDMSR do registro específico da correspondência de revisão.

  3. Escreva o endereço de memória da atualização do microcódigo usando a instrução WRMSR para o registro específico da correspondência de atualização.

  4. Leia a nova revisão do microcódigo e retorne o sucesso se corresponder ao da atualização. Caso contrário, retorne a falha.

Nos sistemas operacionais baseados em Linux, esse processo é feito na inicialização por um módulo específico do kernel chamado "microcode". Você pode ler o código-fonte deste módulo para ver o processo exato.

Observe que os arquivos de correção têm um cabeçalho documentado, mas os próprios dados de correção, o código real, são criptografados por uma chave secreta que é codificada no processador. A menos que você conheça essa chave, você não teria como escrever seus próprios patches.

    
por 08.01.2018 / 05:47