Найти тему
The Codeby

Системные таймеры, Часть [4] – Local APIC

Предыдущие части:

1. Общие сведения. Legacy-таймеры PIT и RTC.
2. Шина PCI – таймер менеджера питания ACPI.
3. ACPI таблицы – таймер HPET.
4. Таймер контролёра Local-APIC.
5. Счётчик процессора TSC.
6. Win - профилирование кода.

---------------------------------------

Основным недостатком рассмотренных ранее таймеров является время доступа к ним, т.к. все эти устройства расположены за пределами центрального процессора CPU. Чтобы дотянуться до их контроллёров, процессор вынужден ждать освобождения шины FSB/DMI, посредством которой он тесно связан с чипсетом. Это тормозит процесс и несколько снижает ценность таймеров. Но есть и другая проблема..

Поскольку шина в системе одна, то с приходом многоядерных CPU тучи сгустились. Движимые инстинктом выживания, все ядра хором набрасывались на общую шину и под натиском грубой силы она проседала – запросы выстраивались в длинную очередь и шина фактически становилась узким местом в архитектуре. Здесь стало очевидно, что гендерные нормы уже устарели и не могут использоваться в наши дни. Так появился снискавший себе заслуженную славу локальный (по отношению к процессору) контролёр прерываний "Local APIC" – рассмотрим его работу подробней..

APIC – общие сведения

Если процессор не вещь-в-себе, он должен выстраивать систему социальных взаимоотношений с устройствами. Исторически, для этих целей были предусмотрены линии IRQ – Interrupt Request – запрос на прерывание. Любое (способное вести диалог) устройство обязано иметь эту линию в своей конструкции: например клавиатура посылает по ней сигнал IRQ при каждом нажатии на клавишу, диск – по готовности данных, лан – по приходу пакета, таймер – по истечении времени, и т.д. Таким образом получаем N-ное количество сигнальных линий, число которых равно числу активных устройств на материнской плате.

Теперь эта шина-IRQ заходит в системный контролёр прерываний PIC – Peripheral Interrupt Controller – древний девайс эпохи неолита. Он мог обслуживать всего 8 устройств, т.к. имел именно 8 входных линий, и 1 выход INTR к процессору. Но на плате источников прерываний IRQ могло быть больше, поэтому в архитектуре было два PIC’a, которые соединялись каскадно – выход INTR первого заходил на вход второго, итого получали уже 15-входов. На момент появления этих контролёров, ни о каких мульти/процессорных системах SМР никто даже не слышал, так-что PIC изначально был заточен на взаимодействие с одним процессором и со-временем от него пришлось избавиться.

Основным преимуществом усовершенствованного контролёра APIC стала возможность посылать по выходной линии INTR запросы конкретным ядрам одного процессора, т.е. получили маршрутизацию прерываний. Но для этого потребовалось наличия ещё одного устройства Local-APIC, которым снабдили каждое ядро. Так в типичной конфигурации МР-систем два этих контролёра работают только в паре, и не могут в полной мере выразить себя друг-без-друга. В исключительных ситуациях (когда у процессора нет своего LAPIC) внешний IOAPIC работает в режиме эмуляции устаревшего PIC, ..в остальных-же случаях режим назвали "симметричным", как на рисунке ниже:

Читать статью полностью: https://codeby.net/threads/sistemnye-tajmery-chast-4-local-apic.73735/