Domanda

In modalità reale su x86, quali istruzioni dovrebbero essere utilizzate per eseguire il codice su un altro processore, in un sistema multiprocessore?

(p
È stato utile?

Soluzione

Quindi hai un programma autonomo (hai detto " pre-boot "), come un bootloader, che funziona in modalità reale? E questo è su un PeeCee con il solito BIOS?

In quel caso hai solo una CPU in esecuzione. Per far girare le altre CPU un sistema operativo eseguirà in genere quello che viene chiamato l'algoritmo di avvio universale che va così:

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

Il BSP è il processore di avvio. Un AP è un processore di applicazioni. Un IPI è un interrupt tra processori. Per eseguire un IPI, è necessario abilitare l'APIC, un'estensione del controller di interruzione per l'architettura PC che non è abilitata all'avvio. Ecco perché il codice è preoccupato per quale tipo di versione di ICU è in esecuzione. Tutto questo è una magia del kernel abbastanza profonda. Potresti provare a guardare Linux, NetBSD o altro codice sorgente * BSD per un esempio, ma non sarà facile da leggere. Se vinci davvero, potresti trovare un piccolo kernel o un programma di test SMP autonomo da qualche parte.

Per ulteriori informazioni, consultare le Specifiche Intel multiprocessore .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top