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

Обработка прерываний с использованием признаков 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) – только он имеет доступ к системной шине. Другие процессоры в случае необходимости обращения к шине выдают соответствующий запрос. Эти запросы анализируются специальным устройством –арбитром шины, который работает под управлением ОС. В соответствии с определенным алгоритмом арбитр предоставляет доступ к шине одному из запросивших процессоров, который становится, таким образом, ведущим. Поддержку функционирования таких мультипроцессорный систем обеспечивает ряд современных ОС (WindowsNT,NovellNetWareи другие). Чаще всего симметричные мультипроцессорные системы содержат два или четыре процессора.

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

Одной из наиболее серьезных проблем при реализации мультипроцессорных систем является организация обслуживания внешних (аппаратных) прерываний. Классическая организация обслуживания с помощью контроллера прерываний, подающего сигнал запроса INTR и формирующего код инструкции INT n, с реализацией процессором цикла подтверждения прерывания ориентирована на использование в однопроцессорной системе. Для обеспечения функционирования мультипроцессорных систем в процессоры семействаP6 введен программируемый контроллер прерываний с расширенными возможностямиAPIC(APIC–AdvancedProgrammableInterruptController).

В симметричной мультипроцессорной системе передача сигналов прерывания происходит по специальной APIC-шине (рис. $.5). Общие внешние запросы прерываний поступают на системный APIC-контроллер, который реализован в виде отдельной микросхемы, разработанной и поставляемой компаниейIntel. Каждый из процессоров содержит локальный APIC, имеющий две входных линииLINT0,LINT1, на которые поступают локальные запросы прерывания, обслуживаемые только данным процессором. При работе в однопроцессорной системе APIC отключается, и выводыLINT1-0 используются для подачи запросов немаскируемогоNMIи маскируемого INTR прерываний.

Процессор 1

Процессор 2

Процессор 3

Local APIC

Local APIC

Local APIC

Шина APIC

СистемныйAPIC

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

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

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

26