Спецификации механизма
Пусть базовой операцией является передача одного байта информации из ячейки памяти к периферийному устройству. Состояние пары контроллер - устройство определяется словом состояния, содержащимся в контроллере. Слово состояние включает совокупность следующих.
Указатель | Значение |
ГОТОВ | Устройство готово к работе; дополнительные условия зависят от устройства. |
КОНЕЦ | Передача завершена; устройство готово передать новый символ. |
ОШИБКА | Во время передачи произошла ошибка, которая может быть уточнена кодом, составляющим часть слова состояния. |
Контроллер управляется центральным процессором с помощью следующих примитивов.
Примитив | Назначение |
ВВЕСТИ(А_П,А_У) | Требует передачи байта из устройства с адресом А_У в ячейку памяти с адресом А_П. |
ВЫВЕСТИ(А_П,А_У) | Требует передачи байта из ячейки памяти А_П на устройство А_У. |
ТЕСТ(А_У) | Копирует слово состояния устройства А_У в регистр для проверки указателей. |
Алгоритм работы драйвера.
Пусть требуется вывести последовательность символов(байтов), содержащихся в памяти. Символдля не может быть выведен на периферийное устройство, пока не завершится вывод символа
КОНЕЦ:=false;
ТЕСТ(А_У);
if not ГОТОВ
then <Обработка ошибки>;
for i:=0 to n-1 do
begin
ВЫВЕСТИ(T[i],А_У);
repeat
ТЕСТ(А_У);
if ОШИБКА
then <Обработка ошибки>;
until КОНЕЦ;
end
Асинхронный ввод-вывод: спецификация ввода-вывода, принципы работы драйвера.
Пусть при переходе указателя конец к значению истина контролер вызывает прерывание центрального процессора. Прерывание таким образом сигнализирует о конце передачи элемента , процесс вывода массива Т будет приводится в действие передачи символа
Работа драйвера будет выглядеть следующем образом:
Главная программа.
ЗАКОНЧЕН:=false;
i:=0;
ВЫВЕСТИ(T[0],А_У);
...
<параллельная обработка>
...
if ЗАКОНЧЕН
then ...
Обработчик прерывания.
<Сохранить контекст>;
ТЕСТ(А_У);
if ОШИБКА
then <Обработка ошибки>
else
begin
if i<n-1 then
begin
i:=i+1;
ВЫВЕСТИ(T[i],А_У);
end
else ЗАКОНЧЕН:=true
end;
<Восстановить контекст>