APIC, HPET и FACP

apic.cpp

APIC — это современный контроллер прерываний, используемый в многопроцессорных системах. HPET — таймер высокой точности. FACP, (в спецификации называется FADT), содержит информацию по программному управлению питанием.

Поскольку информация об этих устройствах содержится в таблицах ACPI (в спецификации называется MADT), для начала придётся найти все необходимые таблицы. Первая таблица — RSDP (начальный указатель на системные описатели, сигнатура ‘RSD PTR ‘, 8 байт с пробелами). Далее, по полученной информации (указателю) нужно получить следующую таблицу: XSDT (расширенная таблица системных описателей). В этой таблице последовательно можно найти таблицы APIC, HPET, FACP.

В таблице APIC содержится информация о подустройствах, в частности о IOAPIC и Local APIC (LAPIC).

IOAPIC — это общий APIC, который обслуживает прерывания от устройств ввода-вывода. Ранее этим занимались микросхемы PIC.

Local APIC относится к отдельному процессору (ядру процессора). Имеет несколько видов аппаратных прерываний: локальный таймер, два внешних прерывания (второе чаще всего — NMI), прерывание ошибки, производительности и теплового сенсора.

Информация из HPET используется для организации периодических и непериодических прерываний. Периодическое прерывание используется как средство синхронизации или «сторожевого пса» (watchdog). Непериодические используются для задержек и/или таймаутов.

Информация FACP используется только в моменты перезагрузки/выключения.