Прямой доступ к памяти

Хотя ввод-вывод, управляемый прерываниями, более эффективен, чем про­стой программируемый ввод-вывод, он все еще занимает много процессорного времени для передачи данных между памятью и контроллером ввода-вывода (при этомчерез процессор должны пройти все пересылаемые данные). Таким об­разом, обе описанные формы ввода-вывода обладают двумя недостатками.

1. Скорость передачи данных при вводе-выводе ограничена скоростью, с кото­рой процессор может проверять и обслуживать устройство.

2. Процессор занят организацией передачи данных; при вводе-выводе для ка­ждой передачи данных должна быть выполнена определенная последова­тельность команд.

Для перемещения больших объемов данных может использоваться более эффективный метод — прямой доступ к памяти (direct memory access — DMA). Функции DMA выполняются отдельным контроллером системной шины или могут быть встроены в контроллер ввода-вывода. В любом случае метод работает следующим образом. Когда процессору нужно прочитать или записать блок данных, он генерирует команду для модуля DMA, посылая ему следующую информацию:

• указание, требуется ли выполнить чтение или запись;

• адрес устройства ввода-вывода;

• начальный адрес блока памяти, использующегося для чтения или записи;

• количество слов, которые должны быть прочитаны или записаны.

Передав полномочия по выполнению этих операций контроллеру DMA, процессор продолжает работу. Контроллер DMA слово за словом передает весь блок данных в память или из нее» не задействуй при этом процессор. После окончания передачи контроллер DMA посылает процессору сигнал прерывания. Таким образом, процессор участвует только в начале и в конце передачи (рис. 1.19,в).

Для передачи данных в память и из нее контроллеру DMA нужен контроль над шиной. Если в это время процессору также нужна шина, может возникнуть конфликтная ситуация, и процессор должен ждать окончания работы модуля DMA. Заметим, что в этом случае нельзя говорить о прерывании, так как процессор не сохраняет информацию о состоянии задачи и не переходит к выполнению других операций. Вместо этого он вынужден сделать паузу на время выполнения одного цикла шины. В результатеэто приведет к тому, что вовремя передачи данных с использованием прямого доступа к памяти замедляется выполнение процессоромтех команд, для которых ему требуется шина. Тем не менее при передаче большого количества информации прямой доступ к памяти намного более эффективен, чем программируемый ввод-вывод или ввод-вывод. управляемый прерываниями.