2009-10-25 5 views
10

En mode réel sur x86, quelles instructions faudrait-il utiliser pour exécuter le code sur un processeur différent, dans un système multiprocesseur?Exécution du code sur un processeur différent (assemblage x86)

(j'écris un code pré-démarrage en assembleur qui a besoin de mettre certains registres CPU, et le faire sur chaque CPU dans le système, avant le démarrage du système d'exploitation réelles.)

+1

Pouvez-vous même faire MP en mode réel? – Draemon

+0

aucune raison de ne pas. Il n'y a rien de spécifique au mode de MP. –

+1

On dirait une dupe de http://stackoverflow.com/questions/980999/what-does-multicore-assembly-language-look-like –

Répondre

9

Vous avez donc un programme autonome (vous avez dit "pré-démarrage"), comme un chargeur de démarrage, fonctionnant en mode réel? Et c'est sur un PeeCee avec le BIOS habituel?

Dans ce cas, un seul processeur est en cours d'exécution. Pour les autres unités CPU spin un système d'exploitation exécutons habituellement ce qu'on appelle l'algorithme de démarrage universel qui va comme ceci:

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 

Le BSP est le processeur d'amorçage. Un point d'accès est un processeur d'application. Un IPI est une interruption inter-processeur. Pour effectuer un IPI, vous devez activer l'APIC, une extension de contrôleur d'interruption de l'architecture du PC qui n'est pas activée au démarrage. C'est pourquoi le code s'inquiète du type de version ICU qu'il exécute. Tout ceci est une magie de noyau assez profonde. Vous pourriez essayer de regarder Linux, NetBSD, ou un autre code source * BSD pour un exemple, mais il ne sera pas facile à lire. Si vous gagnez vraiment, vous pourriez trouver un petit noyau ou un programme de test SMP autonome quelque part.

Pour plus d'informations, voir le Intel Multiprocessor Specification.

+0

Merci , c'est juste l'information dont j'ai besoin! Cela devrait être un défi ... –

Questions connexes