Основным отличием DMA от предыдущих способов является тот факт, что участие ЦП в организации обмена сводится к минимуму. На ЦП в этом случае возлагаются лишь инициализации DMA, а также соответствующая реакция на завершение ввода/вывода. Режим DMA обычно используется для организации так называемых блочных пересылок. Типичным ВУ с блочным обменом являются дисковые накопители. Управление обменом в режиме DMA осуществляется специальным устройством (микросхемой), называемой контроллером DMA. Контроллер DMA реализует обмен не на программном уровне, а на аппаратном, являясь, по сути, микропрограммным автоматом. Контроллер DMA содержит некоторое число программно-доступных регистров, представляемых для ЦП адресуемыми портами ввода/вывода. Инициализация DMA со стороны ЦП сводится к заданию режима работы и необходимых адресов для обмена путем пересылки этой информации из ЦП в соответствующие регистры контроллера DMA. В принципе, при инициализации DMA задаются следующие основные данные:
1. Начальный адрес области памяти, используемый при обмене.
2. Объем пересылаемого блока памяти в байтах (типичный размер блока при обмене жестким диско составляет 512 байт).
3. Код операции обмена (в простейшем случае ввод или вывод).
Адрес устройства прямого доступа (адрес ВУ задается в связи с тем, что контроллер DMA включает в себя несколько (как правило, восемь) каналов прямого доступа). Стандартные контроллеры DMA позволяют реализовать следующие виды обмена: 1) Port → Mem; 2) Mem → Port; 3) Mem → Mem; 4) Port → Port.
Канальный ввод/вывод
Этот способ основан на использовании в архитектуре ЭВМ специализированных процессоров, ориентированных на организацию ввода/вывода. Эти процессоры обычно называются каналами ввода/вывода. Канальный ввод/вывод является программно управляемым, т.к. реализуется с помощью специальной программы, называемой канальной программой. В отличие от PIO, канальную программу выполняет не ЦП, а непосредственно канал ввода/вывода. Использование каналов ввода/вывода является прерогативой для ЭВМ класса мэйнфреймов, типа IBM/360 и т.д., а также супер-ЭВМ. В некоторых моделях супер-ЭВМ ввиду большого числа разнообразных функций и возможности работы по собственной программе, используется название процессоры ввода/вывода. Канальные программы для организации обмена с различными типами ВУ хранятся в основной памяти. В связи с тем, что канал ввода/вывода является специализированным процессором, управление порядком выполнения команд канальной программы осуществляется с помощью своеобразного счетчика команд, который имеет место в канале ввода/вывода.
Для управления канальным вводом/выводом используется следующая иерархия командных слов. Команды ВВ → АСК → ОСК.
Команды ввода/вывода входят в систему команд ЦП и являются привилегированными. Это означает, что их управление разрешается только в состоянии супервизор, но не в альтернативном состоянии – задача. Из привилегированности команд ввода/вывода следует, что они могут встречаться только в программах операционной системы, точнее ее части для управления вводом/выводом.
К командам ввода/вывода относятся:
1. SIO - начать ввод/вывод.
2. TCH/TIO - проверить канал или ввод/вывод.
3. HIO - остановить ввод/вывод.
Первая команда предназначена для инициирования выполнения канальной программы; вторые две для проверки текущего состояния каналов и устройств, подключаемых к ним; третья – для принудительной остановки операции ввода/вывода.
Во всех этих командах задается адрес канала и адрес ВУ в канале. Так как под эти адреса отводится по одному байту, то система ввода/вывода мэйнфреймов может включать в себя до 256 каналов, к каждому из которых подключается до 256 ВУ.
Адресное слово канала (АСК). Оно формируется программой управления вводом/выводом до начала операции ввода/вывода и помещается в фиксированную ячейку основной памяти. При выполнении команды SIO, АСК выбирается из памяти и задает начальный адрес программы ввода/вывода выполняемой каналом.
Управляющее слово канала (ОСК) представляет собой команду канальной программы.
Основные команды, связанные непосредственно с вводом/выводом содержат следующую информацию:
1. Код команды, определяющий тип операции ввода/вывода.
2. Адрес основной памяти, где помещаются данные, участвующие в операции, при выводе или зарезервированном места для ввода.
3. Длина передаваемого блока данных.
Кроме основных команд в канальной программе могут использоваться команды перехода для передачи управления команде, не идущей следом за исполняемой.