2009-10-25 6 views
10

Welche Anweisungen müssten im Realmodus auf x86 verwendet werden, um den Code auf einem anderen Prozessor in einem Multiprozessorsystem auszuführen?Ausführungscode auf anderem Prozessor (x86-Assembly)

(Ich bin einig Pre-Boot-Code in Assembler schreiben, die bestimmte CPU-Register einstellen muss, und dies in dem System auf jede CPU tun, vor dem eigentlichen Betriebssystem bootet.)

+1

Können Sie MP im Real-Modus sogar tun? – Draemon

+0

kein Grund nicht zu. Es gibt nichts Modus-spezifisch über MP. –

+1

Sieht aus wie ein Betrüger von http://stackoverflow.com/questions/980999/what-does-multicore-assembly-language-look-like –

Antwort

9

So haben Sie ein Stand-Alone-Programm (Sie sagte "Pre-Boot"), wie ein Bootloader, im Real-Modus ausgeführt? Und das ist auf einem PeeCee mit dem üblichen BIOS?

In diesem Fall läuft nur eine CPU. Um die anderen CPU-Einheiten ein Betriebssystem zu Spin-up wird in der Regel ausführen, was heißt den universellen Startalgorithmus, die so geht:

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 

Das BSP ist der Boot-Prozessor. Ein AP ist ein Anwendungsprozessor. Ein IPI ist ein Interprozessor-Interrupt. Um eine IPI durchzuführen, müssen Sie den APIC aktivieren, eine Interrupt-Controller-Erweiterung für die PC-Architektur, die beim Booten nicht aktiviert ist. Aus diesem Grund macht sich der Code Gedanken darüber, welche Art von ICU-Version er ausführt. All dies ist eine ziemlich tiefe Kernel-Magie. Sie könnten versuchen, Linux, NetBSD oder anderen * BSD-Quellcode als Beispiel zu betrachten, aber es wird nicht einfach zu lesen sein. Wenn Sie wirklich gewinnen, finden Sie irgendwo einen kleinen Kernel oder ein eigenständiges SMP-Testprogramm. Weitere Informationen finden Sie in der Intel Multiprocessor Specification.

+0

Danke Das sind nur die Informationen, die ich brauche! Dies sollte eine Herausforderung sein ... –