Записки программиста Программирование и не только

25Авг/092

Кусок третьего тома 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 и продолжает остальную системную диагностику.

Комментарии (2) Пинги (0)
  1. https://cloud.mail.ru/public/MVFM/Yt9GmeySa — перевод Intel 64 and IA-32 Architectures Software Developer’s Manual


Leave a comment

Trackbacks are disabled.