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

2.2.1. Синхронный ввод-вывод

При синхронном вводе-выводе отсутствует параллелизм между обработкой и передачей информации. Процессор занят в течение всего времени передачи. Хорошим примером может быть печать документов на принтере под управлением ОС с синхронным вводом-выводом. После отправки документа на печать пользователь вынужден ждать окончания обработки своего задания – заниматься во время печати полезной работой он не может.

Синхронный ввод-вывод был стандартным для большинства ОС (например, для MS-DOS), которые работали на компьютерах с низкой производительностью процессора, для которых актуальность параллельной обработки была невелика. Увеличить производительность системы с такой организацией можно достаточно простым способом – снабдить ПУ собственным буфером памяти, в котором могут размещаться данные для вывода или ввода. Например, принтер HP LJ4P оснащен собственной памятью в объеме 2МБ. Передав необходимые для печати данные в эту память, пользовательская программа может продолжать свою работу.

Синхронный ввод и вывод информации можно осуществить использую предопределенные массивы Port и PortW.

Port [<Addr>]- осуществляет связь с портом. Порт имеет абсолютно точный адрес, состоящий из трех шестнадцатеричных цифр. Портом называется специальный адрес, по которому хранится, как правило регистр (входной / выходной) периферийного устройства.

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

Массив Port употребляется для написания системных программ без обращения к драйверам ОС.

a:=Port[$367];

Port W [...]- обращение к порту с помощью слова.

Необходимо абсолютно точно знать конструкцию порта. Если порт длиной 1 байт, а происходит обращение как к 2-х байтному, то за одно обращение происходит связь с 2-м портам, при этом адрес второго отличается на 1 от адреса, заданного в PortW.

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

Пример. Пусть по адресу $246 находится регистр устанавливающий периферийное устройство в готовность к передаче данного, если у него установить 3 бит. По адресу $247 находится порт данных, в который нужно передать байт информации, хранящийся в переменной DAT.

Var Dat,Port_dat:byte;

…………….

Begin

……..

Port_dat:=Port[$246];

Port[$246]:=Port_dat or 8;

Port[$247]:=Dat;

Port[$246]:=Port_dat;

……..

end.

Обратите внимание! Установка бита в порте $246 осуществляется через операцию логического сложения, что изменяет содержимое других битов порта.

По алгоритму обмена информации порты делятся на три группы:

1. Непосредственные порты обмена информацией. Как правило регистры управляющие работой периферийного устройства;

2. Совмещенные порты индексный и порт данных. Объединяют несколько одинаковых по функциональному назначению регистров. В индексный порт заносится индекс порт, после чего из порта данных производится обмен информацией.

3. Объединенный индексно данный порт. Аналогичен предыдущей группе портов, но адрес индексного порта и порта данных совпадает. Наиболее сложный алгоритм обращения к такому порту будет если передается не одно данное, а целая последовательность информации. В этом случае данные следует посылать в порт с определенной временной задержкой.

Пример работы с портами будет рассмотрен в курсе «Компьютерная графика» в разделе «Непосредственное программирование видеоадаптера»/1/.