Pergunta

Em modo real em x86, o que instruções precisaria ser usado para executar o código em um processador diferente, em um sistema multiprocessador?

(Eu estou escrevendo um código pré-boot em assembler que as necessidades para definir certos registros de CPU, e fazer isso em cada CPU no sistema, antes da inicialização do sistema operacional reais).

Foi útil?

Solução

Então você tem um stand-alone (você disse "pré-boot") programa, como um bootloader, em execução no modo real? E isso é em um PeeCee com o BIOS normal?

Nesse caso, você tem apenas uma CPU em execução. A fim de spin-up as outras unidades de CPU de um sistema operacional normalmente executar o que é chamado o arranque universal algoritmo , que é a seguinte:

BSP sends AP an INIT IPI
BSP DELAYs (10mSec)
If (APIC_VERSION is not an 82489DX) {
  BSP sends AP a STARTUP IPI
  BSP DELAYs (200μSEC)
  BSP sends AP a STARTUP IPI
  BSP DELAYs (200μSEC)
}
BSP verifies synchronization with executing AP

O BSP é o processador de inicialização. Um AP é um processador de aplicação. Um IPI é uma interrupção inter-processador. Para fazer uma IPI, você precisa habilitar o APIC, uma extensão controlador de interrupção para a arquitetura PC que não está habilitado na inicialização. É por isso que o código está preocupado sobre que tipo de versão UTI ele está sendo executado. Tudo isso é magia do kernel bastante profundo. Você pode tentar olhar para Linux, NetBSD, ou outro código * source BSD para um exemplo, mas não vai ser fácil de ler. Se você realmente ganhar, você pode encontrar um autônomo programa de teste SMP pequena kernel ou lá fora em algum lugar.

Para obter mais informações, consulte o Intel multiprocessador especificação.

scroll top