 |
 |
Начальная инициализация MPS |
 |
Начальная инициализация многопроцессорной системы выполняется в контрольной точке 07h. (Здесь и далее имеется в виду процедура POST для AMIBIOS v6.x/v7.x)
С0 |
Program BSP APIC as Virtual Wire mode |
 |
 |
 |
Настройка регистров стартового процессора
Согласно спецификации мультипроцессорных систем подключение в режиме Virtual Wire подразумевает настройку регистров стартового процессора без использования ресурсов IOAPIC так, что все прерывания PIC доступны BSP-процессору через локальное прерывание LINT0 встроенного APIC. Программирование режима Virtual Wire состоит из нескольких этапов, каждый из которых сопровождается выводом в диагностический порт значений от 0C001h до 0C004h |
 |
Настройка контроллера прерываний
Доступ к регистрам Local APIC требует переход к плоской 4Gb модели памяти. Для этого выполняется временный переход в Protected Mode, в регистр ES загружается селектор, который ссылается на предварительно подготовленный дескриптор, равный максимальному значению 0FFFFFFFFh. После установки ES=0 и возврата в Real Mode значение лимита сегмента остается в регистрах Descriptor Cache, что позволяет использовать 32-разрядные адреса. Настройка контроллера прерываний PIC сводится к запрету прохождения запросов IRQ0…IRQ7 на время работы с регистрами APIC |
 |
Инициализация регистров Local APIC
Мультипроцессорная система, также как и система с Hyper-Threading, должны выполнить процедуру инициализации регистров Local APIC, которые отображаются в системной памяти. Регистры используются для обработки ошибок и позволяют установить режима взаимодействия APIC процессора и контроллеров прерываний i8259A |
 |
Установка Spurious Vector, восстановление масок PIC
Финальная стадия настройки Local APIC состоит в том, чтобы ограничить количество Spurious Vector значением 0Fh и, модифицируя содержимое регистра LINT0, обеспечить прохождение запросов процессору о наличии прерывания по линии i8259. Регистр LINT0 из семейства LVT управляет назначением вектора для входа Local Interrupt 0. Его использование определяется мультипроцессорной таблицей и зависит от аппаратных особенностей платформы. Перед тем, как будут восстановлены регистровые маски контроллеров прерываний i8259, разрешается прием немаскируемых прерываний |
 |
Фаза завершения
Успешное завершение инициализации BSP-процессора для работы в режиме Virtual Wire с использованием Local APIC |
 |
 |
 |
С1 |
Get CPU Information |
 |
 |
 |
Определение Type, Family, Model и Stepping
После аппаратного сброса все процессоры семейства i486 и старше сохраняют информацию о себе в регистре EDX. Задача POST на данном этапе - идентифицировать процессор. Для этого полученное значение сохраняется и выполняется поиск сигнатуры TMFS (Type, Family, Model, Stepping) в служебных структурах |
 |
Определение торговой марки
По полученной информации формируется строка, соответствующая Type, Family, Model и Stepping. Она потребуется на этапе визуализации, когда вместо кодового имени процессора на экране монитора должна отображаться его торговая марка, например, Pentium-III(tm) |
 |
Данные о процессоре сохраняются в оперативной памяти |
 |
Check CPUID
Существуют устаревшие модели процессоров, которые не поддерживают команду CPUID. В этом случае, чтобы избежать ошибки исключения и остановки прохождения POST, проверяется допустимость инструкции.
На современных платформах дополнительная проверка валидности CPUID не выполняется
|
 |
CPUID
Для того, чтобы получить сигнатуру TFMS альтернативным способом, выполняется функция 01h инструкции CPUID. Полученное значение сравнивается с ранее сохраненным (код C1 00) |
 |
Подготовка информации о процессоре в ASCII-коде
После выполнения инструкции CPUID, наряду с торговой маркой, готовится описательная информация о процессоре в формате ASCII (объем кэш-памяти L1/L2/L3, многоядерность, Hyper-Threading и т.п.) и сохраняется для отображения конфигурации на экране монитора |
 |
Подготовка информации о процессоре для SMI
Для обработки System Management Interrupt (SMI Handler) формируется область SMRAM, которая располагается по тем же адресам (0A0000h-0BFFFFh), где обычно находится видеопамять. Задача POST на данном этапе - уточнить объем SMRAM и ее распределение по сегментам. Затем в эту область сохраняется вся необходимая информация о процессоре, которая потребуется для обработки SMI-событий |
 |
Сохранение данных о процессоре в SMRAM |
 |
 |
 |
С2 |
Initialize Boot Strap Processor |
 |
С3 |
Initialize Application Processors |
 |
 |
 |
Инициализация MPS перед загрузкой ОС |
 |
В контрольной точке 9Fh, после завершения процедуры Extended keyboard setup, выполняется финальная фаза подготовки многопроцессорной платформы к работе в среде ОС.
С8 |
Initialize CPU's Before Boot |
 |
 |
 |
POST приступает к настройке регистров APIC всех процессоров непосредственно перед сеансом операционной системы |
 |
Формирование адресной таблицы участков Memory Hole
Формируется адресная таблица участков (Memory Hole), запрещенных к использованию по архитектурным причинам. На современных платформах как минимум один участок требует настройки системной логики для корректной работы: это память непосредственно за пределами 4 Гб пространства. BIOS стремится объединить Memory Hole с регионами памяти, в которые отображаются регистры Local APIC, IOAPIC и пространство PCI и уменьшить количество таких участков |
 |
Свод данных о Shadow-областях памяти
Формируется статус Shadow-областей памяти с учетом их кэширования, гранулярности и поддержки Uncached Speculative Write Combining. Для каждой из них устанавливается флаг доступа для чтения и записи |
 |
Get CPU's Information
Согласно с установками CMOS Setup выбирается протокол работы с внутренней кэш-памяти BSP-процессора: Write Back, Write Through или запрет на использование L1. Назначаются правила доступа к VGA-памяти, используемой бортовым видео-контроллером: принимается или отвергается политика USWC (Uncached Speculative Write Combining).
Проверяется CPU Reset ID установленного BSP процессора для того, чтобы все AP-процессора, инициализируемые в дальнейшем, были одного типа и одинаково могли поддерживать функции стартового процессора
|
 |
Резервирование адресов для служебных структур
Формируется таблица адресов, по которым размещаются структуры, предназначенные для обслуживания каждого из установленных процессоров в процессе загрузки операционной системы |
 |
 |
 |
С9 |
Wake up all application processors |
 |
 |
 |
Запуск AP-процессоров
Запуск AP-процессоров выполняется через ICR (Interrupt Command Register) с помощью межпроцессорного прерывания Startup IPI. Согласно спецификации запуск процессоров приложений может осуществляться либо BSP-процессором, либо одним из активных AP-процессоров. Выбор стратегии зависит от аппаратных особенностей реализации платформы.
Каждому из AP-процессоров выделяется область стека объемом 1024 байта и временный сегмент запуска, в который помещается программный код. Получив Startup IPI, процессор приложений начинает исполнение своего стартового кода из сегмента запуска и переходит в состояние, зависящее от содержания этого кода
|
 |
Опрос готовности AP-процессоров
Процедура запуска процессоров приложений, начало которой состоялось на предыдущем шаге, завершается циклическим опросом каждого из них. Готовность AP-процессора инкрементирует счетчик, и опрос продолжается до тех пор, пока значение счетчика не совпадет с ожидаемым количеством CPU в системе. К сожалению, неготовность хотя бы одного из AP-процессоров приводит к бесконечному циклу… |
 |
Инициализация AP-процессоров
Инициализация AP-процессоров выполняется через ICR (Interrupt Command Register) с помощью межпроцессорного прерывания Init IPI. Получив его, APIC каждого процессора приложений выполняет сброс, по которому все регистры приводятся в начальное состояние. Содержимое кэш-памяти при этом сохраняется, также как буфера отложенной записи и регистры блока вычислений данных с плавающей точкой |
 |
Фаза завершения
Инициализация многопроцессорной поддержки успешно завершена. Содержимое диагностического порта обнуляется |
 |
 |
 |
Использованы материалы AMIBIOS, Check Point List, American Megatrends, Inc., Copyright© 1995. All Rights Reserved.
|
 |