- •8. Прерывания и исключения
- •Прерывания и исключения защищенного режима
- •Приоритеты событий, вызывающих прерывания
- •Обработка прерываний в реальном режиме
- •Обработка прерываний в защищенном режиме
- •Возможности последовательной обработки исключений различных классов
- •Условия недостоверности сегмента tss
- •Приоритеты sse-исключений операций с плавающей точкой
- •Варианты обработки прерываний в режиме виртуального 8086
- •Виртуальные прерывания в режиме виртуального 8086
- •Обработка прерываний с использованием idt (защищенный режим)
- •Обработка прерываний с помощью таблицы векторов прерываний (реальный режим).
- •Обработка прерываний с использованием признаков vif и vip
Обработка прерываний с использованием признаков vif и vip
Если процессор обрабатывает маскируемые прерывания с помощью признаков VIF и VIP, то инструкции CLI и STI изменяют признак VIF вместо IF=0. При выполнении инструкции CLI, процессор устанавливает значение VIF=0, при выполнении инструкции STI - значение VIF=1. Если программа попытается изменить признак IF с помощью инструкций PUSHF или POPF, то процессор будет менять флаг VIF, сохраняя значение признака IF.
Когда реализуется маскируемое прерывание при значении признака IF=1 (прерывания разрешены), то процессор вызывает подпрограмму обработки через таблицу IDT, производя следующую последовательность действий:
Переключается в защищенный режим с уровнем привилегий 0.
В стеке с уровнем привилегий 0 сохраняется содержимое регистров GS, FS, DS, ES, SS, ESP, EFLAGS, CS, EIP. В содержимом регистра EFLAGS, которое сохраняется в стеке, устанавливается значение поля IOPL=3, а значение признака VIF копируется в признаке IF.
Очищаются сегментные регистры GS, FS, DS и ES.
В регистре EFLAGS устанавливается значение признака VM=0.
Начинается выполнение подпрограммы обработки прерывания.
Вызываемая подпрограмма обработки прерывания должна проверить значение признака VIF в регистре EFLAGS и выполнить следующие процедуры:
Если значение признака VIF=1 (разрешение обработки виртуального прерывания), то обработать прерывание.
Если значение признака VIF=0 (запрещение обработки виртуальных прерываний), то установить значение признака VIP=1 (наличие отложенного прерывания) в содержимом регистра EFLAGS, хранящемся в стеке, и вернуть управление прерванной программе.
При выполнении инструкции STI, которая должна разрешить обслуживание прерываний, возможны следующие варианты действий процессора в зависимости от установленного значения признака VIP:
Если VIP=0 (нет отложенных прерываний), то процессор устанавливает значение признака VIF=1.
Если VIP=1 (есть отложенное прерывание), то процессор реализует исключение #GP. Используемая в этом случае подпрограмма обработки должна обеспечить обслуживание отложенного прерывания. Перед возвратом из подпрограммы обработки необходимо установить значения признаков VIP=0 и VIF=1 в содержимом регистра EFLAGS, которое сохраняется в стеке.
Если установлены значения признаков VIF=VIP=1, то реализуется исключение #GР. Такая ситуация может возникнуть после выполнения инструкций POPF, IRET или переключения на задачу, выполняемую в защищенном режиме.
$.4. Реализация прерываний в мультипроцессорных системах
Построение мультипроцессорных систем является одним из перспективных путей достижения высокой производительности. Наиболее простую организацию имеют симметричные мультипроцессорные системы, в которых используется несколько процессоров, объединенных общей локальной шиной. Каждый процессор выполняет свою задачу, задаваемую операционной системой (ОС). При этом процессоры совместно используют общие ресурсы системы (память, внешние устройства), обращение к которым регулируется ОС. В каждый момент времени один из процессоров является ведущим (master) – только он имеет доступ к системной шине. Другие процессоры в случае необходимости обращения к шине выдают соответствующий запрос. Эти запросы анализируются специальным устройством – арбитром шины, который работает под управлением ОС. В соответствии с определенным алгоритмом арбитр предоставляет доступ к шине одному из запросивших процессоров, который становится, таким образом, ведущим. Поддержку функционирования таких мультипроцессорный систем обеспечивает ряд современных ОС (Windows NT, Novell NetWare и другие). Чаще всего симметричные мультипроцессорные системы содержат два или четыре процессора.
Процессоры семейства Р6 имеют ряд средств для поддержки работы мультипроцессорных систем, обеспечивая для процессоров взаимный доступ к содержимому внутренней кэш-памяти данных (снупинг), возможность блокировки доступа к шине при выполнении ряда процедур и другие возможности. Различные модели этого семейства позволяют организовать эффективную работу двух- или четырехпроцессорных систем.
Одной из наиболее серьезных проблем при реализации мультипроцессорных систем является организация обслуживания внешних (аппаратных) прерываний. Классическая организация обслуживания с помощью контроллера прерываний, подающего сигнал запроса INTR и формирующего код инструкции INT n, с реализацией процессором цикла подтверждения прерывания ориентирована на использование в однопроцессорной системе. Для обеспечения функционирования мультипроцессорных систем в процессоры семейства P6 введен программируемый контроллер прерываний с расширенными возможностями APIC (APIC – Advanced Programmable Interrupt Controller).
В симметричной мультипроцессорной системе передача сигналов прерывания происходит по специальной APIC-шине (рис. $.5). Общие внешние запросы прерываний поступают на системный APIC-контроллер, который реализован в виде отдельной микросхемы, разработанной и поставляемой компанией Intel. Каждый из процессоров содержит локальный APIC, имеющий две входных линии LINT0, LINT1, на которые поступают локальные запросы прерывания, обслуживаемые только данным процессором. При работе в однопроцессорной системе APIC отключается, и выводы LINT1-0 используются для подачи запросов немаскируемого NMI и маскируемого INTR прерываний.
|
Процессор 1 |
|
Процессор 2 |
|
Процессор 3 |
|
|||
|
|
|
|
|
|||||
|
L |
Local APIC |
Local APIC |
|
|||||
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|||
Шина APIC |
|
|
|
|
|
||||
|
|
|
|
|
|||||
|
|
|
С |
|
Внешние прерывания |
|
|||
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|||
Рис.$.5. Обработка прерываний в мультипроцессорной системе с использованием контроллеров APIC
Общие запросы прерывания поступают на системный APIC, который после их анализа выдает соответствующие послания на внутреннюю APIC-шину. Эта шина содержит три линии, на одну из которых (PICCLK) выдается синхросигнал, а две других (PICD1-0) служат для последовательного обмена информацией в процессе организации обслуживания поступивших запросов. При этом для внешних устройств, формирующих запросы прерывания, мультипроцессорная система выглядит как один процессор, а процедура обслуживания запросов соответствует процедуре, выполняемой серийным контроллером прерываний Intel 8259A, который широко используется в современных системах.

ocal
APIC
истемный
APIC