Pregunta

En modo real en x86, ¿qué instrucciones deberían usarse para ejecutar el código en un procesador diferente, en un sistema multiprocesador?

(Estoy escribiendo un código previo al arranque en el ensamblador que necesita establecer ciertos registros de CPU, y hacer esto en cada CPU del sistema, antes de que se inicie el sistema operativo real).

¿Fue útil?

Solución

¿Entonces tiene un programa independiente (usted dijo "pre-boot", como un gestor de arranque, que se ejecuta en modo real? ¿Y esto está en un PeeCee con el BIOS habitual?

En ese caso, solo tiene una CPU en ejecución. Para activar las otras unidades de CPU, un sistema operativo generalmente ejecutará lo que se llama el algoritmo de inicio universal que es así:

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

El BSP es el procesador de arranque. Un AP es un procesador de aplicaciones. Un IPI es una interrupción entre procesadores. Para hacer un IPI, debe habilitar el APIC, una extensión del controlador de interrupción a la arquitectura de la PC que no está habilitada en el arranque. Es por eso que el código está preocupado por el tipo de versión de ICU que está ejecutando. Todo esto es una magia del núcleo bastante profunda. Puede intentar mirar Linux, NetBSD u otro código fuente * BSD como ejemplo, pero no será fácil de leer. Si realmente gana, puede encontrar un kernel pequeño o un programa de prueba SMP independiente en algún lugar.

Para obtener más información, consulte la Especificación de multiprocesador Intel .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top