К. Хамахер, З. Вранешич, С. Заки - Организация ЭВМ - 5-е издание (2003) (1114649), страница 56
Текст из файла (страница 56)
Уровень приоритета процессора — это уровень приоритета текущей выполняемой программы. Процессор принимает прерывания от устройств, имеющих более высокий приоритет, чем его собственный. Когда начинается выполнение программы обработки прерываний некоторого устройства, процессору назначается приоритет этого устройства. Тем самым запрещаются прерывания от любых устройств с тем же или более низким приоритетом.
Приоритет процессора обычно задается несколькими разрядами в слове, определяющем его состояние. Он может быть изменен при помощи программных комаля, записывающих данные в регистр РБ. Эти привилегированные команды выполняются лишь при условии, что процессор работает в режиме супервизора (В данном режиме могут выполняться только программы операционной системы.) Перед началом реализации прикладных программ процессор переключается в пользовательский режим.
Таким образом, пользовательская программа не может случайно или намеренно изменить приоритет процессора и нарушить работу системы. Попытка выполнить привилегированную команду в пользовательском режиме вызывает прерывание особого типа, которое называется исключением защигпы (рптт)ейе ехсергюп) и описано в разделе 4.2.5. Многоуровневая схема приоритетов может быль реализована с помощью отдельных линий запроса и подтверждения прерываний для каждого устройства, как показано на рис.
4.7. Каждой линии запроса прерывания присваивается свой уровень приоритета. Запросы прерываний, получаемые по этим линиям, направляются на арбитражную схему процессора. Запрос принимается только в том случае, если у него более высокий уровень приоритета, чем у процессора в данный момент. 4.2. Прерывания 241 Арбитражная схема Рис.
4.7. Реализация приоритетов прерываний с использованием индивидуальных линий подтеерхгдения прерывания Одновременные запросы Теперь давайте рассмотрим проблему одновременного поступления запросов прерываний от двух или более устройств. Процессор должен располагать средствами для выбора между этими запросами. При использовании схемы приоритетов, показанной на рис. 4.7, решение гголучается довольно простым: процессор выбирает запрос с наивысшим приоритетом. Но если несколько устройств используют одну линию запроса прерывания, как на рис. 4.6, то необходим иной механизм. В таком случае проще всего опрашивать регистры состояния устройств ввода-вывода.
Причем приоритеты этих устройств будут определяться порядком их опроса. При использовании векторных прерываний выбирается только одно устройство, которое должно отправить свой код вектора прерывания. Широко распространена схема соединения устройств в виде гирляндной мели (рис. 4.8, а). При такой схеме линия запроса прерывания??нТВ является общей для всех устройств, а линия подтверждения прерывания ??я'ТА соединяет устройства в гирляндную цепь, так что сигнал по очереди проходит через каждое из них.
Когда несколько устройств одновременно генерируют запрос прерывания и активизируется линия ?МТВ, процессор отвечает установкой сигнала на линии Гй?ТА в значение 1. Первым этот сигнал получает устройство 1. Если обслуживание ему не требуется, оно пересылает сигнал устройству 2. Если же устройство отправило запрос прерывания в ждет ответа, оно блокирует сигнал 1?х?ТА и помещает свой идентификационный код на линии данных. Таким образом, в гирляндной схеме наивысший приоритет имеет устройство, которое ближе всего с точки зрения схемы подключения расположено к процессору. Для реализации схемы, приведенной на рис. 4.8, а, требуется значительно меньше проводов, чем для отдельных соединений, показанных на рис.
4,7. Главным преимуществом схемы на рис. 4.7 является то обстоятельство, что процессор может выбирать устройства с учетом их приоритетов. Эти схемы можно объединить и в более универсальную структуру. На рис. 4.8, б устройства объединены в группы, каждой из которых назначен свой приоритет. Внутри группы устройства соединены в гирляндную цепь. Такая структура используется во многих компьютерных системах. 242 Глава 4. Ввод-вывод ство л 1ЙТК1 схема рис. 4.8. Схемы приоритетов прерываний: гирленднае цепь [а); группы с приоритетами (В; 4.2.4. Управление запросами устройств До сих пор мы предполагали, что интерфейс устройства ввода-вывода генерирует запрос прерывания, когда устройство готово к операции пересылки данных, например, когда флаг 51Х на рис.
4.3 устанавливается в значение 1. При атом важно гарантировать, что запросы прерываний будут генерироваться только теми устройствами ввода-вывода, которые используются данной программой. Не задействованные на данный момент устройства не должны генерировать запросов прерываний, даже если они готовы выполнить операции ввода-вывода. Таким образом, в интерфейсных схемах устройств ввода-вывода должен бьггь заложен механизм, определяющий, когда можно, а когда нельзя генерировать запросы прерываний. Обычно для зтого используется один разряд, разрешающий или запретдающий прерывания, как, например, флаг разрешения прерывания от клавиатуры КЕМ и флаг разрешения прерывания от дисплея РЕЯ в регистре ОО1т1ТКОЕ на рис.
4.3. Когда такой флаг установлен, устройство генерирует запрос прерывания, как только устанавливается соответствующий флаг в регистре ЯТАТПЯ. Одновременно интерфейсная схема устанавливает разряд К1КЯ или Р1КЯ, указывая таким образом, что данное устройство запросило прерывание. Если флаг разрешения прерывания равен О, интерфейсная схема не генерирует запросов прерываний независимо от того, какой флаг состояния активен. 4.2. Прерывания 243 Существует два независимых механизма управления запросами прерывания. Со стороны устройства решение о том, можно ли ему генерировать запросы прерывания, зависит от состояния разряда разрешения на прерывание.
Со стороны процессора решение о том, будет ли принят запрос на прерывание, зависит либо от разряда разрешения прерываний в регистре РБ, либо от системы приоритетов. Пример 4.3 Рассмотрим процессор, в котором используется векторная схема прерываний.
Начальный адрес подпрограммы обработки прерываний хранится в памяти по адресу 1ХТЧЕС. Прерывания разрешаются установкой разряда разрешения пре- рываний 1Е (9 разряда) в слове состояния процессора. Клавиатура и дисплей, подключенные к этому процессору, имеют регистры состояния и данных, а также управляющий регистр (рис. 4.3). Предположим, что в некоторой точке главной программы требуется прочитать введенную с клавиатуры строку и сохранять составляющие ее символы в после- довательности байтов в памяти компьютера начиная с адреса 1.1ХЕ. Для выпол- нения данной операции с помощью прерываний нам нужно будет инициализиро- вать процесс прерываний. Вот как это делается. 1.
Загружаем начальный адрес програмь.ы обработки прерывания по адресу 1ХТЪ'ЕС, 2. Загружаем адрес 1.1ХЕ в память по адресу РХТК. Программа обработки прерываний будет использовать его в качестве указателя для сохранения вводимых символов в памяти. 3. Разрешаем прерывания от клавиатуры, для чего устанавливаем в 1 второй разряд регистра СОХТК01, 4. Разрешаем прерывания в процессоре, для чего устанавливаем в 1 разряд 1Е в регистре состояния процессора РБ. После такой инициализации в ответ на ввод символа с клавиатуры интер- фейсная схема клавиатуры будет генерировать запрос прерывания. Выполняемая в данный момент программа будет прервана и управление будет передано про- грамме обработки прерываний, которая должна выполнить целый ряд действий. 1. Прочитать из регистра входных данных клавиатуры введенный символ.
В ответ интерфейсная схема удалит свой запрос прерывания. 2. Сохранить символ в памяти компьютера по адресу, указанному в РХТЕ, и увеличить значение РХТК. 3. По достижении конца строки запретить прерывания от клавиатуры и проинформировать об этом программу Ма1п. 4. Выполнить команду возврата из процедуры обработки прерывания. Команды, ответственные за выполнение этой задачи, перечислены на рис. 4.9.
Обнаружив конец строки, программа обработки прерывания очистит разряд КЕХ в регистре СОХТКО(„поскольку дальнейшего ввода не ожидается. А еще она ус- тановит в 0 переменную Е01. (конец строки), которая первоначально имела зна- чение 1. Мы предполагаем, что главная программа периодически проверяет дан- ную переменную, чтобы узнать, готова ли введенная строка для обработки.
244 Глава 4. Ввод-вывод Главная программа №Е11чЕ,Р)чТК Инициализация указателя на буфер Е01. Очистка индикатора конца строки №2,СО)чТКОЕ Разрешение прерываний от клавиатуры №9,РЗ Установка разряда разрешения прерываний э РБ Программа обработки прерывания КЕАГ1 МоуеМи111р1е КО-К1,-(ЗР) Моче Р)чТК,КО Моче Вуге ЭАТАПч, К1 МочеВуге К1,(КО)э Моче КО,Р)чТК СошрагеВуге №$ОЭ,К1 Сохранение в стеке регистров КО и К1 Загрузка указателя адреса Чтение введенного символа н сохранение его э памяти Обновление указателя Проверка того, введен ли символ возврата каретки ВгапсЬФО КТК)ч Моче №1,Е01. ВКС!еаг №2,СОХТКОЕ КТК)ч МоуеМп!11р!е (БР)э,КО-К1 Кегшп (гош шгеггирг Рис.
4.9. Использование процедуры обработки прерываний для чтения строки символов с клавиатуры через регистры, показанные на рис. 4.3 Операции ввода-вывода в компьютерной системе обычно гораздо сложнее, чем в наших простых примерах. Как рассказывается в разделе 4.2.5, для пользовательских программ эти операции выполняет операционная система компьютера. 4.2.5.