Открыть сервис

Контроллер DMA

Контроллер DMA (англ. Direct Memory Access — прямой доступ к памяти) — это специализированное устройство или логический блок в составе вычислительной системы, предназначенный для передачи данных между периферийными устройствами (контроллерами дисков, сетевыми картами, звуковыми картами) и оперативной памятью (ОЗУ), либо между двумя областями памяти, без участия центрального процессора (ЦП). Основная функция контроллера DMA — освобождение процессора от рутинных операций копирования больших массивов данных, что повышает общую производительность системы, позволяя ЦП параллельно выполнять другие вычисления.

История

Концепция прямого доступа к памяти возникла в 1960-х годах в связи с ростом быстродействия периферийных устройств и необходимостью разгрузить процессоры, которые тратили значительную часть тактов на программный ввод-вывод (PIO — Programmed Input/Output). Первые реализации DMA были аппаратными и использовались в мейнфреймах (например, IBM System/360). В персональных компьютерах архитектуры IBM PC/AT (1984 год) был применён стандартный контроллер DMA на базе микросхемы Intel 8237A. Этот контроллер поддерживал четыре канала DMA (два из которых — 8-битные, два — 16-битные) и работал на частоте системной шины.

В 1990-х годах с появлением шины PCI (Peripheral Component Interconnect) и её варианта PCI Express (PCIe) архитектура DMA была модернизирована: вместо отдельной микросхемы контроллер DMA стал встраиваться в чипсет материнской платы (южный мост) или непосредственно в контроллеры периферийных устройств (так называемый Bus Mastering — режим управления шиной). Современные системы (начиная с Intel Core и AMD Ryzen) используют встроенные контроллеры DMA в составе процессора или чипсета, поддерживающие 64-битную адресацию и работу с несколькими устройствами одновременно.

Принцип работы

Контроллер DMA работает в тесной связке с системной шиной и памятью. Процесс передачи данных через DMA включает несколько этапов:

  1. Инициализация. Центральный процессор (или драйвер устройства) настраивает контроллер DMA: задаёт адрес источника данных (порт ввода-вывода периферийного устройства или адрес в ОЗУ), адрес назначения (область в ОЗУ), количество передаваемых байт (или слов) и режим передачи.
  2. Запрос на передачу. Периферийное устройство (например, жёсткий диск) выставляет сигнал запроса DMA (DRQ — DMA Request) на соответствующий канал контроллера.
  3. Арбитраж шины. Контроллер DMA захватывает управление системной шиной, приостанавливая работу процессора (или переводя его в состояние ожидания, если используется режим «цикла кражи» — cycle stealing).
  4. Передача данных. Контроллер DMA считывает данные из источника и записывает их в память (или наоборот) без участия ЦП. Передача может выполняться одним блоком (burst mode) или отдельными байтами/словами.
  5. Завершение. После передачи заданного количества данных контроллер DMA снимает сигнал запроса и освобождает шину. Затем он может сгенерировать прерывание (IRQ — Interrupt Request) для уведомления процессора о завершении операции.

Типы адресации

  • Физическая адресация. Контроллер DMA оперирует физическими адресами памяти, как правило, в пределах первых 16 Мбайт (для 24-битных контроллеров) или всей доступной памяти (для 64-битных систем).
  • Логическая адресация. В некоторых архитектурах (например, в IBM PC/AT) используется 20-битная адресация с учётом сегментной модели реального режима.

Классификация контроллеров DMA

Контроллеры DMA классифицируются по архитектуре, способу подключения и режимам работы.

По архитектуре

  • Внешние (дискретные) контроллеры. Отдельные микросхемы (например, Intel 8237, NEC µPD71037). Использовались в ранних ПК и некоторых встраиваемых системах.
  • Встроенные (интегрированные) контроллеры. Являются частью чипсета (южный мост) или процессора. В современных системах контроллер DMA встроен в контроллер памяти (Memory Controller Hub) или в сам процессор (например, в архитектуре AMD Zen).
  • Контроллеры с возможностью Bus Mastering. Периферийное устройство само управляет шиной и выполняет DMA-передачи, без использования внешнего контроллера. Этот режим поддерживается шинами PCI, PCIe, SATA, NVMe.

По режиму передачи

  • Single Transfer (одиночная передача). Контроллер передаёт один байт (или слово) за раз, после чего возвращает управление шиной процессору. Режим используется для медленных устройств.
  • Block Transfer (блочная передача). Контроллер передаёт весь блок данных (от нескольких байт до нескольких мегабайт) за один сеанс, удерживая шину до завершения. Обеспечивает максимальную скорость, но может задерживать доступ к памяти для других устройств.
  • Demand Transfer (передача по требованию). Устройство запрашивает передачу, когда данные готовы. Контроллер передаёт данные до тех пор, пока устройство выставляет запрос, либо пока не будет достигнут заданный объём.
  • Cycle Stealing (кража цикла). Контроллер вставляет один цикл передачи между циклами процессора, не останавливая его полностью. Используется в системах с жёсткими требованиями к задержкам.

По разрядности

  • 8-битные. Работают с 8-битной шиной данных (например, каналы 0–3 в IBM PC/AT). Используются для старых устройств (FDD, COM-порты).
  • 16-битные. Работают с 16-битной шиной (каналы 4–7 в IBM PC/AT). Применялись для контроллеров IDE и звуковых карт.
  • 32-битные и 64-битные. Современные контроллеры, поддерживающие 32- и 64-битную адресацию и передачу данных. Используются в PCIe, NVMe, USB 3.0.

Применение

Контроллеры DMA используются в самых разных вычислительных системах — от микроконтроллеров до суперкомпьютеров. Основные области применения:

  • Накопители данных. Контроллеры DMA обеспечивают высокоскоростную передачу данных между жёсткими дисками (IDE, SATA), твердотельными накопителями (NVMe) и оперативной памятью. Без DMA скорость обмена с диском была бы ограничена возможностями процессора.
  • Сетевые интерфейсы. Сетевые карты (Ethernet, Wi-Fi) используют DMA для передачи пакетов данных напрямую в память, что критически важно для высокоскоростных сетей (1 Гбит/с и выше).
  • Графические подсистемы. Видеокарты (GPU) через шину PCIe выполняют DMA-передачи текстур, буферов кадров и команд между видеопамятью и системной памятью.
  • Аудиоустройства. Звуковые карты используют DMA для непрерывной передачи аудиоданных (например, в режиме «циклического буфера»), что позволяет избежать прерываний и щелчков.
  • Встраиваемые системы. В микроконтроллерах (STM32, AVR) контроллеры DMA используются для автоматической передачи данных с АЦП, датчиков, UART и SPI без участия ядра процессора.
  • Обработка сигналов. В цифровых сигнальных процессорах (DSP) и FPGA контроллеры DMA обеспечивают потоковую обработку данных (например, в радарах, сонарах, системах связи).

Преимущества и недостатки

Преимущества

  • Снижение нагрузки на процессор. ЦП может выполнять другие задачи во время DMA-передачи.
  • Высокая пропускная способность. DMA обеспечивает передачу данных на полной скорости шины, без накладных расходов на программные циклы.
  • Предсказуемость задержек. В режиме cycle stealing DMA не блокирует процессор надолго, что важно для систем реального времени.

Недостатки

  • Сложность настройки. Контроллер DMA требует правильной инициализации (адреса, длина, режим) со стороны драйвера или операционной системы. Ошибки могут привести к повреждению данных или сбоям.
  • Ограничения адресации. В старых архитектурах (IBM PC/AT) контроллер DMA мог адресовать только первые 16 Мбайт памяти, что требовало использования буферов («bounce buffers») для работы с памятью выше этой границы.
  • Конфликты на шине. При одновременной работе нескольких устройств с DMA возможны конфликты за доступ к шине, что снижает производительность.
  • Уязвимость к атакам. DMA-устройства могут получить доступ к любой области памяти, что создаёт угрозу безопасности (например, атаки DMA через Thunderbolt или PCIe). Для защиты используются IOMMU (Input-Output Memory Management Unit) и технологии виртуализации.

Интересные факты

  • В IBM PC/AT использовался каскад из двух микросхем Intel 8237: одна обслуживала 8-битные каналы (0–3), вторая — 16-битные (4–7). Канал 4 был зарезервирован для каскадирования.
  • В операционной системе Microsoft Windows до версии Windows 2000 включительно существовала проблема «DMA-зависаний» при работе с некоторыми устройствами IDE, что приводило к сбоям системы. Эта проблема была решена внедрением режима Bus Mastering и улучшенной обработки прерываний.
  • В современных процессорах (например, Intel Core i9-13900K) контроллер DMA встроен в системный агент (System Agent) и поддерживает до 16 каналов DMA, работающих независимо друг от друга.
  • Технология DMA используется не только в ПК, но и в мобильных устройствах (смартфонах, планшетах) на базе ARM-процессоров — например, для передачи данных с камеры или дисплея.

Источники

  • Intel 8237A High Performance Programmable DMA Controller Datasheet (1984).
  • PCI Local Bus Specification Revision 3.0 (2002).
  • «Computer Organization and Design» — Patterson, Hennessy (5th edition, 2013).
  • «The Indispensable PC Hardware Book» — Hans-Peter Messmer (4th edition, 2002).
  • Документация на чипсеты Intel серий 6xx, 7xx (2000–2010).
  • Стандарт ATA/ATAPI-7 (2005).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →