Кусок третьего тома intel IA-32 Intel® Architecture Software Developer’s Manual.
Кусок третьего тома intel IA-32 Intel® Architecture Software Developer’s Manual. Очень заинтересовал меня с точки зрения начальной загрузки компьютера и определения количества процессоров.
Часть. 3 7-19
7.5.4.1. ТИПИЧНАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ ИНИЦИАЛИЗАЦИИ BSP
После того, как BSP и APs были выбраны (посредством аппаратного протокола, см. Раздел 7.5.3., “Алгоритм Протокола Инициализации MP для Процессоров Intel Xeon”), BSP начинает выполняет загрузочный код (POST) с нормального для архитектуры IA-32 начального адреса (FFFF FFF0H).
Загрузочный код обычно выполняет следующие операции:
1. Инициализирует память.
2. Загружает коррекцию микропрограммы в процессор.
3. Инициализирует MTRRs.
4. Включает кеш.
5. Выполняет инструкцию CPUID с величиной 0H в регистре EAX, затем читает EBX, ECX, и регистры EDX, чтобы определить, что BSP действительно - “GenuineIntel”
6. Выполняет инструкцию CPUID с величиной 1H в регистре EAX, затем сохраняет значение EAX, ECX, и EDX в системном пространстве конфигурации в RAM для использования позже.
7. Загружает код запуска AP для выполнения в 4-х Кб'ную страницу в первом мегабайте памяти.
8. Переключается в protected mode и следит, чтобы пространство адреса APIC отображалось в строго некешируемую память (UC).
9. Определяет BSP’s APIC ID из локального регистра APIC ID (default - 0):
MOV ESI, APIC_ID | ; адрес локального APIC ID регистра | |
MOV EAX, [ESI] | ||
AND EAX, 0FF000000H | ; обнуляем все биты кроме APIC | |
MOV BOOT_ID, EAX | ; сохраняем в памяти |
7-20 Vol. 3
МНОГОПРОЦЕССОРНОЕ УПРАВЛЕНИЕ
APIC ID сохраняется в таблицах ACPI и MP и дополнительно в системном конфигурационном пространстве в RAM.
10. Преобразовывает базовый адрес 4-х килобайтной страницы для загрузочного кода AP в 8-битный вектор.
8-битный вектор определяет адрес 4-х килобайтной страницы в адресном пространстве реального режима (пространство 1-го мегабайта). Например, вектор 0BDH определяется в загрузочной памяти как 000BD000H.
11. Включает локальный APIC, устанавливая единицу в восьмом бите случайного векторного регистра APIC (SVR).
MOV ESI, SVR | ; адрес SVR | |
MOV EAX, [ESI] | ||
OR EAX, APIC_ENABLED | ; устанавливаем бит 8 в 1 (после reset он равен 0) | |
MOV [ESI], EAX |
12. Устанавливает обработку ошибок входа LVT устанавливая 8-битный вектор для хэндлера ошибок APIC.
MOV ESI, LVT3 | ||
MOV EAX, [ESI] | ||
AND EAX, FFFFFF00H | ; обнуляем предыдущий вектор | |
OR EAX, 000000xxH | ; где xx - 8-битный вектор хэндлера ошибок APIC | |
MOV [ESI], EAX |
13. Инициализирует переменную Lock Semaphore как СВОБОДНУЮ путем записи в нее 00H. APs использует этот семафор, для определения порядка выполнения инициализации BIOS AP.
14. Выполняет следующие действия, для установки BSP, с целью обнаруживать присутствие APs в системе и количество процессоров:
— Устанавливает переменную COUNT в 1.
— Запускает таймер (устанавливая приблизительный интервал в 100 милисекунд). В коде инициализации BIOS AP, AP увеличивает переменную COUNT, чтобы показать свое присутствие.
Когда время истекает, BSP проверяет величину переменной COUNT. Если время истекло, а переменная COUNT не была увеличина, APs не присутствуют или произошла ошибка.
Vol. 3 7-21
МНОГОПРОЦЕССОРНОЕ УПРАВЛЕНИЕ
15. Транслирует последовательность INIT-SIPI-SIPI IPI на APs, для их запуска и инициализации:
MOV ESI, ICR_LOW | ; загружаем адрес младшего слова ICR в ESI | |
MOV EAX, 000C4500H | ; загружаем ICR в EAX для передачи INIT IPI | |
; всем APs | ||
MOV [ESI], EAX | ; передаем INIT IPI всем APs | |
; в цикле с задержкой в 10-миллисекунд | ||
MOV EAX, 000C46XXH | ; загружаем ICR в EAX для передачи SIPI IP | |
; всем APs, где xx - вектор, вычисляемый в 10 этапе | ||
MOV [ESI], EAX | ; передаем SIPI IPI всем APs | |
; в цикле с задержкой 200-микросекунд | ||
MOV [ESI], EAX | ; передаем повторно SIPI IPI всем APs | |
; в цикле с задержкой 200-микросекунд | ||
MOV EAX, 000C46XXH | ; загружаем ICR в EAX для передачи SIPI IP | |
; всем APs, где xx - вектор, вычисляемый в 8 этапе |
16. Ждёт прерывание по таймеру.
17. Читает переменную COUNT и вычисляет количество процессоров.
18. Если необходимо, перестраивает APIC и продолжает остальную системную диагностику.
Август 5th, 2022 - 12:50
https://cloud.mail.ru/public/MVFM/Yt9GmeySa — перевод Intel 64 and IA-32 Architectures Software Developer’s Manual
Август 8th, 2022 - 10:57
Спасибо