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