К. Хамахер, З. Вранешич, С. Заки - Организация ЭВМ - 5-е издание (2003) (1114649), страница 55
Текст из файла (страница 55)
После сохранения в стеке регистра РС и регистра состояния процессора РЯ процессор выполняет действия, эквивалентные команде запрета прерываний. Очень часто для запрета и разрешения прерываний используется один разряд в регистре РЯ, называемый флагом разрешения прерываний (1пгеггирг-епаЫе). Если прерывания разрешены, этот разряд содержит 1, а если запрещены — О. После сохранения в стеке регистра РЯ, в котором разряд разрешения прерываний установлен в 1, процессор очищает этот разряд в своем регистре РЯ, запрещая тем самым дальнейшие прерывания.
При выполнении команды возврата из прерывания содержимое регистра РЯ восстанавливается из стека и флаг разрешения прерываний снова становится равным 1. Это значит, что прерывания разрешены. Третий механизм предполагает, что у процессора имеется специальная линия запроса прерываний и что схема управления прерываниями отвечает только на передний фронт сигнала.
Эта линия назгявается управляемой фронтом сигнала. При такой схеме работы процессор получает только один запрос прерывания, независимо от того, как долго линия остается активной. Это значит, что повторяющихся прерываний быть не может и нет необходимости явно отключать запросы прерывания на данной линии. Прежде чем мы перейдем к более сложным аспектам прерываний, давайте еще раз коротко определим последовательность событий, происходящих в ходе обработки запроса прерывания от одного устройства. Если предположить, что изначально прерывания разрешены, эта последовательность будет следующей. 1.
Устройство генерирует запрос прерывания. 2. Процессор прерывает текущую выполняемую программу. 3. Последующие прерывания запрещаются, для чего изменяются управляющие биты в регистре РЯ (за исключением схем, в которых линия запроса прерывания управляется фронтом сигнала). 4. Устройство информируется о том, что его запрос распознан, и в ответ сбрасывает сигнал запроса на прерывание.
5. Запрошенное прерыванием действие выполняется программой обработки прерывания. 6, Прерывания разрешаются, выполнение программы возобновляется. 238 Глава 4. Ввод-вывод 4.2.3. Обслуживание нескольких устройств Рассмотрим случай, когда с процессором соединено несколько устройств, способных инициировать прерывания. Поскольку эти устройства функционально независимы, они генерируют прерывания без какой-либо определенной последовательности. Например, устройство Х может запросить прерывание во время обслуживания прерывания от устройства У или несколько устройств могут запросить прерывания одновременно.
В связи с этим возникает ряд вопросов: 1. Как процессор распознает устройство, запросившее прерывание? 2. Если разным устройствам требуются различные программы обработки прерываний, как процессор в каждом случае будет получать начальный адрес соответствующей программы? 3. Можно ли устройствам прерывать процессор, пока обслуживается другое прерывание? 4. Как должны обрабатываться два или несколько одновременно поступивших запросов на прерывания? Существуют разные способы решения этих вопросов, и при выборе компьютера для определенных задач обычно учитывают, какая стратегия в нем используется. Итак, когда процессор получает запрос прерывания по общей линии (рис. 4.6), ему требуется дополнительная информация, для того чтобы определить, какое из устройств активизировало эту линию.
Далее, если два устройства активизировали линию одновременно, нужно выбрать одно из них для обслуживания. Когда первое устройство будет обслужено, наступит очередь второго. Информация, необходимая для идентификации устройства, запросившего данное прерывание, имеется в его регистре состояния. Когда устройство генерирует запрос прерывания, оно устанавливает в 1 один из разрядов в регистре состояния, называемый разрядом 1Щ. Например, сигналы запросов на прерывания от клавиатуры и дисплея устанавливают в 1 биты К1КЯ и П1Щ (см. рис. 4.3).
Простейший способ определения устройства, запросившего прерывание, заключается в опросе всех присоединенных к шине устройств ввода-вывода. Сначала обслуживается устройство, у которого разряд 1КЯ был установлен первым. Для обработки запроса вызывается соответствующая программа. Реализовать описанную схему достаточно легко.
Ее главным недостатком является время, уходящее на проверку 1КЯ-разрядов тех устройств, которые не запрашивали прерывание. В качестве альтернативы могут использоваться векторные прерывания, о которых рассказывается в следующем разделе. Векторные прерывания Для сокращения времени, уходящего на опрос устройств, можно реализовать схему, обратную описанной выше: устройство само будет идентифицировать себя для процессора. Это позволит процессору начинать выполнение программы обработки прерывания сразу же после поступления запроса.
Термин векторные прерывания относится ко всех схемам обработки прерываний, основанным на таком подходе. 4.2. Прерывания 239 Устройство, запросившее прерывание, может идентифицировать себя с помощью специального кода, пересылаемого процессору по шине, что позволяет ему, процессору, идентифицировать отдельные устройства даже в том случае, если они используют одну линию запроса прерывания. Этот код способен определять начальный адрес программы обработки прерывания, предназначенной для данного устройства. Длина адреса обычно составляет от 4 до 8 разрядов.
Оставшаяся часть адреса формируется процессором на основе данных, хранящихся в специально выделенной области памяти с адресами программ обработки прерываний. При этом предполагается, что программа обработки прерываний от конкретного устройства должна всегда располагаться по одному и тому же адресу. Для обеспечения большей ее гибкости программист может поместить по этому адресу команду, выполняющую переход к соответствующей подпрограмме. Во многих компьютерах такой переход автоматически выполняется механизмом обработки прерываний.
То место в памяти, на которое указывает вызвавшее прерывание устройство, используется для хранения начального адреса программы обработки прерывания. Процессор считывает этот адрес, называемый вектором прерывания, и загружает его в регистр РС. Кроме адреса вектор прерывания может содержать новое значение регистра состояния процессора, В большинстве компьютеров устройства ввода-вывода направляют код вектора прерывания по шине данных с использованием управляющих сигналов шины, и зто является гарантией того, что устройства не будут мешать друг другу. Когда устройство направляет процессору запрос прерывания, тот, возможно, еще не готов немедленно его получить. Не исключено, что ему, к примеру, сначала нужно завершить выполнение текущей команды, для чего, может быть, потребуется использовать шину.
Если в момент запроса прерывания запрещены, возможны еще большие задержки. В таком случае устройство должно дождаться готовности процессора и лишь после этого поместить данные на шину. Когда процессор готов получить код вектора прерывания, он активизирует линию подтверждения прерывания?ЫТА. Устройство ввода-вывода отвечает на это отправкой кода вектора прерывания и выдачей сигнала 1ХТК. Вложенные лрерываннв В разделе 4.2.1 было сделано предположение, что на время выполнения программы обработки прерывания все прерывания должны быть запрещены, При этом условии запрос одного устройства не сможет вызвать более одного прерывания.
Этот принцип часто используется и в тех случаях, когда в системе имеется несколько устройств. В результате нх прерывания обрабатываются по очереди, а начатая программа обработки прерывания выполняется до конца, до того как процессор получает запрос прерывания от другого устройства. Программы обработки прерываний в большинстве своем достаточно коротки, и вызываемая ими задержка для преобладающей части простых устройств обычно бывает вполне приемлемой. Однако в некоторых случаях большая задержка с ответом на запрос прерывания может привести к неверному функционированию устройств.
В качестве примера рассмотрим работу компьютера, отслеживающего время с помощью таймера 240 Глава 4. Ввод-вывод реального времени — устройства, которое направляет процессору запросы прерываний через фиксированные промежутки времени. По каждому из таких запросов процессор выполняет короткую программу обработки прерывания, увеличивающую хранящийся в памяти набор значений счетчиков, содержащих количество секунд, минут и т. д. Правильное функционирование таймера возможно при условии, что время задержки перед обработкой запроса прерывания значительно меньше временного интервала между запросами.
Это требование будет выполняться лишь в том случае, если запрос прерывания от таймера будет приниматься во время выполнения программы обработки прерывания, вызванного другим устройством. Последний пример показывает, что для правильной организации ввода-вывода должна использоваться система приоритетов устройств. Во время обслуживания процессором прерывания от устройства им должны приниматься запросы прерываний от устройств с более высоким приоритетом.
Многоуровневая система приоритетов означает, что в ходе выполнения программы обработки прерываний запросы на прерывания от одних устройств будут приниматься, а от других — нет. Для того чтобы реализовать такую схему обработки прерываний, необходимо процессору присвоить уровень приоритета, который будет меняться в зависимости от выполняемой программы.