Frage

In Realmodus auf x86, welche Anweisungen müßte genutzt werden, um den Code auf einem anderen Prozessor ausgeführt werden, in einem Multi-Prozessor-System?

(Ich bin einen 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.)

War es hilfreich?

Lösung

So können Sie ein eigenständiges haben (die Sie „Pre-Boot“) Programm, wie ein Bootloader, im Real-Modus laufen? Und das ist auf einem peecee mit dem üblichen BIOS?

In diesem Fall, dass Sie nur eine CPU laufen haben. Um die anderen CPU-Einheiten ein Betriebssystem zu Spin-up wird in der Regel ausführen, was heißt der universelle Start Algorithmus , 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. Eine AP ist ein Anwendungsprozessor. Ein IPI ist eine Unterbrechung zwischen Prozessoren. Um eine IPI zu tun, müssen Sie den APIC, eine Interrupt-Controller Erweiterung die PC-Architektur ermöglichen, die beim Booten nicht aktiviert ist. Aus diesem Grunde ist der Code besorgt darüber, welche Art von ICU-Version er läuft. All dies ist ziemlich tief Kernel Magie. Sie könnten versuchen, auf Linux, NetBSD oder andere * BSD-Quellcode für ein Beispiel suchen, aber es wird nicht gelesen leicht zu. Wenn Sie wirklich gewinnen, könnten Sie einen kleinen Kernel oder Standalone-SMP-Testprogramm irgendwo da draußen finden.

siehe

Für weitere Informationen, die Intel Multi-Prozessor-Spezifikation .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top