Контроллер 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 включает несколько этапов:
- Инициализация. Центральный процессор (или драйвер устройства) настраивает контроллер DMA: задаёт адрес источника данных (порт ввода-вывода периферийного устройства или адрес в ОЗУ), адрес назначения (область в ОЗУ), количество передаваемых байт (или слов) и режим передачи.
- Запрос на передачу. Периферийное устройство (например, жёсткий диск) выставляет сигнал запроса DMA (DRQ — DMA Request) на соответствующий канал контроллера.
- Арбитраж шины. Контроллер DMA захватывает управление системной шиной, приостанавливая работу процессора (или переводя его в состояние ожидания, если используется режим «цикла кражи» — cycle stealing).
- Передача данных. Контроллер DMA считывает данные из источника и записывает их в память (или наоборот) без участия ЦП. Передача может выполняться одним блоком (burst mode) или отдельными байтами/словами.
- Завершение. После передачи заданного количества данных контроллер 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 →