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

Контроллер прямого доступа к памяти

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

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

В традиционной схеме ввода-вывода (программно-управляемый обмен) процессор сам выполняет чтение данных из порта периферийного устройства и запись их в память, затрачивая такты на каждую операцию. При использовании контроллера ПДП процессор лишь инициирует передачу, задавая параметры: адрес источника, адрес приёмника, количество передаваемых байт (слов) и направление. После этого контроллер берёт на себя управление шинами данных и адреса, генерируя необходимые сигналы для чтения из источника и записи в приёмник. Передача происходит в фоновом режиме, параллельно с работой процессора над другими задачами (если не требуется захват шины). По завершении передачи контроллер генерирует сигнал прерывания, извещая процессор о готовности данных.

Режимы работы

Контроллеры ПДП обычно поддерживают несколько режимов передачи:

  • Одиночный режим (Single Transfer) — за один запрос передаётся один байт или слово. После каждой передачи контроллер возвращает управление шиной процессору, что позволяет избежать длительной монополизации шины.
  • Блочный режим (Block Transfer) — после получения запроса контроллер передаёт весь заданный блок данных, не отдавая шину до завершения. Обеспечивает максимальную скорость, но блокирует доступ процессора к памяти на время передачи.
  • Режим с чередованием (Demand Transfer) — передача продолжается, пока периферийное устройство удерживает сигнал запроса. Как только сигнал снимается (например, устройство временно не готово), контроллер отдаёт шину.
  • Каскадный режим (Cascade Mode) — используется для объединения нескольких контроллеров ПДП в цепочку, расширяя количество доступных каналов.

Архитектура и устройство

Типовой контроллер ПДП (например, Intel 8237, который стал стандартом для IBM PC/XT) включает в себя следующие ключевые компоненты:

  • Регистры адреса — хранят текущий адрес памяти для чтения или записи. Обычно для каждого канала имеется свой регистр.
  • Регистры счётчика — содержат количество оставшихся для передачи байт или слов.
  • Регистры управления и состояния — задают режим работы, направление передачи, разрешение прерываний и отражают текущее состояние (занятость канала, ошибки).
  • Арбитр шины — блок, который запрашивает у процессора управление системной шиной (сигнал HOLD/HLDA) и отдаёт её обратно после завершения передачи.
  • Каналы ПДП — независимые пути передачи данных. Каждый канал может быть настроен на работу с конкретным периферийным устройством. Количество каналов варьируется: в классическом Intel 8237 — 4 канала, в современных интегрированных контроллерах — до 8 или более.

Внутренняя организация

Контроллер ПДП подключается к системной шине параллельно с процессором. Внутренняя логика включает мультиплексоры для выбора активного канала, схемы инкремента/декремента адреса и счётчика, а также генераторы управляющих сигналов (IOR, IOW, MEMR, MEMW). Некоторые контроллеры поддерживают режим «памяти-память» (memory-to-memory), что позволяет копировать блоки данных из одной области ОЗУ в другую без участия процессора.

История и развитие

Первые реализации прямого доступа к памяти появились в мэйнфреймах 1960-х годов, где необходимость быстрого обмена с магнитными лентами и барабанами потребовала разгрузки центрального процессора. Одним из ранних коммерческих контроллеров ПДП стал Intel 8237, выпущенный в 1978 году. Он использовался в компьютерах IBM PC (1981) и PC/XT, обеспечивая передачу данных с дискет, жёстких дисков и других устройств.

В 1980-х годах с развитием персональных компьютеров контроллеры ПДП стали стандартным компонентом чипсетов. В IBM PC/AT (1984) были добавлены два каскадированных контроллера 8237, что дало 7 доступных каналов (один занят каскадированием). Однако с ростом тактовых частот процессоров и появлением более быстрых шин (PCI, AGP, PCI Express) классические контроллеры ПДП утратили актуальность из-за низкой пропускной способности и ограничений по адресации (до 16 Мбайт в режиме 8237).

Современные контроллеры ПДП интегрированы непосредственно в чипсет материнской платы или в состав самого процессора (например, в архитектуре x86 — в южный мост или в блоки ввода-вывода CPU). Они поддерживают 64-битную адресацию, высокие скорости (до нескольких гигабайт в секунду) и работу с современными интерфейсами, такими как SATA, NVMe, USB 3.x, Ethernet.

Виды контроллеров ПДП

Контроллеры прямого доступа к памяти классифицируются по нескольким признакам:

  • По месту расположения:
  • Внешние (отдельные микросхемы, как Intel 8237) — исторически первый тип.
  • Интегрированные (в составе чипсета или SoC) — современный стандарт.
  • Встроенные в периферийные устройства (например, в сетевые карты, видеокарты) — так называемый Bus Mastering, когда устройство само управляет шиной.
  • По архитектуре:
  • Одноканальные — обслуживают одно устройство.
  • Многоканальные — поддерживают несколько независимых потоков (классический 8237 — 4 канала).
  • Каскадируемые — позволяют объединять несколько контроллеров для увеличения числа каналов.
  • По способу управления шиной:
  • С захватом шины (Cycle Stealing) — контроллер «ворует» такты шины у процессора, вставляя свои циклы между циклами ЦП.
  • С полным захватом (Burst Mode) — контроллер монопольно владеет шиной на всё время передачи блока.

Применение

Контроллеры ПДП используются в широком спектре устройств и систем:

  • Персональные компьютеры — для обмена данными с дисковыми накопителями (IDE, SATA), звуковыми картами, приводами CD/DVD, портами LPT.
  • Встраиваемые системы и микроконтроллеры — в составе ARM-чипов, DSP-процессоров, ПЛИС (FPGA) для быстрого сбора данных с АЦП, управления датчиками, работы с дисплеями.
  • Сетевое оборудование — сетевые контроллеры (NIC) используют ПДП для передачи пакетов напрямую в память без загрузки CPU (технология DMA Offload).
  • Графические подсистемы — видеокарты через шину PCI Express используют DMA для копирования текстур и буферов кадров.
  • Промышленная автоматизация — в системах сбора данных, где требуется непрерывный обмен с быстрыми АЦП/ЦАП.

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

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

  • Снижение нагрузки на процессор — ЦП освобождается для выполнения вычислительных задач, а не копирования данных.
  • Повышение пропускной способности — передача может происходить на максимальной скорости шины, без задержек на программное управление.
  • Поддержка фоновой работы — возможна одновременная передача данных и выполнение процессором других инструкций (при использовании чередования).

Недостатки

  • Сложность настройки — требуется корректная инициализация регистров контроллера, что усложняет программное обеспечение.
  • Ограничения по адресации — старые контроллеры (8237) могли адресовать только первые 16 Мбайт памяти, что вызывало проблемы в системах с большим объёмом ОЗУ.
  • Конфликты шины — при интенсивной работе нескольких устройств ПДП возможны задержки из-за арбитража.
  • Отсутствие кэш-когерентности — в некоторых архитектурах данные, переданные через ПДП, могут не синхронизироваться с кэшем процессора, что требует дополнительных инструкций (например, барьеров памяти).

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

  • В IBM PC/XT контроллер ПДП 8237 работал на частоте 4,77 МГц и обеспечивал скорость передачи до 1,5 Мбайт/с.
  • В процессорах Intel Core (начиная с архитектуры Nehalem) контроллер ПДП интегрирован в сам кристалл CPU, что сократило задержки и повысило производительность подсистемы ввода-вывода.
  • Технология Direct Memory Access (DMA) используется в высокопроизводительных вычислениях (HPC) для пересылки данных между узлами кластера через InfiniBand или Ethernet без участия процессора (RDMA — Remote Direct Memory Access).
  • В операционных системах семейства Windows и Linux драйверы устройств активно используют API для работы с DMA (например, dma_alloc_coherent в ядре Linux).

Источники

  1. Intel Corporation. Intel 8237A High Performance Programmable DMA Controller Datasheet. 1978.
  2. Tanenbaum, A. S. Структурированная компьютерная организация. 6-е издание. — М.: Вильямс, 2013. — Глава 4 (Прямой доступ к памяти).
  3. Shanley, T. PCI System Architecture. 4th Edition. — MindShare, 1999. — Глава 12 (DMA).
  4. Корнеев, В. В. Архитектура вычислительных систем. — М.: Бином, 2016. — Раздел 5.3 (Контроллеры ПДП).
  5. Stallings, W. Computer Organization and Architecture. 10th Edition. — Pearson, 2016. — Chapter 7 (DMA).

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

На главную BFOmetr →