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

Контроллер ПДП

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

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

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

  1. Инициализация. ЦП настраивает контроллер ПДП, указывая адрес источника данных (например, порт ввода-вывода периферийного устройства), адрес назначения в оперативной памяти, количество передаваемых байтов или слов, а также режим передачи.
  2. Запрос. Периферийное устройство, готовое к передаче данных, отправляет сигнал запроса (DREQ, DMA Request) контроллеру ПДП.
  3. Арбитраж. Контроллер ПДП запрашивает у ЦП управление системной шиной (сигнал HOLD или BR). ЦП, приостановив выполнение текущей инструкции, переводит свои выводы адреса, данных и управления в высокоимпедансное состояние (Z-состояние) и подтверждает передачу управления (сигнал HLDA или BG).
  4. Передача. Контроллер ПДП генерирует адреса памяти и сигналы управления чтением/записью, обеспечивая прямой обмен данными между устройством и памятью. Каждый такт передачи может занимать от одного до нескольких циклов шины.
  5. Завершение. После передачи заданного количества байтов контроллер ПДП снимает сигнал запроса шины, возвращая управление ЦП. Он также может генерировать сигнал прерывания для оповещения процессора о завершении операции.

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

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

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

Архитектура и классификация

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

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

  • Встроенные контроллеры. Являются частью чипсета материнской платы (например, в классических IBM PC/AT) или интегрированы непосредственно в микропроцессор (в современных SoC). В ранних системах x86 использовался контроллер Intel 8237A.
  • Внешние контроллеры. Реализуются в виде отдельной микросхемы или IP-блока в составе системы на кристалле. Примеры: Intel 8257, Z80 DMA.
  • Блоки ПДП в периферийных устройствах. Современные высокопроизводительные устройства (например, NVMe SSD, сетевые адаптеры 10GbE) часто имеют собственные встроенные контроллеры ПДП, которые управляют передачей данных между буфером устройства и системной памятью без участия ЦП.

По способу адресации

  • 8-битные и 16-битные контроллеры. Использовались в ранних ПК (IBM PC/XT/AT). Ограничивали адресуемую память (до 1 МБ для 8-битных и 16 МБ для 16-битных).
  • 32-битные контроллеры. Появились с процессорами 80386 и 80486. Поддерживали адресацию до 4 ГБ.
  • 64-битные контроллеры. Современные контроллеры, работающие в 64-разрядных системах, способны адресовать память объёмом более 4 ГБ.

По способу подключения к шине

  • Контроллеры для шины ISA. Классические контроллеры, работавшие на частоте системной шины (8 МГц).
  • Контроллеры для шины PCI. Использовали более высокую пропускную способность шины PCI (33 МГц, 66 МГц).
  • Контроллеры для шины PCI Express. Современные контроллеры, работающие с высокоскоростной последовательной шиной PCIe. Поддерживают функции, такие как MSI-X (Message Signaled Interrupts) и Address Translation Services (ATS).

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

Ранние системы

Концепция прямого доступа к памяти возникла в 1950-х годах в мейнфреймах. Первые микропроцессорные системы, такие как Intel 8080, не имели встроенного контроллера ПДП. Для реализации ПДП использовались отдельные микросхемы, например, Intel 8257.

IBM PC и IBM PC/AT

В IBM PC (1981) использовался контроллер Intel 8237A, который обеспечивал 4 канала ПДП. Каналы 0, 1 и 3 использовались для обновления динамической памяти (DRAM Refresh), для работы с дисководами и для передачи данных на принтер. В IBM PC/AT (1984) были добавлены два каскадированных контроллера 8237A, что расширило число каналов до 8 (каналы 0–3 и 4–7). Однако из-за архитектурных ограничений (16-битная шина ISA) контроллер ПДП в AT мог передавать данные только в первые 16 МБ оперативной памяти.

Эпоха PCI и AGP

С появлением шины PCI (1992) роль централизованного контроллера ПДП изменилась. Устройства PCI могли сами инициировать транзакции на шине (Bus Mastering), фактически выступая в роли собственных контроллеров ПДП. Это позволило значительно повысить производительность, так как данные передавались напрямую между устройством и памятью без промежуточного контроллера. Однако для обратной совместимости с ISA-устройствами в чипсетах сохранялся встроенный контроллер ПДП.

Современные системы

В современных ПК (начиная с чипсетов Intel ICH и AMD SB) контроллер ПДП интегрирован в южный мост или в сам процессор (в архитектурах с единой системой на кристалле). Он используется в основном для управления передачей данных с устаревшими устройствами (например, дисководы FDD, параллельные порты LPT). Для высокоскоростных устройств (SATA, NVMe, USB 3.0, Ethernet) применяется технология Bus Mastering, где контроллер ПДП встроен непосредственно в устройство.

Применение

Контроллеры ПДП находят применение в различных областях вычислительной техники:

  • Персональные компьютеры. Используются для передачи данных с дисководов, старых звуковых карт (Sound Blaster), параллельных портов, а также для обновления DRAM.
  • Встраиваемые системы. Широко применяются в микроконтроллерах (например, STM32, AVR) для управления АЦП, ЦАП, интерфейсами SPI, I2C, UART, а также для передачи данных между памятью и периферией без загрузки ядра.
  • Цифровая обработка сигналов (DSP). В DSP-процессорах контроллеры ПДП используются для организации высокоскоростного обмена данными между памятью и вычислительными блоками.
  • Сетевые устройства. В маршрутизаторах, коммутаторах и сетевых картах контроллеры ПДП обеспечивают быструю передачу пакетов данных между сетевыми интерфейсами и памятью.
  • Графические ускорители. Видеокарты используют собственные контроллеры ПДП для передачи текстур, вершин и кадровых буферов между видеопамятью и системной памятью.

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

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

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

Недостатки

  • Дополнительные аппаратные затраты. Требуется наличие контроллера ПДП, что увеличивает сложность и стоимость системы.
  • Конфликты при совместном использовании шины. В системах с несколькими контроллерами ПДП возможны конфликты за доступ к шине.
  • Ограничения по адресации. Ранние контроллеры ПДП имели ограничения на адресуемую память.
  • Сложность настройки. Программирование контроллера ПДП требует точного задания адресов, режимов и количества передаваемых данных.

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

  • В IBM PC/AT контроллер ПДП использовался для обновления динамической памяти (DRAM Refresh), что было необходимо для сохранения данных в DRAM-микросхемах. Этот процесс происходил циклически и не требовал участия ЦП.
  • В некоторых ранних системах (например, Commodore 64) контроллер ПДП использовался для генерации звука, передавая данные из памяти в звуковой чип.
  • Технология Bus Mastering, реализованная в шине PCI, по сути, является эволюцией идеи ПДП, где каждое устройство может выступать в роли «ведущего» на шине.

Источники

  • Intel Corporation. Intel 8237A High Performance Programmable DMA Controller Datasheet. 1985.
  • IBM Corporation. IBM Personal Computer AT Technical Reference. 1984.
  • Shanley, T. & Anderson, D. PCI System Architecture. MindShare, Inc., 1995.
  • Tanenbaum, A. S. Structured Computer Organization. 6th ed., Pearson, 2012.
  • Stallings, W. Computer Organization and Architecture: Designing for Performance. 10th ed., Pearson, 2015.

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

На главную BFOmetr →