как загружаются многоядерные процессоры?

говоря на очень низком уровне, как инициализируются ядра?


person Ahmed Khalaf    schedule 30.10.2010    source источник
comment
Мне также было бы интересно узнать, как ОС изначально (на аппаратном уровне) определяет количество ядер/пакетов/логических процессоров.   -  person PhiS    schedule 30.10.2010
comment
@PhiS: он просто спрашивает. посмотри процессор...   -  person Bahbar    schedule 31.10.2010
comment
@Bahbar CPUID не предоставляет всю необходимую информацию, если в системе присутствует более одного физического пакета, потому что вы получаете информацию только на уровне пакета (сколько ядер / процессоров журнала в пакете).   -  person PhiS    schedule 31.10.2010
comment
@PhiS: Для пакетов это похоже на игру методом проб и ошибок. Проверьте Приложение D в спецификации в моем ответе, чтобы узнать, как Intel рекомендует это делать (пример здесь для двойных пакетов). На шагах с 14 по 16 он ожидает, пока удаленный пакет проснется и ответит.   -  person Bahbar    schedule 31.10.2010
comment
@Bahbar - да, теперь я это вижу; спасибо за эту информацию.   -  person PhiS    schedule 01.11.2010
comment
@PhiS, на компьютерах с архитектурой x86_64 существует таблица дескрипторов, изначально сохраняемая в памяти при загрузке по определенному адресу физической памяти, которая содержит сведения о настройке ЦП. Она называется таблицей мультизагрузки и подробно описана в спецификации, которую вы можете получить от Intel. Таблица содержит расположение процессоров и информацию о контроллерах прерываний LAPIC и IOAPIC. Затем ЦП загружаются в соответствии с протоколом, вызывая прерывания от процессора Boostrap к другому ЦП. Это очень зависит от платформы, и все типы процессоров работают по-разному.   -  person exDM69    schedule 11.08.2012
comment
@ exDM69 - спасибо, это хорошая информация!   -  person PhiS    schedule 14.08.2012


Ответы (2)


вы можете ознакомиться со всеми кровавыми подробностями в спецификации Intel. Кровавые подробности в главе 8.1.

Вот отрывок:

После включения питания или подтверждения контакта RESET# каждый процессор на системной шине выполняет аппаратную инициализацию процессора (известную как аппаратный сброс) и дополнительную встроенную самопроверку (BIST). [snip] На данный момент предпринимаемые действия зависят от семейства процессоров:

• Процессоры семейства P6 — все процессоры на системной шине (включая один процессор в однопроцессорной системе) выполняют протокол многопроцессорной инициализации (MP) через шину APIC. Процессор, выбранный с помощью этого протокола в качестве процессора начальной загрузки (BSP), сразу же начинает выполнять код инициализации программного обеспечения в текущем сегменте кода, начиная со смещения в регистре EIP.

person Bahbar    schedule 30.10.2010

Существует несколько способов загрузки многоядерного процессора в зависимости от архитектуры, системы — AMP или SMP и т. д. Один из простых способов для двухъядерной системы SMP заключается в том, что CPU0 запускается с вектором сброса (например, 0x00000000, который указывает на флэш-память, где хранится программа мониторинга загрузки) . В это время другие ядра находятся в состоянии WFI (ожидание прерывания) или в состоянии задержки загрузки. CPU0 загружается и устанавливает основу для загрузки CPU1.

для получения дополнительной информации http://www.linux-arm.org/LinuxBootLoader/SMPBoot

freescale.com/files/32bit/doc/app_note/AN3542.pdf

person x19x    schedule 30.01.2013