Система прерывания в мп семейства Х86, страница 4

В защищенном режиме, как и в реальном, каждому аппаратному прерыванию или особому случаю соответствует свой код типа прерывания, по которому процессор обращается уже не к таблице векторов прерывания, а к дескрипторной таблице прерывания, получая из ОЗУ соответствующий 8-ми байтовый дескриптор шлюза. Извлекая затем из дескриптора шлюза селектор  целевого сегмента и смещения в нем, процессор, пользуясь глобальной или локальной таблицей дескрипторов, формирует физический адрес подпрограммы обработки запрашиваемого  прерывания.

Таким образом, последовательность действий для передачи управления подпрограмме обработки разрешенного прерывания, после получения запроса прерывания, в случае защищенного режима работы будет следующая.

·   Из регистра IDTR процессор извлекает 32 разрядный базовый адрес сегмента дескрипторной таблицы прерываний IDT .

·   Код типа прерывания, полученный от контроллера прерываний (при аппаратных внешних запросов прерывания), или фиксированный код типа, соответствующий данному особому случаю или команде (при внутренних прерываниях), умножается на 8 (сдвигается на 3 разряда влево), поскольку каждый дескриптор имеет размер в 8 байт.

·   Сформированный таким путем 11 разрядный двоичный код, суммируется с базовым адресом сегмента IDT. Полученный 32 разрядный код является адресом дескриптора шлюза, в котором хранится селектор сегмента, где находится подпрограмма обработки прерывания, а также смещение в этом сегменте, т.е. логический адрес подпрограммы обработки прерывания.

· Для получения физического адреса этой подпрограммы, процессор обращается к ОЗУ и выбирает по полученному адресу дескриптор шлюза.

·  Из полученного дескриптора шлюза выбирается селектор и по его индексу, через дескрипторную таблицу, выбирается дескриптор искомого сегмента.

· Из выбранного дескриптора искомого сегмента процессор извлекает его базовый адрес, суммирует со смещением в этом сегменте, который берется из дескриптора шлюза  и получает физический адрес требуемой подпрограммы обработки прерывания.

Следует отметить, однако, что вторичное обращение к ОЗУ за дескриптором искомого сегмента приходится делать только в тех редких случаях, когда подпрограмма обработки прерывания находится в другом сегменте, отличном от сегмента, где располагается текущая программа. Если же подпрограмма находится в том же сегменте, что и основная текущая программа, то его дескриптор уже находится в соответствующем теневом

регистре (кэш-регистре) процессора. Поэтому в большинстве случаев базовый адрес искомого (целевого) регистра берется из теневого регистра, расположенного в самом процессоре, и дополнительного обращения к ОЗУ, при формировании физического адреса подпрограммы обработки прерывания, не требуется.

Кроме того, заметим следующее. Последний пункт из последовательности действий, изложенных выше, как правило, реализуется только при обработке прерываний и ловушек. Если же происходит запрос прерывания при переключении задач и из дескрипторной таблицы прерываний выбирается дескриптор шлюза задач, по которому находится сегмент состояния задачи TSS, то для этого достаточно знать только его селектор. Поэтому в дескрипторе шлюза задачи приведен только селектор соответствующего TSS, а байты, используемые для размещения смещения, в нем не используется.

Принцип функционирования системы прерываний МП семейства Х86 в защищенном режиме работы, при использовании шлюзов прерываний и ловушек, иллюстрирован на рис V.3.

                                      

Рис.V.2  Принцип организации системы прерывания МП семейства Х86

               в реальном режиме работы.

Рис. V.3 Принцип функционирования системы прерываний МП

              семейства Х86 в защищенном режиме работы при использовании

              шлюзов прерываний и ловушек.

4.  Стек процедуры обработки особых случаев и аппаратных

                                 прерываний.

Еще до передачи управления на процедуру обработки, процессор включает в стек обработчика минимум 12 байт информации, включающих в себя адрес возврата «селектор:смещение» из регистров CS:EIP (как в команде FAR CALL) и содержимое регистра флагов EFLAGS. Если при передаче управления обработчику прерывания происходит изменение уровня привилегий (т.е. передача управления осуществляется через шлюз), то процессор, кроме того, включает в стек и полный указатель «селектор:смещение» из регистров SS:ESP.

                Рис.V.4. Виды стека обработчика особого случая

Необходимость этого заключается в том, что на каждом уровне привилегий должен формироваться свой стек, адрес которого зафиксирован для каждого уровня привилегий. Полные логические адреса стековых областей памяти для каждого уровня привилегий, при передаче управления на них с других, менее привилегированных уровней, хранятся в сегментах состояния задач TSS.

В некоторых программных особых случаях процессор включает в стек также код ошибки, помогающий установить причину особого случая, например, селектор дескриптора сегмента, обращение к которому вызвало особый случай.  Возможные состояния стека обработчика особого случая показаны на рис.V.4.

Для общего ознакомления на рис V.5 приведен типовой формат кода ошибки, поля которых содержат следующую информацию:

Index – содержит индекс дескриптора в глобальной или локальной таблице дескрипторов, определяемых кодами полей IDT и TI;

TI– бит признака глобальной (TI= 0) или локальной (TI= 1) таблицы дескрипторов (при IDT= 0), т.е что приведенный индекс относится, соответственно, к глобальной или локальной таблицы дескрипторов;

IDT – бит признака дескрипторной таблицы прерываний (при IDT = 1  приведенный индекс относится к дескрипторной таблице прерываний);

EXT – признак внешнего события. EXT =1 определяет внешний характер события, вызвавшего особый случай, не связанного с выполняемой программой (типовой случай – внешнее прерывание).

31                                                  16  15                                                   2        1       0

 0000000………..(резерв)…………..000

                     Index

TI

IDT

EXT

                      Рис V.5    Формат кода ошибки

В заключение отметим, что при организации мультипроцессорных систем в систему прерываний включается дополнительный программируемый контроллер прерываний APIC (AdvancedProgrammableInterruptController). Он обеспечивает эффективную согласованную работу по обработке запрашиваемых прерываний в системе, включающей, как правило, два или четыре микропроцессора.