Контроллер прямого доступа в память
Пересылка байта информации из одной области памяти в другую или из памяти в порт обычно проходит в два шага. На первом шаге CPU получает этот байт, из памяти и записывает в один из своих регистров. На втором шаге он записывает байт в место назначения.
Немножко подумав, сразу же можно назвать два основных недостатка подобного подхода: Первый из них заключается в том, что во время перемещения байта CPU ни чем другим заниматься не может. Второй — на перемещение байта требуется два шага. Кажется, мелочь, но если нужно переместить не один байт, а целый блок, мелочью это уже не назовешь.
Внутри PC есть несколько типов устройств, которым нужно пересылать именно большие группы байт. Устройство чтения гибких дисков, например. Звуковые карты также очень интенсивно пересылают байты, настолько интенсивно, что часто они используют сразу несколько каналов DMA. Многие сканеры пользуются каналом DMA, и кто знает, какие еще подобные устройства появятся в дальнейшем.
Осознавая важность проблемы, разработчики первого PC решили завести дополнительный микропроцессор, называемый контроллером прямого доступа к памяти. Этот микропроцессор занимается тем, что по команде CPU перемещает заданное количество байт из одной последовательности адресов памяти в указанный порт, начиная с определенного адреса памяти.
Он может и принять из порта последовательность, байт определенной длины и поместить ее в память, начиная с указанного адреса. Все подобные пересылки происходят через каналы DMA, иначе говоря, каждой пересылкой занимается определенная часть контроллера DMA. Какая именно это будет часть, т. е. какой; канал займется этим, решает не сам контроллер, а устройство (CPU или какое-либо устройство, ввода-вывода), запросившее доступ к нему. А именно, перед тем как пользоваться DMA-контроллером для пересылки данных, такое устройство обязано сказать контроллеру, какой канал будет им использоваться. Так что каналы DMA — это ресурс, требующий аккуратного обращения, иначе при обращении к ним могут начаться конфликты устройств, которые ни к чему хорошему не приведут.
Разумеется, DMA подверглась улучшению, позволившему более эффективно использовать пропускную способность существующих шин. Новейшая версия, названная UltraDMA, может передавать данные IDE-устройствам со скоростью до 33 Мб/с (мегабайт в секунду), т. е. в два раза быстрее старой версии.