говоря на очень низком уровне, как инициализируются ядра?
как загружаются многоядерные процессоры?
Ответы (2)
вы можете ознакомиться со всеми кровавыми подробностями в спецификации Intel. Кровавые подробности в главе 8.1.
Вот отрывок:
После включения питания или подтверждения контакта RESET# каждый процессор на системной шине выполняет аппаратную инициализацию процессора (известную как аппаратный сброс) и дополнительную встроенную самопроверку (BIST). [snip] На данный момент предпринимаемые действия зависят от семейства процессоров:
• Процессоры семейства P6 — все процессоры на системной шине (включая один процессор в однопроцессорной системе) выполняют протокол многопроцессорной инициализации (MP) через шину APIC. Процессор, выбранный с помощью этого протокола в качестве процессора начальной загрузки (BSP), сразу же начинает выполнять код инициализации программного обеспечения в текущем сегменте кода, начиная со смещения в регистре EIP.
Существует несколько способов загрузки многоядерного процессора в зависимости от архитектуры, системы — AMP или SMP и т. д. Один из простых способов для двухъядерной системы SMP заключается в том, что CPU0 запускается с вектором сброса (например, 0x00000000, который указывает на флэш-память, где хранится программа мониторинга загрузки) . В это время другие ядра находятся в состоянии WFI (ожидание прерывания) или в состоянии задержки загрузки. CPU0 загружается и устанавливает основу для загрузки CPU1.
для получения дополнительной информации http://www.linux-arm.org/LinuxBootLoader/SMPBoot
freescale.com/files/32bit/doc/app_note/AN3542.pdf