Существует два типа управления периферийными устройствами — прямой и косвенный.
Прямое управление реализует непосредственную связь между процессором и периферийным устройством. Управление осуществляется с помощью последовательности специальных команд. При этом центральный процессор реализует полный алгоритм: инициализацию, проверку готовности, остановку.
При косвенном управлении между процессором и периферийным устройством помещается специальный процессор, называемый каналом. Он осуществляет управление операциями ввода/вывода. Центральный процессор инициирует ввод/вывод и переход на выполнение других операций, а канал управляет периферийным устройством по специальной программе, называемой канальной. Для синхронной работы центрального процессора и канала используются флаги занятости или прерывания. Программа управления периферийным устройством — супервизор ввода/вывода—в ответ на прерывание планирует и организует ввод/вывод, при необходимости организует обновление данных. Для сглаживания скоростей в периферийном канале и управляющем устройстве между ними ставится буфер, роль которого выполняет оперативная память. При определении длины буфера должен обеспечиваться компромисс между эффективностью использования оперативной памяти и внешней памяти (чем длиннее буфер, тем больше времени работает канал независимо от центрального процессора).
Для управления используются два вида ввода/вывода:
· байт-ориентированный (интерфейс применяется для доступа к печатающим устройствам, каналам связи и реализуется без буферизации)
· блок-ориентированный (интерфейс адресуется к периферийным устройствам как к последовательным блокам по 512 байт).
В состав ОС входят драйверы и специальные таблицы подключения ядра операционной системы к драйверам различных устройств. Каждый драйвер состоит из двух частей:
• набора программных модулей для операций открытия, закрытия, чтения и записи в файл данных;
• модуля обработки прерывания. Для байт-ориентированной передачи прерывание наступает после передачи первого байта, а для блок-ориентированной — после передачи первого блока.
Под драйвером понимался программный модуль, который:
· входит в состав ядра операционной системы, работая в привилегированном режиме;
· непосредственно управляет внешним устройством, взаимодействуя с его контроллером с помощью команд ввода-вывода компьютера;
· обрабатывает прерывания от контроллера устройства;
· предоставляет прикладному программисту удобный логический интерфейс работы с устройством, экранируя от него низкоуровневые детали управления устройством и организации его данных;
· взаимодействует с другими модулями ядра ОС с помощью строго оговоренного интерфейса, описывающего формат передаваемых данных, структуру буферов, способы включения драйвера в состав ОС, способы вызова драйвера набор общих процедур подсистемы ввода-вывода, которыми драйвер может пользоваться, и т. п.
Таким образом, последовательность операций:
1)считывание порции (блок) данных с накопителя и помещение его в область в оперативную память;
2)извлечение данных из буфера, их обработка и помещение обратно или в другой (выходной) буфер;
3)после окончания обработки – вывод (запись) результатов на выходной накопитель также в форме одного или несколько блоков.