Direct Memory Access - "прямой доступ к памяти". Он осуществляется через DMA-контроллер - специальный чип, получающий первоначальную команду на перенос данных от центрального процессора. Каналы DMA предназначены для передачи массивов информации по 8- или 16-битным шинам одновременно. В отличие от портов ввода/вывода каналы DMA непосредственно не сообщаются с центральным процессором, они работают напрямую с системной памятью. Всего каналов DMA - 8 (от 0 до 7).
Первоначально DMA-контроллер задумывался, прежде всего, для разгрузки CPU от тривиальных задач, например, контроля флоппи- дисководов или жестких дисков. Начиная с компьютеров PC/AT передача данных от жестких дисков и к ним стала осуществляться уже не через каналы DMA, а через программируемый ввод/вывод.
Начиная с Intel 80386, процессоры располагают собственным устройством управления памятью (MMU - Memory Management Unit), которое пересчитывает логические адреса в физические. DMA-контроллеры "ничего не знают" о разрядности адресов. Поэтому, чтобы иметь возможность применять DMA вместе с управлением виртуальной памятью, нужно зарезервировать в качестве DMA-буфера какую-то область памяти в первом мегабайте адресного пространства, где логические и физические адреса совпадают. В эту область DMA-контроллер записывает данные, прежде чем они будут скопированы процессором из этого буфера. Эта технология, называемая двойной буферизацией, неэффективна.
Основными "потребителями" каналов DMA являются звуковые карты, CD-ROM-дисководы более ранних выпусков. В обоих случаях скорость передачи не превышает 500 Кб/с. Максимально возможная скорость передачи данных по DMA-каналам (около 2 Мб/с) значительно перекрывает потребности 8-битной звуковой карты. Если же необходимо осуществить быстрый обмен информацией, то в этом случае DMA не используется - процессор берет на себя управление процессом переноса информации, перекрывая все допустимые способности DMA-каналов.
DMA-канал | Разрядность | Назначение |
0 | 8 | свободен (ранее использовался в PC/XT для обновления памяти |
1 | 8 | обычно задействуется под звуковые или сетевые карты |
2 | 8 | контроллер floppy-дисководов |
3 | 8 | свободен (в PC/XT обеспечивал передачу данных от HD), иногда используется EPP-функцией параллельного порта |
4 | 16 | каскадирование для 8-разрядного контроллера (координация между "старым" и "новым" чипами DMA) |
5 | 16 | свободен (часто задействуется под 16-разрядные звуковые карты) |
6 | 16 | свободен |
7 | 16 | свободен |