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

7. Ввод-вывод

Одной из важнейших функций компьютера является поддержка устройств вво­да-вывода. Благодаря этому оператор, к примеру, может использовать клавиату­ру и дисплей для работы с текстом и графикой. Компьютеры применяются для взаимодействия с другими компьютерами через Интернет, а следовательно, пре­доставляют доступ к информации, находящейся в различных частях земного ша­ра. Роль компьютеров в решении других задач может быть менее заметной, но не менее важной. Компьютеры используются дома, в учебных аудиториях, на произ­водстве, в различных транспортных, банковских и коммерческих системах — раз­нообразие сфер их применения просто впечатляет. Данные могут поступать в компьютер от самых разных приборов: сенсорных устройств, видеокамер, в том числе цифровых, микрофонов или даже с пультов пожарной сигнализации. Вы­ходными же данными могут служить направляемый в колонки звуковой сигнал или, скажем, закодированная цифровая команда, изменяющая скорость мотора, открывающая вентиль или заставляющая робота выполнить определенное дви­жение. Короче говоря, компьютер должен обладать способностью обмениваться информацией с широким диапазоном устройств в различных окружениях.

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

7.1. Доступ к устройствам ввода-вывода

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

Рис. 7.1. Архитектура системы с общей шиной

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

Move R0,DATAIN

Аналогичным образом команда

Move DATAOUT,R0

пересылает содержимое регистра R0 по адресу DATAOUT, который может соот­ветствовать выходному буферу дисплея или принтера.

Технология ввода-вывода с отображением в память применяется в большинст­ве компьютерных систем. Некоторые процессоры для выполнения операций вво­да-вывода поддерживают специальные команды In и Out. Например, процессоры семейства Intel, имеют специальные команды ввода-вывода и отдельное 16-разрядное адресное пространство для устройств ввода-вывода. Соз­давая компьютерную систему на основе такого процессора, конструктор может либо соединить все устройства ввода-вывода так, чтобы они использовали специ­альное адресное пространство ввода-вывода, либо подключить их как часть ад­ресного пространства памяти. Второй подход позволяет упростить программное обеспечение, поэтому используется он значительно чаще. Одним из преимуществ наличия отдельного адресного пространства ввода-вывода является то, что соот­ветствующие устройства могут использовать меньшее количество адресных ли­ний. Но имейте в виду, что наличие отдельного адресного пространства ввода-вы­вода еще не означает, что адресные линии ввода-вывода физически отделены от адресных линий памяти. На тот факт, что запрошенная операция чтения или за­писи относится к системе ввода-вывода, может указывать передаваемый по шине специальный сигнал. Получив такой сигнал, память игнорирует запрошенную операцию, а устройства ввода-вывода анализируют младшие разряды переданно­го по шине адреса, чтобы узнать, кому из них направлен запрос.

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

Рис. 7.2. Интерфейс ввода-вывода для устройства ввода

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

В случае входного устройства, подобного клавиатуре, в схему сопря­жения в виде одного из разрядов регистра состояния включается флаг состояния SIN. Он устанавливается в 1, если символ вводится с клавиатуры, и сбрасывается в 0, если символ считывается процессором. Таким образом, проверяя значения флага SIN, программное обеспечение гарантирует корректность операции чте­ния данных. Для этого обычно организуется программный цикл, считывающий регистр состояния и проверяющий состояние флага SIN. Обнаружив, что флаг установлен в 1, программа считывает значение из регистра входных данных. Ана­логичным образом может осуществляться управление операциями вывода, но в этом случае применяется флаг состояния SOUT.

Пример 7.1________________________________________________________________________

Для того чтобы лучше усвоить базовые концепции ввода-вывода, мы рассмотрим простой пример с участием клавиатуры и дисплея. Для операций пересылки дан­ных используются четыре регистра (рис. 7.3). В регистре STATUS содержатся два управляющих флага, SIN и SOUT, хранящие соответственно информацию о состоянии клавиатуры и дисплея. Еще два флага из этого регистра, KIRQ, и DIRQ, используются при обработке прерываний. О флагах KEN и DEN, относя­щихся к регистру CONTROL, будет рассказано в разделе 7.2. Вводимые с клавиа­туры данные помещаются в регистр DATAIN, а данные, отправляемые на дис­плей, — в регистр DATAOUT.

Рис. 7.3. Регистры интерфейса клавиатуры и дисплея

Mov EAX,Offset Buffer Инициализация указателя на память

WAITK TB STATUS,0 Проверка флага SIN

JE WAITK Ожидание ввода символа

Mov BL,DATAIN Чтение символа

WAITD TB STATUS,1 Проверка флага SOUT

JE WAITD Ожидание момента готовности дисплея

Mov DATAOUT,BL Отправка символа на дисплей

Mov (EAX),BL Сохранение символа в памяти и увеличение

INC DWORD PTR (EAX) значения указателя

CMP BL,0D Проверка того, введен ли символ возврата каретки

JNE WAITK Если символ возврата каретки не введен,

считывается следующий символ

MOV DATAOUT,0Ah Если символ возврата каретки введен,

на дисплей отправляется символ перевода строки

Call PROCESS Вызов подпрограммы для обработки введенной

строки

Рис. 7.4. Программа, которая считывает с клавиатуры одну строку, сохраняет ее в буфере памяти, а затем отображает на дисплее

Программа, приведенная на рис. 7.4 считывает с клавиатуры строку символов и сохраняет ее в памяти, в буфере, начинающемся с адреса LINE. Затем она вызывает подпро­грамму PROCESS, выполняющую обработку введенной строки. Каждый вводи­мый символ отображается на дисплее. Регистр EAX используется как указатель на буфер в памяти. Его содержимое обновляется с применением автоинкрементного режима адресации, благодаря чему последовательно вводимые символы сохраня­ются в памяти по последовательным адресам.

После ввода каждого символа подпрограмма проверяет, не является ли он символом возврата каретки (шестнадцатеричным ASCII-кодом 0D). Если он та­ковым является, на дисплей отправляется символ перевода строки (шестнадцате­ричный ASCII-код 0А), перемещающий курсор на одну строку вниз. Затем вызы­вается подпрограмма PROCESS. Если введен любой другой символ, программа переходит на начало цикла и ждет ввода следующего символа.

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

Существует еще два распространен­ных механизма реализации ввода-вывода:

прерывания и

прямой доступ к памяти.

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

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