Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
59
Добавлен:
20.03.2015
Размер:
273.92 Кб
Скачать

7.2.3. Обслуживание нескольких устройств

Рассмотрим случай, когда с процессором соединено несколько устройств, способ­ных инициировать прерывания. Поскольку эти устройства функционально незави­симы, они генерируют прерывания без какой-либо определенной последовательно­сти. Например, устройство Х может запросить прерывание во время обслуживания прерывания от устройства Y или несколько устройств могут запросить прерыва­ния одновременно. В связи с этим возникает ряд вопросов:

1. Как процессор распознает устройство, запросившее прерывание?

2. Если разным устройствам требуются различные программы обработки прерываний, как процессор в каждом случае будет получать начальный адрес соответствующей программы?

3. Можно ли устройствам прерывать процессор, пока обслуживается другое прерывание?

4. Как должны обрабатываться два или несколько одновременно поступив­ших запросов на прерывания?

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

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

Информация, необходимая для идентификации устройства, запросившего дан­ное прерывание, имеется в его регистре состояния. Когда устройство генерирует запрос прерывания, оно устанавливает в 1 один из разрядов в регистре состояния, называемый разрядом IRQ. Например, сигналы запросов на прерывания от кла­виатуры и дисплея устанавливают в 1 биты KIRQ DIRQ (см. рис. 7.3). Простей­ший способ определения устройства, запросившего прерывание, заключается в опросе всех присоединенных к шине устройств ввода-вывода. Сначала обслужи­вается устройство, у которого разряд IRQ был установлен первым. Для обработ­ки запроса вызывается соответствующая программа.

Реализовать описанную схему достаточно легко. Ее главным недостатком яв­ляется время, уходящее на проверку IRQ-разрядов тех устройств, которые не за­прашивали прерывание. В качестве альтернативы могут использоваться вектор­ные прерывания, о которых рассказывается в следующем разделе.

Векторные прерывания

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

Устройство, запросившее прерывание, может идентифицировать себя с помо­щью специального кода, пересылаемого процессору по шине, что позволяет ему, процессору, идентифицировать отдельные устройства даже в том случае, если они используют одну линию запроса прерывания. Этот код способен определять начальный адрес программы обработки прерывания, предназначенной для данно­го устройства. Длина адреса обычно составляет от 4 до 8 разрядов. Оставшаяся часть адреса формируется процессором на основе данных, хранящихся в специ­ально выделенной области памяти с адресами программ обработки прерываний.

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

В большинстве компьютеров устройства ввода-вывода направляют код векто­ра прерывания по шине данных с использованием управляющих сигналов шины, и это является гарантией того, что устройства не будут мешать друг другу. Когда устройство направляет процессору запрос прерывания, тот, возможно, еще не го­тов немедленно его получить. Не исключено, что ему, к примеру, сначала нужно завершить выполнение текущей команды, для чего, может быть, потребуется ис­пользовать шину. Если в момент запроса прерывания запрещены, возможны еще большие задержки. В таком случае устройство должно дождаться готовности процессора и лишь после этого поместить данные на шину. Когда процессор готов получить код вектора прерывания, он активизирует линию подтверждения пре­рывания INTA. Устройство ввода-вывода отвечает на это отправкой кода вектора прерывания и выдачей сигнала INTR.

Вложенные прерывания

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

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

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

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

Приоритет процессора обычно задается несколькими разрядами в слове, опре­деляющем его состояние. Он может быть изменен при помощи программных ко­манд, записывающих данные в регистр FX. Эти привилегированные команды вы­полняются лишь при условии, что процессор работает в режиме супервизора. (В данном режиме могут выполняться только программы операционной систе­мы.) Перед началом реализации прикладных программ процессор переключается в пользовательский режим. Таким образом, пользовательская программа не мо­жет случайно или намеренно изменить приоритет процессора и нарушить работу системы. Попытка выполнить привилегированную команду в пользовательском режиме вызывает прерывание особого типа, которое называется исключением за­щиты (privilege exception) и описано в разделе 7.2.5.

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

Рис. 7.7. Реализация приоритетов прерываний с использованием индивидуальных линий подтверждения прерывания

Одновременные запросы

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

В таком случае проще всего опрашивать регистры состояния устройств вво­да-вывода. Причем приоритеты этих устройств будут определяться порядком их опроса. При использовании векторных прерываний выбирается только одно уст­ройство, которое должно отправить свой код вектора прерывания. Широко рас­пространена схема соединения устройств в виде гирляндной цепи (рис. 7.8, а). При такой схеме линия запроса прерывания INTR является общей для всех устройств, а линия подтверждения прерывания INTA соединяет устройства в гарляндную цепь, так что сигнал по очереди проходит через каждое из них. Когда несколько устройств одновременно генерируют запрос прерывания и активизируется линия INTR, процессор отвечает установкой сигнала на линии INTA в значение 1. Первым этот сигнал получает устройство 1. Если обслуживание ему не требуется, оно пе­ресылает сигнал устройству 2. Если же устройство отправило запрос прерывания и ждет ответа, оно блокирует сигнал INTA и помещает свой идентификационный код на линии данных. Таким образом, в гирляндной схеме наивысший приоритет имеет устройство, которое ближе всего с точки зрения схемы подключения рас­положено к процессору.

Для реализации схемы, приведенной на рис. 7.8, а, требуется значительно меньше проводов, чем для отдельных соединений, показанных на рис. 7.7. Глав­ным преимуществом схемы на рис. 4.7 является то обстоятельство, что процессор может выбирать устройства с учетом их приоритетов. Эти схемы можно объеди­нить и в более универсальную структуру. На рис. 7.8, б устройства объединены в группы, каждой из которых назначен свой приоритет. Внутри группы устройства соединены в гирляндную цепь. Такая структура используется во многих компью­терных системах.

Рис. 7.8. Схемы приоритетов прерываний: гирляндная цепь (а); группы с приоритетами (б);

Соседние файлы в папке Архитектура компьютеров