2013-01-10 20 views

risposta

7

si desidera leggere l'APIC locale, che si può leggere su in "Volume 2 bis":

http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html

Ogni processore ha un corrispondente APIC locale, in ogni APIC locale v'è un registro APIC ID , a cui viene assegnato un valore univoco all'avvio del sistema.

Il nucleo iniziale che viene in linea è chiamato processore di bootstrap (BSP) e può effettivamente essere un nucleo fisico sul die. Maggiori informazioni sono in "volume 3a", dove si parla del processo di selezione del processore di bootstrap.

Ecco un estratto da vol3a:

8.4.1 BSP ed AP Processori

Il protocollo di inizializzazione MP definisce due classi di processori: il processore bootstrap (BSP) ei processori applicativi (AP). Dopo un power-up o RESET di un sistema MP, l'hardware di sistema seleziona dinamicamente uno dei processori sul bus di sistema come BSP. I processori rimanenti sono designati come AP.

Come parte del meccanismo di selezione BSP, il flag BSP è impostato nel MSR IA32_APIC_BASE (vedere la Figura 10-5) del BSP, a indicare che si tratta del BSP. Questo flag è cancellato per tutti gli altri processori.

Il BSP esegue il codice di boot-strap del BIOS per configurare l'ambiente APIC, imposta strutture dati a livello di sistema e avvia e inizializza gli AP. Quando BSP e AP vengono inizializzati, il BSP inizia quindi a eseguire il codice di inizializzazione del sistema operativo.

1

Dipende dall'architettura del processore stesso. Non c'è davvero uno standard per qualcosa di simile. Ad esempio, il core PS3 ha 9 core uno che pianifica i compiti verso l'altro 8. In questo caso è giusto pensarci in termini di quella singola istruzione di elaborazione prima dell'altra 8. Per quanto riguarda gli altri processori, questo è un cosa più difficile da discernere. Sarebbe ragionevole presumere che il bootloader invii le sue istruzioni al set di core, a quel punto qualunque logica gates assegni le istruzioni ai core lo facciano in qualsiasi modo essi facciano sempre. Nella maggior parte dei casi, so che non c'è davvero alcuna differenza tra la pianificazione delle attività all'avvio e in qualsiasi altro momento. L'hardware di pianificazione delle attività più semplice selezionerà solo il primo nucleo disponibile, che di solito è considerato il "primo" dalla macchina. Ma come continuo a dire che macchine diverse lo fanno in modo diverso, quindi suggerirei di scoprire quale nucleo si sta utilizzando e di controllare quello che fa. In bocca al lupo.

+0

Grazie per le informazioni. Hai detto "qualsiasi nucleo è considerato il" primo "dalla macchina" - c'è un modo per scoprire il core/cpuid attuale usando alcuni codici asm? In modo che io possa eseguire quel codice asm molte volte e scoprire tutte le coreidi/CPU? Ho il core 2 duo. Il mio obiettivo è scoprire la CPU di tutti i core al suo interno a livello di bootloader. Come posso farlo? –

+1

hmmm ... dall'aspetto delle cose, cpuid può solo parlarvi del processore stesso, non dei core in esso contenuti.Per sapere quale core all'interno di un processore ci si trova mentre il comando viene eseguito sembra una vera sfida. Questo è un link alle pagine di dati del core che stai utilizzando. Questo è il posto dove iniziare a cercare informazioni del genere: http://www.intel.com/design/core2duo/documentation.htm – usumoio

0

Ogni processore ha la propria APIC locale con relativo ID APIC locale, questo può essere letto dal registro APIC locale (la stessa che dà ID diverso per ogni processore)