Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1 / Lectures / Lect3v12.doc
Скачиваний:
101
Добавлен:
28.05.2015
Размер:
706 Кб
Скачать
☆

20. Приоритетное обслуживание прерываний

При наличии в системе различных источников, способных формировать запросы прерываний, приходится решать задачи установления очередности (приоритета) приема и обработки этих запросов. Основных таких задач две:

- определять очередность приема запроса прерываний при одновременном наличии в системе нескольких запросов (поступивших одновременно или, накопившихся в ожидании обслуживания);

- определять могут ли принятые запросы прерывать выполнение текущей программы.

В соответствии с этими задачами для запросов прерываний и программ можно определить две формы отношений приоритета: приоритет между запросами прерываний и приоритет между запросами прерываний и программами.

Оба вида приоритетов, являются отношениями. Первое из них задает частичный (при объединении запросов в классы) или полный порядок на множестве запросов прерываний, причем это отношение, определенное на одном множестве – множестве запросов прерывания, транзитивное и антисимметричное. Второе отношение, в зависимости от особенностей его реализации в конкретной ЭВМ, может либо обладать свойствами, аналогичными первому, за счет реализации его посредством задания порядка на множестве программ, приписывая каждой из них некоторое число, называемое уровнем, либо непосредственно задавать разрешение/запрещение для каждой пары запрос-программа.

Принципы реализации двух этих форм приоритетов в ЭВМ различаются.

А) Способ задания приоритета и выбора запроса прерывания зависит от способа определения причины прерывания, рассмотренного выше.

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

Если причина прерывания определяется аппаратно, то и для определения наиболее приоритетного запроса используются схемные методы. Здесь также возможны различные решения. Можно, например, использовать аппаратный аналог схемы последовательного опроса источников, состоящий из мультиплексора, на информационные входы которого поступают запросы и счетчика, состояние которого подается на адресный вход мультиплексора. Эта схема показана на рис.20.1.

Счетчик (Сч) первоначально устанавливается в “0”, а затем на его вход “+1” подается серия сигналов, до тех пор, пока на выходе мультиплексора (MS) не появится 1, говорящая о том, что на информационном входе мультиплексора, номер которого установлен в счетчике, присутствует запрос прерывания. Однако, такая схема работает относительно медленно и может, при наличии нескольких запросов, ошибочно выбрать менее приоритетный запрос, если запрос с более высоким приоритетом поступил после начала цикла опроса, когда его вход уже был проверен.

Рис.20.1. Выбор наиболее приоритетного запроса при последовательном опросе входов

Чаще используется схема, так называемого, приоритетного шифратора, которая включает в себя цепочку блокировки менее приоритетных входов и шифратор номера запроса. Цепочка блокировки, иногда называемая также “искателем левой единицы” или “дейзи-цепочкой”, показана на рис.20.2.

Рис.20.2. Схема выбора наиболее приоритетного запроса

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

Ясно, что наиболее приоритетный запрос ЗПр0 проходит на выход при своем появлении независимо от остальных запросов, т.е., y0 = ЗПр0. Следующий по приоритету запрос ЗПр1 пройдет на выход при своем появлении только, если отсутствует запрос ЗПр0, т.е., y1 = ЗПр1 ¬ЗПр0. Для прохождения следующего запроса требуется отсутствие первых двух, т.е., y2 = ЗПр2 ¬ЗПр0 ¬ЗПр1 = ЗПр2 ¬(ЗПр0 v ЗПр1). Понятно, что в общем случае можно записать yi = ЗПрi ¬(ЗПр0 v ЗПр1 v … v ЗПрi-1). Эти соотношения и реализует схема, показанная на рис.20.2.

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

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

Б) При задании приоритетов между запросами прерываний и программами используются механизм масок и механизм порогов.

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

Код маски хранится в специальном регистре, в который он устанавливается либо специальными командами, либо общими командами ввода-вывода, которые могут адресовать данный регистр как устройство. Схемная реализация маскирования запросов прерывания, показанная на рис.20.3, включает в себя регистр маски (РгМ) и набор схем “И” по количеству входов запросов прерываний, на один из входов каждой из которых подается запрос, а на второй, запрещающий, выход соответствующего триггера регистра маски.

Рис.20.3. Схема маскирования запросов прерывания

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

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

Следует отметить, что и код маски и номер уровня программы, относятся к информации о состоянии программы, сохраняемой при ее прерывании.

21. Особенности системы прерываний ПЭВМ (из Гос_ОЭВМ)

Система прерываний ПЭВМ реализует, в целом, типовой набор функций, возлагаемых на системы подобного вида, и использует для этого достаточно стандартные механизмы.

Известно, что система прерываний представляет собой комплекс программных и аппаратных средств, в задачу которых входит организация необходимых процедур для прекращения (приостановки) выполнения текущей программы при возникновении определенных ситуаций и вызове программ, обеспечивающих реакцию системы на эти ситуации. Причем прекращение текущей программы следует организовать так, чтобы по завершении выполнения программы, вызванной системой прерываний для обработки возникшей ситуации, можно было возобновить выполнение прерванной программы с той точки, в которой она была остановлена (если, конечно, ситуация не настолько серьезна, что препятствует возможности нормальной дальнейшей работы ЭВМ).

Для этой цели система прерываний должна:

- определить момент возникновения и тип ситуации, требующей обработки с прекращением выполнения текущей программы;

- сохранить состояние прерываемой программы для того, чтобы в последствии можно было восстановить ее выполнение с точки приостановки (прерывания);

- определить необходимую для обработки возникшей ситуации программу и местоположение ее в памяти ЭВМ, а затем передать ей управление;

- по завершении программы обработки возникшей ситуации восстановить состояние прерванной ранее программы и возобновить ее выполнение.

Выполнение перечисленных действий должно осуществляться, по возможности, с минимальными потерями времени, поэтому значительная часть их производится аппаратными средствами, которые в ПЭВМ, в основном, сосредоточены в контроллере (точнее, в двух контроллерах) прерываний.

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

Аппаратные прерывания вызываются сигналами на специальных входах процессора. Причем в рамках аппаратных прерываний различают немаскируемые (NMI–nonmaskableinterrupt) и маскируемые прерывания (точнее говоря, запросы прерываний).

Программные прерывания разделяют особые случаи и обращения к системным процедурам, например функциям BIOSилиDOS, вызываемым командой процессораINT(для функцийDOC– этоINT21h).

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

- отказы(fault) – которые обрабатываются до выполнения вызвавшей их команды, например, обращение команды к отсутствующей в памяти странице прервет ее выполнение, вызовет подкачку страницы в ОП и последующее возобновление выполнения команды;

- ловушки(trap) – обрабатывающиеся после выполнения вызвавшей их команды (к ним относятся переполнение, исключение отладки);

- аварийные завершения(abort) – серьезные ошибки, не позволяющие точно установить вызвавшую их команду (двойной отказ – исключение во время исключения, сигнал от схем машинного контроля).

Местоположение в памяти (адрес) программы обработки прерывания или исключения определяется по таблице (дескрипторов) прерываний с помощью указателя, или, иначе, вектора прерывания, задающего строку таблицы прерываний, в которой хранится адрес требуемой программы (обработчика прерывания). Этот вектор для программных прерываний задается командой, для исключений – генерируется внутри процессора, для немаскируемых аппаратных прерываний всегда фиксирован, а для маскируемых аппаратных прерываний формируется контроллером прерываний.

Общую структуру контроллера прерываний ПЭВМ можно представить так, как показано на рис.21.1 ниже.

Рис 21.1. Общая структура контроллера прерываний

На этом рисунке использованы обозначения:

IRQi– запросы прерывания (InterruptRequests);

Di– линии шины данных;

РЗП– регистр запросов прерываний (IRR–InterruptRequestRegister)

РМП– регистр маски прерываний (IMR–InterruptMaskRegister)

РОП– регистр обслуживаемого прерывания (ISR–InterruptServiceRegister)

Сх Упр каскад– схема управления каскадным включением нескольких контроллеров.

Контроллер(ы) прерываний подключается к процессору так, как показано на рис.21.2, а их взаимодействие с процессором осуществляется в следующем порядке.

Рис 21.2. Схема связи контроллера прерываний и процессора

Контроллер принимает запросы прерываний, поступающие на входы IRQi, и фиксирует их в регистреРЗП. С выходов этого регистра запросы поступают на приоритетный шифратор, на который также поступает и маска запросов с регистраРМП. Приоритетный шифратор выбирает незамаскированный запрос (для замаскированных запросов соответствующие разряды регистра маски установлены в нуль), обладающий наивысшим приоритетом (если запросов несколько), и формирует номерiвходаIRQi, на который поступил запрос.

Далее выбранный запрос передается на регистр обслуживаемых прерываний РОП. Одновременно формируется общий запрос прерыванияINT, посылаемый на входINTR(запроса прерываний) процессора.

Если в процессоре разрешено выполнение маскируемых аппаратных прерываний (флаг IF– девятый разряд регистра флагов равен “1”), то процессор, получив сигналINTR, отвечает контроллеру сигналом разрешения прерыванияINTA(INTerruptAcknowledge), который обычно выдается по завершении выполнения текущей команды. На этот сигнал (точнее на второй такой сигнал, подаваемый процессором для совместимости с ранними моделями) контроллер отвечает выдачей на шину данных номера вектора прерывания, равного базовому адресу, увеличенному на номер входа контроллера, на который поступил запрос, вызывавший данное прерывание.

Базовые адреса стандартно имеют значения 08hдля первого контроллера и 70h– для второго (хотя их значения можно изменить). Эти адреса устанавливаются при инициализации контроллеров в процессе загрузки ПЭВМ при включении специальными командами через порты ввода/вывода 20 и 21 для первого котроллера иA0 иA1 – для второго.

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

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

В более поздних ПЭВМ (после 2001 г.) появился расширенный контроллер прерываний (APIC – advanced programmable interrupt controller), основным назначением которого является организация приема запросов прерываний в многопроцессорной системе, однако, он может работать и часто используется и в однопроцессорных системах. В определенных своих режимах он может обеспечить совместимость с обычным контроллером прерываний.

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

Соседние файлы в папке Lectures