- •30 Глава 2. Особенности аппаратных средств
- •Глава 2. Особенности аппаратных средств, влияющих на
- •2.1.3. От микропроцессора к микро-эвм
- •2.2. Архитектурные особенности микропроцессоров
- •2.3. Работа с внешними устройствами
- •2.4. Представление данных
- •2.5. Система команд
- •2.7. Об использовании вычислительных сетей
2.3. Работа с внешними устройствами
Р
абота
с внешними устройствами (ВУ) имеет
отчетливый аппаратно-программный
характер. С одной стороны, каждое внешнее
устройство - это аппаратура для
преобразования сигналов и ввода их в
ЭВМ (или вывода из нее); вместе с этим,
работа этого устройства должна управляться
программой. Для решения этой проблемы
для каждого ВУ изготавливают аппаратное
устройство сопряжения, называемое
контроллером, а для взаимодействия с
программой в этом контроллере выделяют
(по крайней мере, одну) пару регистров,
адреса которых фиксируются в общем
адресном пространстве, и таким образом
становятся доступны программе. Для
архитектуры DEC соответствующий пример
приведен на рис. 2.6.
Рис. 2.6. Векторы прерывания и регистры ВУ
В простейшем случае (как это имеет место, например, для принтера) используется один регистр состояния и один регистр данных. Опрашивая регистр состояния и анализируя бит готовности, программа может определить, можно ли передавать очередной байт для печати соответствующего символа (взводит этот бит готовности, естественно, аппаратура контроллера). Когда устройство готово, программа может записать код байта в регистр данных, а для контроллера это инициирует очередной цикл вывода символа на ВУ; при этом для обеспечения корректного взаимодействия с программой весь цикл начинается со сброса бита готовности в регистре состояния, и заканчивается его взведением.
Для электромеханических устройств печати, с которыми работала аппаратура фирмы DEC, вывод одного символа на печать занимал до 0,1 секунды, и все это время программа должна была опрашивать регистр состояния, дожидаясь готовности ВУ. При скорости работы процессора в сотни тысяч операций в секунду такой период фактического простоя очень расточителен, поэтому более рациональным режимом является работа по прерываниям. Суть этого процесса сводится к следующему.
Когда программа отдает в регистр данных код очередного символа для вывода на ВУ, она может начать заниматься «другими делами», а внешнее устройство, отработав вывод, не только взводит бит готовности в контроллере, но и присылает микропроцессору специальный сигнал (требование) прерывания. Процессор, закончив каждую очередную операцию, обязательно анализирует возникшие требования, и если сигнал прерывания появился, аппаратура выполняет определенную последовательность действий, подключая при необходимости специальную программу для обработки возникших прерываний. Логика работы здесь усложняется тем, что прерывания возникают спонтанно, непредсказуемо для программы, занимающей процессор в этот момент. Для разрешения коллизии аппаратура автоматически сохраняет в стек минимально необходимые сведения о работающей программе (состояние регистров счетчика команд PC и состояния процессора PS) и подменяет их на новые значения, соответствующие программе обработки требуемого прерывания. Остается определить, где взять соответствующие коды? Для их размещения в архитектуре процессора предусмотрена специальная область в ОЗУ, где для каждого устройства закреплены адреса для размещения вектора прерывания (двух кодов, определяющих адрес обслуживания прерывания и начальное слово состояния процессора).
Когда аппаратура отреагирует на прерывание указанным образом, продолжающий работу процессор обратится уже по новому адресу и начнет выполнять не только что работавшую программу, а программу обработки прерывания. Эта программа после своего завершения должна будет вернуть управление прерванной программе, но для своей работы ей могут потребоваться регистры общего назначения, поэтому для начала все РОНы (уже программным путем) сохраняются в стек, а перед выходом из прерывания восстанавливаются. В рассматриваемом случае работы с печатью программа обработки прерывания сама обращается за очередным кодом к определенной области памяти, согласованной с основной программой, пересылает этот код в регистр данных ВУ и выполняет (после восстановления состояния РОНов) команду выхода из прерывания. По этой команде аппаратура извлекает из стека сохраненные там ранее коды PS и PC и возвращает их в соответствующие регистры. После этого процессор, получив управление, возобновляет работу прерванной программы «как ни в чем не бывало».
Обычно программы, обслуживающие прерывания и работу с ВУ, являются частью операционной системы, и для каждого ВУ такая программа называется драйвером (от англ. drive - привод). Для каждого контроллера адрес вектора прерывания соответствующего ВУ обычно «зашит» в аппаратуре контроллера. Обобщенная схема взаимодействия ВУ - контроллер - драйвер - микропроцессор представлена на рис. 2.7.
В архитектуре DEC, где регламентированы определенные ступени наращивания мощности аппаратных средств, регистры ВУ всегда располагаются в самых старших адресах доступного адресного пространства, а вектора прерывания - в самых младших. В архитектуре Intel регистры состояния и регистры данных для каждого устройства объединяют в понятие «порт» (данные туда «приплывают» и оттуда «уплывают», в иностранных языках port означает «носить», «приносить»); 256 векторов прерывания и адресов портов ВУ занимают в адресном пространстве младшие 64 Кбайт (рис. 2.8).
