Итак, у вас есть отдельная (вы сказали «предзагрузочная») программа, как загрузчик, работающая в реальном режиме? И это на 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 .