Организация прерываний в мультипроцессорных системах.

 

Рассмотрим реализацию прерываний в наиболее простых симметричных многопроцессорных системах, в которых используется несколько процессоров, объединенных общей шиной. Каждый процессор выполняет свою задачу, задаваемую операционной системой (ОС). При этом процессоры совместно используют общие ресурсы системы (память, внешние устройства), обращение к которым регулируется ОС. В каждый момент времени один из процессоров является ведущим (master) – только он имеет доступ к системной шине. Другие процессоры в случае необходимости обращения к шине выдают соответствующий запрос. Эти запросы анализируются специальным устройством - арбитром шины, который работает под управлением ОС. В соответствии с определенным алгоритмом арбитр предоставляет доступ к шине одному из запросивших процессоров, который становится таким образом ведущим. Поддержку функционирования таких мультипроцессорных систем обеспечивает ряд современных ОС (Windows NТ, Novell NetWare и другие). Чаще всего симметричные мультипроцессорные системы содержат два или четыре процессора.

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

Одной из наиболее серьезных проблем при реализации мультипроцессорных систем является организация обслуживания внешних (аппаратных) прерываний. Классическая организация обслуживания с помощью контроллера прерываний, подающего сигнал запроса INTR и формирующего код команды INT n, с реализацией процессором цикла подтверждения прерывания ориентирована на использование в однопроцессорной системе. Для обеспечения функционирования мультипроцессорных систем в процессоры семейства Р6 введен программируемый контроллер прерываний с расширенными возможностями АРIС (АРIС – Аdvanced Programmable Interrupt Controller).

 

 

Рис. 97. Схема прерываний в многопроцессорной системе.

 

Внутренние контроллеры прерываний связаны между собой по специальной АРIC-шине (рис.97). Общие внешние запросы прерываний поступают на системный АРIС - контроллер, который реализован в виде отдельной микросхемы, разработанной и поставляемой компанией Intel.

Каждый из процессоров содержит локальный АРIС, имеющий две входных лини LINT 0, LINT 1, на которые поступают локальные запросы прерывания, обслуживаемые только данным процессором. При работе в однопроцессорной системе АРIС отключается, и выводы LINT 1-0 используются для подачи запросов немаскируемого NMI и маскируемого INTR прерываний.

Общие запросы прерывания поступают на системный АРIС, который после их анализа выдает соответствующие послания на внутреннюю АРIС - шину. Эта шина содержит три линии, на одну из которых (РIССLК) выдается синхросигнал, а две других (РIСD 1-0) служат для последовательного обмена информацией в процессе организации обслуживания поступивших запросов. При этом для внешних устройств, формирующих запросы прерывания, мультипроцессорная система выглядит как один процессор, а процедура обслуживания запросов соответствует процедуре, выполняемой серийным контроллером прерываний Intel 8259А, который широко используется в современных системах.