¿Cómo se inicializa una CPU al arrancar?

Gran pregunta!

Una región de memoria tiene contenido bien definido en el arranque. Ese contenido es un programa que gestiona el inicio. Puede ser un chip ROM conmutado frente a la RAM, o algún otro almacenamiento persistente.

Sus núcleos ahora se inicializan para comenzar a ejecutar ese programa. Normalmente, todos los procesadores comenzarán a ejecutar el mismo código (imagine que todos ejecutan la función principal en paralelo).

Múltiples opciones son posibles:

  1. Hay un procesador de arranque cableado que comienza en modo de ejecución; otras CPU están apagadas al principio.
  2. Cada CPU se inicia con un identificador único, y todas, excepto las que tienen una ID específica, se desactivan mediante software mediante interrupciones entre procesadores.
  3. Varias CPU compiten por convertirse en el procesador de arranque apagándose entre sí con interrupciones entre procesadores (funciona si solo los núcleos en ejecución pueden enviar interrupciones, y las interrupciones pendientes se borran cuando el núcleo se enciende o apaga).
  4. Los procesadores compiten por una cerradura. Debido al cableado y al sistema de caché, se sabe qué procesador ganará; el programa está escrito de tal manera que funciona con ese procesador (una vez construimos un chip como este, antes de que tuviéramos interrupciones entre procesadores)

Si ahora se encuentra en una situación en la que todos los procesadores, excepto uno, están apagados, puede cargar cualquier código y estructura de datos que necesite y luego reactivar los otros núcleos con más interrupciones entre procesadores. Análogamente para la cerradura.

Si tiene un diseño más avanzado, cada núcleo puede tener su propio programa. Luego, por ejemplo, puede cargar un sistema operativo desde varios discos en paralelo o cargar múltiples sistemas operativos, sin perder tiempo en la inicialización de los núcleos.