Собственно как это реализуется на низком уровне? В мой однопоточный моск это не помещается Уточняю вопрос: скажем, есть у нас система. Система запускает, скажем, две задачи. Как сделать так, чтобы они попали на разные ядра/процессоры. Умом чую, что без APIC'а здесь не обошлось, но ума явно не хватает
Как это сделать в Win - другой вопрос... Меня интересует, как это реализовано... Например что-то типа простейшего примера a la Зубков - из-под DOS'а установить PM, запустить две задачи на разных процах/ядрах, выйти в RM (ну, это необязательно )
Читай мануалы Intel-а , 3-й том, а еще Intel MultiProcessor Specification. Вкратце дело обстоит так: операционка грузится одним процессором, остальные в это время находятся в halt-состоянии. Потом этот процессор посылает остальным STARTUP или INIT прерывания. В первом случае начальный адрес (точнее,его часть) указывается в прерывании. Во втором в CMOS память по адресу 0Fh пишется 0Ah и адрес инициализационного кода в 40:67h (типа это горячая перезагрузка) и процессор получает сигнал INIT.И так каждый процессор конфигурируется, переходит в РМ. А потом уже процессоры посылают друг другу межпроцессорные прерывания. Планировщик может работать на одном процессоре,и решив, что задачу нужно запустить на другом процессоре, посылает тому прерывание. А обработчик прерывания запускает задачу.
APIC изучи + примеры инициализации BSP и AP в SMP-системах в интеловских мануалах -- озарение не заставит себя долго ждать.