Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Организация прерываний в вычислительной машине
Программно-управляемый обмен, инициируемый запросом прерывания ПУ, позволяет избежать ожиданий готовности ПУ к обмену и повысить производительность вычислительного процесса. Процесс прерывания выполняемой МП программы заключается в следующем: при возникновении некоторого события, требующего немедленной реакции процессора, в ВМ автоматически поступает запрос (сигнал) прерывания, по которому МП прерывает выполнение текущей (прерываемой) программы и переходит к выполнению некоторой другой (прерывающей) программы, специально предназначенной для данного события. После завершения выполнения прерывающей программы (обработчика прерывания) МП вновь передает управление прерванной программе, которую продолжает выполнять с момента прерывания. Запросы прерываний могут возникать как внутри ВМ (например, в процессоре при делении на нуль или переполнении разрядной сетки), так поступать извне от устройств ввода-вывода или от управляемого системой объекта. По этому признаку прерывания классифицируются на внутренние и внешние. В свою очередь внешние прерывания разделяются на маскируемые и немаскируемые. Запросы маскируемых прерываний IRQ (Interrupt ReQuest) обычно поступают на вход INTR процессора и их обработка может запрещаться и разрешаться соответствующими командами (например, CLI и STI в МП i8086/8088 или DI и EI в МП i8080), которые воздействуют на флаг IF регистра признаков процессора. Время реакции МП, определяющее запаздывание обслуживания прерываний, зависит от времени завершения текущей команды, ибо до завершения текущей команды МП, как правило, не предпринимает никаких действий. Запросы немаскируемых прерываний поступают на специальный вход NMI процессора и обрабатываются независимо от состояния флага разрешения прерываний IF. Немаскируемые запросы используются для прерывания работы МП при аварийных событиях в системе - пропадании электропитания, обнаружения ошибки памяти и т.п. Существует также особый вид прерываний – программные прерывания, которые вызываются не сигналами запросов, а специальными командами пользовательской программы - командами прерываний INT NUM. Программные прерывания в прямом смысле прерываниями не являются, поскольку представляют собой особый способ вызова подпрограмм (процедур) не по адресу, а по номеру в дескрипторной таблице. Программные прерывания удобно использовать для организации доступа к отдельным, общим для всех программ, модулям. Например, программные модули операционной системы, сервис BIOS доступны прикладным программам через прерывания, и нет необходимости при вызове этих модулей знать их текущий адрес в памяти. Прикладные резидентные программы могут сами вызываться другими программами через прерывания. Организация при запросе прерывания перехода к прерывающей программе (обработчику прерывания), а также осуществление возврата из прерывающей программы в прерванную, основывается на информации, заключенной соответственно в векторах прерывания и состояния МС. Вектор прерывания определяет начальный адрес прерывающей программы, к которой МП переходит при прерывании. Вектор прерывания для 8 – разрядных МП и микроконтроллеров является адресом первой команды подпрограммы обработки прерывания. Вектор прерывания для 16 и 32 – разрядных МП является 8 – разрядным кодом, который указывает на дальний адрес CS: IP прерывающей подпрограммы. Связь между кодом из диапазона от 0 до 255, определяющим тип (номер) прерывания, и подпрограммой (процедурой) обслуживания прерывания устанавливается с помощью таблицы указателей векторов прерываний Interrupt Descriptor Table (IDT), которая располагается в памяти по адресам 000 – 3FFh. Тип (номер) прерывания является индексом или номером строки этой таблицы. Таблица IDT состоит из 256 строк, каждая из которых содержит вектор прерывания – двойное слово, определяющее начальный логический адрес (CS: IP) подпрограммы – обработчика прерываний. Слово с большим адресом содержит базовый адрес сегмента, а слово с меньшим адресом – смещение подпрограммы – обработчика от начала кодового сегмента. При вызове обработчика прерываний по коду типа или номера прерываний определяется соответствующая строка таблицы указателей векторов прерываний, т.е. вектор прерывания. МП определяет адрес строки, соответствующей заданному типу прерываний, путем умножения типа прерываний на 4. Смещение вектора прерывания загружается в регистр IP, а адрес сегмента – в регистр CS. Вектором состояния называется совокупность значений информационных элементов системы, характеризующих состояние в некоторый момент времени и достаточных для продолжения выполнения программы с точки, соответствующей моменту формирования данного вектора состояния. В общем случае вектор состояния включает содержимое счетчика команд (указателя команд), содержимое аккумулятора и содержимое регистра признаков (регистра флагов). При прерывании вектор состояния запоминается в стековой памяти, причем при необходимости в стеке также запоминается содержимое тех регистров, которые потребуются для выполнения подпрограммы обработки прерывания. Для МП архитектуры i80*86 в стеке запоминаются регистр флагов F и указатель команд CS: IP, содержащий указание на адрес команды, которую процессор должен будет выполнить после обработки прерывания. Содержимое регистров F, CS и IP запоминается при прерывании и восстанавливается при возврате из него автоматически, а для запоминания и последующего восстановления других регистров МП должны быть предусмотрены соответствующие команды в начале и конце подпрограммы обработки прерываний. В ВМ, как правило, может быть несколько источников запросов прерываний (и соответственно прерывающих программ). Если несколько ПУ одновременно сформировали запросы на обслуживание, система прерываний выбирает один из них. Выбор осуществляется на основе уровня приоритета (или просто приоритета) каждого из запросов, который определяет срочность и важность обслуживания запроса. Существуют системы прерываний с фиксированными и динамическими приоритетами. В системе с фиксированными приоритетами каждому запросу назначен определенный уровень приоритета из линейно - упорядоченного набора уровней приоритетов, причем в процессе работы установленные приоритетные соотношения не изменяются. В системе с динамическими приоритетами в процессе работы производится циклические изменения уровней приоритетов запросов. Для этого после каждого обслуживания очередного запроса происходит циклический сдвиг уровней приоритетов с присвоением низшего только обработанному запросу. При такой организации приоритетов ресурсы процессора равномерно распределяются между ПУ, поэтому все ПУ обслуживаются одинаково и никакое из них не выделяется. В зависимости от числа подтвержденных запросов прерываний, одновременно находящихся на обслуживании, различают одноуровневые и многоуровневые системы прерываний. В одноуровневой системе прерываний в каждый момент времени допускается лишь один подтвержденный запрос. Обработка всех других запросов откладывается до завершения текущего обслуживания. Другими словами в одноуровневой системе на временном интервале обслуживания одного запроса прерывания другие запросы прерываний блокируются. В многоуровневой системе прерываний разрешаются многократные (по числу уровней) прерывания одних процедур обслуживания другими, т.е. вложенные прерывания. Для этого каждому уровню ставится в соответствие некоторое подмножество запросов из их общего числа и строго упорядоченный приоритет. Процедуры обслуживания некоторого уровня могут быть прерваны лишь запросами более высокого уровня. При подтверждении прерывания приоритет программы МП повышается до уровня приоритета запроса. Для разрешения конфликта внутри группы запросов одного уровня существует вторичная система приоритетов. Одноуровневые системы используются в МС на базе простейших микроконтроллеров, например, i8048. В развитых МС (в ВМ), как правило, реализуются более гибкие многоуровневые системы прерываний. Например, в микроконтроллерах семейства MCS-51 применяется двухуровневая система, а в МС на базе МП 80*86 число уровней достигает 15, причем каждому уровню соответствует единственный источник запросов, поэтому необходимость во вторичных приоритетах отпадает. Системы прерываний по организации работы классифицируются на радиальные и векторные. Физический интерфейс радиальной системы прерываний МС представляется несколькими линиями (входами) запросов, каждой из которых поставлен в соответствие фиксированный начальный адрес подпрограммы обслуживания прерывания. Такие линии запросов обычно интегрированы в МС, поэтому для их организации не требуется дополнительных микросхем. Радиальная система – самая простая система прерываний, применяемая в несложных микроконтроллерах. Увеличить число линий запросов радиальной системы можно методом поллинга. Для этого каждая радиальная линия IRQ с фиксированным вектором прерывания может быть превращена в магистраль, которая по схеме «монтажное ИЛИ» объединяет запросы от нескольких источников прерываний. Однако в этом случае после получения общего запроса прерывания возникает задача идентификации источника, сформировавшего запрос, и передачи управления на соответствующую процедуру обслуживания. Эта задача решается программным методом с помощью специальной процедуры поллинга – опроса. Функция поллинга состоит в последовательном опросе состояния всех устройств, связанных с данной линией запросов, и выявления готового к обслуживанию. При опросе используются стандартные подпрограммы проверки готовности, которые входят в драйверы ПУ. Например, поллинг может быть организован следующим образом:
POLL: ………………….. ………………….. CALL STATUS 1; Проверка готовности первого ПУ и переход JNZ SERVICE 1; на обслуживание, если устройство готово CALL STATUS 2; Проверка готовности второго ПУ и переход JNZ SERVICE 2; на обслуживание, если устройство готово …………………. …………………. CALL STATUS N; Проверка готовности N – ого ПУ и переход JNZ SERVICE N; на обслуживание, если устройство готово IRET; Возврат из подпрограммы поллинга
Конкретный вид процедур проверки готовности STATUS и обслуживания SERVICE зависит от типа ПУ. В простейшем случае подпрограмма проверки готовности выглядит так:
STATUS: IN SW; Ввод слова состояния SW ПУ ANI RDY; Выделение флага готовности - запроса RET; Возврат из подпрограммы
Опрашиваемый подпрограммой STATUS флаг готовности RDY обычно является и флагом потенциального запроса на прерывание IRQ. После обслуживания ПУ (например, операции ввода-вывода для портов) флаг RDY сбрасывается, автоматически снимая запрос на обслуживание. Очевидно, что, процедура поллинга может потребовать значительных временных затрат. Поэтому количество подключаемых к радиальной линии ПУ ограничивается требуемым временем реакции ВМ на запрос прерывания. Физический интерфейс векторной системы прерываний реализуется с помощью дополнительной БИС – программируемого контролера прерываний (ПКП), включаемого в состав ВМ по схеме, приведенной на рис.8.5. Микросхема программируемого контроллера прерываний (8259 или ее российский аналог КР580ВН59 обслуживает до восьми запросов прерываний IRQ, поступающих от периферийных (внешних) устройств. Расширение числа обслуживаемых запросов производится за счет каскадного включения ПКП, при котором к одному ведущему (master) подключается до восьми ведомых (slave) ПКП. Например, в IBM – совместимом компьютере используется каскадное включение двух ПКП, при котором ведомый ПКП подключен ко входу IRQ2 ведущего контролле ра как показано на рис.8.5. В процессе работы ПКП может находиться в режиме программирования и режиме обслуживания прерываний. В режиме программирования с помощью команд инициализации ICW (Initialization Command Word) ПКП устанавливается в исходное состояние и настраивается на определенный режим работы. В этом режиме задаются уровни приоритетов линий запросов (обычно высший IRQ0, низший IRQ7), чувствительность линий к перепаду или уровню сигналов запросов, определяются номера (типы) векторов прерываний для входов запросов (начальный номер и интервал следования номеров), указывается схема включения ПКП (одиночная или каскадная). В режиме обслуживания прерываний ПКП управляется с помощью команд управления операциями OCW (Operation Control Word). С помощью этих команд могут маскироваться запросы прерываний, задаваться режим циклического сдвига (ротации) приоритетов, производиться специальное маскирование на выбранном участке программы. В режиме обслуживания прерываний ПКП принимает запросы по входам IRQ0 – IRQ7, выбирает наиболее приоритетный из них и формирует сигнал прерывания INT для МП. Если прерывания разрешены, после завершения выполнения текущей команды МП выдает для ПКП сигнал подтверждения прерывания INTA. При работе с МП i8080 контроллер на первый сигал INTA1 выдает на шину данных код команды CALL. Процессор на этот код формирует еще два сигнала INTA2 и INTA3, по которым ПКП выдает два байта адреса прерывающей подпрограммы. При работе с МП i8086 в ответ на первый сигнал INTA1 контроллер не выдает данных в МП. Далее по сигналу INTA2 контроллер передает по шине данных в МП байт, определяющий номер (тип) прерывания. На этом этапе в стеке запоминается содержимое регистров F, CS, IP и сбрасываются флаги IF и TF. Тем самым запоминается адрес возврата и запрещаются внешние прерывания во входу INT, что нужно, например, для защиты начальных участков подпрограмм, в течении которых осуществляется включение в стек внутренних регистров МП. (Затем подпрограмма может разрешить внешние прерывания). Далее по номеру (типу) прерывания производится переход на подпрограмму обслуживания прерываний путем чтения и загрузки вектора прерывания из таблицы указателей векторов прерываний IDT в регистры IP и CS. В конце подпрограммы восстанавливают содержимое регистров МП, которые были включены в стек в начале подпрограммы с целью сохранения данных, относящихся к прерванной программе. Подпрограмма обработки прерывания должна заканчиваться командой возврата из прерывания IRET. Перед выполнением команды IRET стек должен быть в том состоянии, в котором он был сразу после вызова подпрограммы. Тогда эта команда считывает три верхние слова из стека в регистры IP, CS и F, что обеспечивает возврат к команде, которая выполнялась бы в случае отсутствия прерывания. Подробное изучение процесса прерывания позволяет определить реакцию компьютерной системы на сигналы прерывания.
|