2009-10-25 4 views
10

В реальном режиме на x86, какие инструкции необходимо использовать для запуска кода на другом процессоре в многопроцессорной системе?Запуск кода на другом процессоре (сборка x86)

(Я пишу некоторые предзагрузочной код на ассемблере, который должен установить определенные регистры процессора, и делать это на каждом процессоре в системе, до фактической загрузки операционной системы.)

+1

Можете ли вы сделать MP в реальном режиме? – Draemon

+0

нет причина не делать. В MP нет ничего особенного. –

+1

Похож на обман http://stackoverflow.com/questions/980999/what-does-multicore-assembly-language-look-like –

ответ

9

Так у вас есть автономно (вы сказали «pre-boot»), как загрузчик, работающий в реальном режиме? И это на PeeCee с обычным BIOS?

В этом случае у вас работает только один процессор. Для того, чтобы закрутить вверх другие блоки процессора операционной системы, как правило, выполнить то, что называется универсальный алгоритм запуска который идет как это:

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 

BSP является загрузка процессора. AP является прикладным процессором. IPI - это межпроцессорное прерывание. Чтобы сделать IPI, вам необходимо включить APIC, расширение контроллера прерываний для архитектуры ПК, которое не включено при загрузке. Вот почему код беспокоится о том, какая версия ICU работает. Все это довольно глубокая ядерная магия. Вы можете попробовать посмотреть на Linux, NetBSD или на другой исходный код BSD для примера, но читать его будет непросто. Если вы действительно выиграете, вы можете найти небольшое ядро ​​или отдельную тестовую программу SMP где-то там.

Для получения дополнительной информации см. Intel Multiprocessor Specification.

+0

Спасибо , это просто информация, которая мне нужна! Это должно быть проблемой ... –

 Смежные вопросы

  • Нет связанных вопросов^_^