Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MProc / M5 / Прерывания и исключения.doc
Скачиваний:
49
Добавлен:
16.04.2013
Размер:
238 Кб
Скачать
☆

Обработка прерываний с использованием признаков 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 ocal APIC

Local APIC

Local APIC

Шина APIC

С истемный APIC

Внешние прерывания

Рис.$.5. Обработка прерываний в мультипроцессорной системе с использованием контроллеров APIC

Общие запросы прерывания поступают на системный APIC, который после их анализа выдает соответствующие послания на внутреннюю APIC-шину. Эта шина содержит три линии, на одну из которых (PICCLK) выдается синхросигнал, а две других (PICD1-0) служат для последовательного обмена информацией в процессе организации обслуживания поступивших запросов. При этом для внешних устройств, формирующих запросы прерывания, мультипроцессорная система выглядит как один процессор, а процедура обслуживания запросов соответствует процедуре, выполняемой серийным контроллером прерываний Intel 8259A, который широко используется в современных системах.

26