Статус
нашего
сайта:
ICQ Secrets Center is Online  ICQ Information Center


ICQ SHOP
     5-значные
     6-значные
     7-значные
     8-значные
     9-значные
     Rippers List
ОПЛАТА
СТАТЬИ
СЕКРЕТЫ
HELP CENTER
OWNED LIST
РОЗЫСК!New!
ICQ РЕЛИЗЫ
Протоколы ICQ
LOL ;-)
Настройка компьютера
Аватарки
Смайлики
СОФТ
     Mail Checkers
     Bruteforces
     ICQTeam Soft
     8thWonder Soft
     Other Progs
     ICQ Patches
     Miranda ICQ
ФорумАрхив!
ВАШ АККАУНТ
ICQ LiveJournal

Реклама

Наш канал:

irc.icqinfo.ru

Таненбаум Э.- Архитектура компьютера. стр.303


Таненбаум Э.- Архитектура компьютера. стр.303 Таненбаум Э.- Архитектура компьютера.

Рис. 5.20. Регистры устройств в простом терминале

В регистре состояния клавиатуры из 8 бит используются только 2. Самый левый бит аппаратно устанавливается всякий раз, когда в буфере клавиатуры появляется символ. Если предварительно программно был установлен бит 6, выполняется прерывание. В противном случае прерывания не происходит. При программируемом вводе-выводе для получения входных данных центральный процессор обычно периодически в цикле считывает регистр состояния клавиатуры, пока бит 7 не получит значение 1. Когда это случается, программно считыва-ется буферный регистр клавиатуры, чтобы получить символ. Считывание регистра данных вызывает сброс бита наличия символа.

Вывод осуществляется аналогично. Чтобы вывести символ на экран, сначала программно считывается регистр состояния дисплея, чтобы узнать, установлен ли бит готовности. Если он не установлен, цикл выполняется снова и снова до тех пор, пока бит готовности не станет равным единице. Это будет означать, что устройство готово принять символ. Как только терминал приходит в состояние готовности, символ программно записывается в буферный регистр дисплея, который выводит символ на экран и дает сигнал устройству сбросить бит готовности в регистре состояния дисплея. Когда символ появляется на экране, а терминал подготавливается к обработке следующего символа, контроллер снова устанавливает бит готовности.

В качестве примера программируемого ввода-вывода рассмотрим ^уа-про-цедуру (листинг 5.5). Эта процедура вызывается с двумя параметрами: массивом символов, которые нужно вывести, и количеством символов, имеющимся в массиве (до килобита). Тело процедуры представляет собой цикл, в котором выводится по одному символу. Сначала центральный процессор ждет готовности устройства и только после этого выводит символ, и эта последовательность дей ствий повторяется для каждого символа. Процедуры in и out — это типичные процедуры ассемблера для чтения и записи регистров устройств, которые определяются по первому параметру. Переменная, из которой выполняется чтение или в которую производится запись, определяется по второму параметру. Деление на 128 (путем сдвига вправо на 7 разрядов) ликвидирует младшие 7 бит, при этом бит готовности оказывается в нулевом разряде.

Листинг 5.5. Пример программируемого ввода-вывода

public static void output_buffer(int buf[], int count) { // Вывод блока данных на устройство int status, i. ready;

for (i = 0; i<count; i++) { do {

status = in(display_status_reg); // получение информации

// о состоянии устройства ready = (status » 7) & 0x01; // выделение бита

// готовности

} while (ready == 1); out(display_buffer_reg, buf[i]);

}

}

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


⇐ Предыдущая страница| |Следующая страница ⇒

.