В ЭВМ используются два основных способа организации передачи данных между памятью и периферийными устройствами: программно- управляемая передача и прямой доступ к памяти (ПДП).
Программно-управляемая передача данных осуществляется при непосредственном участии и под управлением процессора. Например, при пересылке блока данных из периферийного устройства в оперативную память процессор должен выполнить следующую последовательность шагов:
Программа чтения данных в память, реализующая описанные выше действия, может иметь следующий вид:
SETUP: MOV AX,SEGMENT ; настройка сегментного регистра
MOV DS,AX
MOV DI,OFFSET ; настройка адреса
MOV CX,COUNT ; количество байт
MOV DX,IOPORT ; DX = порт ввода/вывода
READ: IN AL,DX ; чтение байта из порта
MOV [DI],al ; сохранить данные
INC DI ; увеличить индекс
LOOP READ ; продолжить до тех пор, пока CX = 0
CONT: ...... ; продолжение программного кода
Как видно, программно-управляемый обмен ведет к нерациональному использованию мощности микропроцессора, который вынужден выполнять большое количество относительно простых операций, приостанавливая работу над основной программой. При этом действия, связанные с обращением к оперативной памяти и к периферийному устройству, обычно требуют удлиненного цикла работы микропроцессора из-за их более медленной по сравнению с микропроцессором работы, что приводит к еще более существенным потерям производительности ЭВМ.
Альтернативой программно-управляемому обмену служит прямой доступ к памяти — способ быстродействующего подключения внешнего устройства, при котором оно обращается к оперативной памяти, не прерывая работы процессора. Такой обмен происходит под управлением отдельного устройства — контроллера прямого доступа к памяти (КПДП). Структура ЭВМ, имеющей в своем составе КПДП, представлена на рисунке (см. рисунок ниже).
Процедура передачи данных в режиме ПДП состоит в следующем:
Временная диаграмма режима ПДП приведена на рисунке (см. рисунок ниже).
Перед началом обмена программа должна указать контроллеру ПДП:
Передача массива данных по каналу состоит из последовательности так называемых циклов DMA. Цикл DMA для передач между памятью и устройством ввода-вывода представляет собой комбинацию одновременного выполнения шинных команды обращения к памяти (-MEMR или -MEMW) и команды обращения к порту (-IOW или -IOR, соответственно), во время которого на шине адреса активен адрес памяти. Активный порт в цикле DMA определяется косвенным образом по комбинации активных сигналов DRQ и -DACK. Реагировать на сигналы -IOW и -IOR в цикле DMA может только тот порт, который вызвал активизацию сигнала DRQ и получил подтверждение в виде соответствующего сигнала -DACK.
После того как один из каналов запрограммирован на необходимую передачу (запрограммирован канал контроллера DMA и регистр памяти страниц DMA), запускается устройство ввода-вывода, подключенное к этому каналу. С этого момента обслуживание обмена поручается подсистеме DMA, а микропроцессор может быть занят чем-либо другим. Когда устройство становится готовым к обмену, оно выдает запрос на обслуживание DRQ (см. рисунок ниже). Если данный канал в этот момент не замаскирован, подсистема DMA выдает запрос на захват шины у микропроцессора.
Когда микропроцессор готов освободить шину, он подтверждает запрос на захват шины сигналом HOLDA, а шина поступает в распоряжение подсистемы DMA. После этого выполняются действия по выдаче адреса ячейки памяти, с которой будет выполняться обмен по каналу контроллера DMA.
Начало передачи может происходить не только по внешнему сигналу, но и по команде, устанавливающей нужный бит в нужном порте, — по аналогии с прерыванием.
В ходе передачи КПДП может поддерживать три режима передачи:
В качестве примера отметим шину ISA. Магистраль обеспечивает подключение до семи внешних устройств, работающих в режиме прямого доступа к памяти, и до 11 запросов прерываний от УВВ. Еще четыре запроса прерываний зарезервированы за устройствами, входящими в состав стандартной конфигурации ЭВМ, и на магистраль не выведены.
Перед началом работы необходимо запрограммировать все регистры, представленные в таблице (см. таблица ниже). Часть из них программируется при инициализации системы.
Программируются:
•начальный адрес памяти для обмена;
•уменьшенное на единицу число передаваемых байтов;
•направление обмена,
•требуемые режимы работы (разрешить или запретить циклическое изменение приоритетов, автоинициализацию, задать направление изменения адреса при обмене и т. д.);
•запрограммированный канал должен быть демаскирован (бит маски канала устанавливается при этом в 0), после чего он может принимать сигналы "Запрос на ПДП", генерируемые тем внешним устройством, которое обслуживается через этот канал. Сигнал "Запрос на ПДП" может быть также инициирован установкой в 1 бита запроса данного канала в регистре запросов контроллера.