Программно - управляемый обмен данными

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

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

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

1.Запустить внешнее устройство. Для этого необходимо вывести в регистр команд и состояний контроллера устройства команду запуска.

2.Проверить, готово устройство или нет. Для этого необходимо ввести содержимое регистра команд и состояний и проверить бит готовности. При неготовности устройства вернуться к шагу 2.

3.Устройство готово. Можно читать или писать данные.

Алгоритм программного обмена данными очень прост, реализуется небольшим числом команд. На ЭВМ с процессором 8086 и тактовой частотой 4 Мгц фрагмент программы, реализующий пункты 2 и 3 этого алгоритма, состоит из четырех команд, время его выполнения (время ввода одного байта) составляет приблизительно 10 МКс. Максимальная скорость обмена, таким образом, может достигать 100 Кбайт/с. Этот режим обеспечивает очень высокую скорость приема (или передачи) информации, т.к. после регистрации готовности внешнего устройства немедленно выполняется команда пересылки данных. Поэтому этот способ обмена применяется тогда, когда необходимо осуществлять ввод - вывод небольших порций данных и делать это очень быстро. Необходимо также отметить, что реализация этого способа обмена требует минимальных аппаратных затрат.

Однако этому методу обмена данными присущи существенные недостатки. Один из них состоит в том, что в процессе ожидания готовности процессор не может выполнять никакой полезной работы. Если устройство работает очень медленно, огромное количество процессорного времени расходуется бесполезно на выполнение цикла ожидания готовности. В качестве примера можно привести клавиатуру. Высококлассная машинистка способна вводить до 180 символов в минуту, т.е. до 3 символов в секунду, максимальная скорость ввода составляет 4 - 5 нажатий в секунду. Большую скорость ввода человек реализовать не способен из-за “неповоротливости” своих пальцев. При скорости 5 нажатий в секунду между отдельными нажатиями проходит 0.2 с. Даже такая “медленная” машина как IBM XT с процессором 8086 и тактовой частотой 4 МГц способна выполнить за это время десятки тысяч машинных операций. Хотя с точки зрения человека машинистка работает очень быстро, с точки зрения центрального процессора она “очень нетороплива”.

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

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

Обмен по прерываниям

Чтобы понять, что такое прерывание, обратимся к следующему примеру.

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

Вдруг звенит телефонный звонок. Звук звонка является сигналом, который заставляет изменить род деятельности. Человек запоминает, на каком месте он закончил читать, вкладывает в книгу закладку и прерывает чтение. Далее необходимо идентифицировать сигнал (отличить телефонный звонок от, например, звонка в дверь) и по виду сигнала определить, какие действия необходимо предпринять (открыть дверь или поднять трубку?).

Человек подходит к телефону и начинает разговор с приятелем. В это время на кухне закипает чайник. “Что там такое? Ах, это чайник!” Ладно, пусть себе покипит, приятель рассказывает что-то интересное, на чайник можно пока не обращать внимания.

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

Теперь несколько изменим ситуацию. Пусть опять чтение было прервано телефонным звонком и в процессе разговора опять на кухне что-то закипело. Только на этот раз закипел не чайник, а молоко. Это уже серьезнее. Человек говорит в телефонную трубку - “извини, сейчас!”, откладывает трубку и бежит на кухню обслуживать убегающее молоко. Молоко снято с плиты, оно спокойно остывает, можно вернуться к телефонному разговору. Он опять берет трубку и спрашивает: “Так на чем мы остановились? Ах, да!”, - и продолжает разговор; закончив его, возвращается к книге.

Каким бы несерьезным не показался данный пример, он позволил проиллюстрировать два очень важных в вычислительной технике понятия.

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

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

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

1.Получить запрос прерывания.

2.Идентифицировать запрос и выбрать соответствующую процедуру обслуживания прерывания.

3.Сохранить информацию о состоянии прерываемой работы.

4.Обслужить прерывание.

5.Восстановить состояние прерванной работы и вернуться к ее выполнению.

Функции подпрограммы обслуживания прерываний зависят от реализованной в процессоре системы уровней и приоритетов прерываний. В простейшем случае одноуровневой одноприоритетной системы, имеется только одно прерывание по вводу - выводу. Соответствующий сигнал формируется путем логического объединения прерываний от всех подсоединенных устройств ввода - вывода. Подпрограмма обслуживания прерывания опрашивает эти устройства и определяет то, в котором установлен признак прерывания. В многоуровневой одноприоритетной системе имеется одна линия запроса прерывания и ряд линий идентификации устройства. Когда внешнее устройство выдает сигнал в общую линию прерывания, оно также устанавливает свой уникальный код на линиях идентификации устройства. Такая система более сложна в плане ее реализации, но обеспечивает ускоренный ответ. В одноуровневой многоприоритетной системе линии прерывания различных устройств подключены к единственному входу прерываний процессора через логическую схему, обеспечивающую запрещение (маскирование) прерываний от низкоприоритетных устройств за счет прерываний устройств с более высоким приоритетом. Процессор опрашивает устройства в порядке их приоритета и определяет то из них, которое инициировало прерывание. В многоуровневых многоприоритетных системах имеются средства маскирования прерываний в соответствии с приоритетом и немедленной идентификации по сигналам соответствующих линий.

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

В состав шины управления входит несколько линий запроса прерывания IRQ n (Interrupt ReQuire). Каждая из линий имеет свой уникальный приоритет n. Различные устройства, в зависимости от их важности, подключаются к различным линиям запроса прерываний. Кроме того, имеется одна или несколько линий подтверждения прерываний INTA (INTerrupt Acnowlege).

Обслуживание прерываний производится по следующей обобщенной схеме.

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

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

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

3. Сохранение информации о состоянии процессора. После того, как обработка прерывания будет закончена, процессору нужно вернуться к выполнению прерванной задачи. Для того, чтобы это сделать, необходимо запомнить, в каком состоянии был процессор в результате выполнения предыдущей команды. Напомним, что все арифметические команды формируют признаки результатов во флаговом регистре процессора. Например, если процессор выполнял команду сравнения и был прерван, как он сможет выполнить следующую команду условного ветвления, если «не помнит» признаки, установленные при сравнении? Следовательно, при возникновении прерывания процессору необходимо сохранить содержимое своего флагового регистра. Кроме того, необходимо запомнить адрес команды, на которой прервалось выполнение программы, чтобы вернуться к ее выполнению после завершения прерывания. Напомним, что адрес команды, подлежащей выполнению, хранится в программном счетчике. Для сохранения всей необходимой информации используется аппаратный стек, принципы использования которого приведены выше при описании реализации механизма подпрограмм. Таким образом, при возникновении прерывания процессору необходимо включить в стек как минимум регистр флагов и программный счетчик. Арбитр прерываний запоминает, какой приоритет имел процессор при возникновении прерывания. Эта информация может сохраняться вместе с флаговым регистром процессора (как в ЭВМ PDP-11), а может фиксироваться в схеме арбитра (как в персональных ЭВМ фирмы IBM).

Подпрограмме обработки прерывания могут понадобиться для работы регистры процессора. Так как обработчик прерывания “не знает”, чем были заняты регистры процессора до прерывания, используемые регистры также необходимо сохранить. Для сохранения рабочих регистров также используется стек. В предельном случае потребуется запоминать содержимое всех регистров процессора. Процессы запоминания содержимого внутренних регистров после восприятия сигнала прерывания и восстановления его после окончания обработки прерывания называются контекстным переключением. Скорость контекстного переключения оказывает заметное влияние на производительность ЭВМ, особенно в условиях интенсивных прерываний. Поэтому во многих процессорах предусматриваются средства ускорения контекстных переключений, например, команды, которые загружают в стек и извлекают из стека содержимое группы регистров (пример - команды PUSHA и POPA процессора 80286). В идеальном случае контекстное переключение должно требовать минимум команд и времени.

4. Обработка прерываний. Процессор помещает адрес подпрограммы обслуживания прерываний в программный счетчик и приступает к выполнению этой подпрограммы.

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

Обработка прерывания завершена, прерванная программа продолжает выполняться.

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

Программно - управляемый обмен данными - student2.ru

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

Однако необходимо отметить, что реализация механизма прерываний требует некоторых потерь времени на выполнение арбитража, подтверждение прерывания, сохранение информации о состоянии процессора и восстановление этой информации после окончания прерывания. Так в ЭВМ с процессором 8086 и тактовой частотой 4 МГц издержки на организацию обработки прерывания составляют около 40 мкс. Эта величина учитывает только аппаратные издержки механизма прерываний без учета времени, затрачиваемого на сохранение и восстановление регистров центрального процессора, используемых подпрограммой обслуживания прерываний. Следует учитывать также то, что некоторые операционные системы могут накладывать свои ограничения на действия, выполняемые подпрограммами обслуживания прерываний. Наличие этих ограничений приводит к дополнительным издержкам времени. Для ЭВМ PDP-11 с операционной системой RT-11 величина этих издержек может составлять до 100 - 150 мкс. Поэтому максимальная скорость обмена данными по прерываниям будет меньше максимальной скорости программно-управляемого обмена данными. Применение прерываний имеет смысл только в том случае, когда необходимо совместить выполнение полезной вычислительной работы с обслуживанием нескольких медленных внешних устройств. В других случаях более предпочтительным могут оказаться другие способы обмена данными.

Наши рекомендации