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

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

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

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

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

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

Существует несколько основных режимов работы ПДП:

  • Блочный режим (Block Mode) — контроллер ПДП захватывает шину и передаёт весь блок данных целиком, не отпуская её до завершения. Обеспечивает максимальную скорость, но может блокировать доступ к шине для других устройств и самого процессора.
  • Циклический режим (Cycle Stealing) — контроллер ПДП передаёт по одному слову (или байту) за раз, после чего отдаёт управление шиной обратно. Это позволяет процессору и другим устройствам чередовать доступ к шине, снижая задержки, но уменьшая общую пропускную способность.
  • Прозрачный режим (Transparent Mode) — передача происходит только в те моменты, когда процессор не использует шину (например, во время выполнения внутренних операций). Этот режим наименее эффективен по скорости, но не вызывает задержек в работе процессора.

История

Концепция ПДП была разработана в 1950-х годах для мэйнфреймов. Первым массовым применением ПДП в персональных компьютерах стало использование контроллера Intel 8237 (или его аналогов) в IBM PC/XT (1981 год). Этот контроллер поддерживал четыре канала ПДП, каждый из которых мог быть настроен на передачу данных между памятью и периферийным устройством. В IBM PC/AT (1984 год) была добавлена поддержка 16-битных каналов ПДП (через два каскадированных контроллера 8237), что позволило увеличить скорость передачи.

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

Классификация и типы

Каналы ПДП можно классифицировать по нескольким признакам:

По способу реализации

  • Централизованный ПДП — используется специализированный контроллер ПДП (например, Intel 8237), который управляет всеми каналами. Характерен для старых архитектур (ISA, EISA).
  • Распределённый ПДП (Bus Mastering) — каждое устройство, поддерживающее этот режим, имеет собственный контроллер ПДП, который может управлять шиной. Используется в современных шинах (PCI, PCI Express, SATA, USB 3.0).
  • ПДП встроенный в процессор — современные процессоры (например, x86-64 от Intel и AMD) имеют встроенные контроллеры ПДП, которые обеспечивают прямой доступ к памяти для устройств, подключённых к шине PCI Express.

По типу передачи

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

Устройство и характеристики

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

Типичный контроллер ПДП (например, Intel 8237) содержит:

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

Характеристики

  • Разрядность — определяет количество бит, передаваемых за один такт (8, 16, 32, 64 бита). Влияет на пропускную способность.
  • Максимальная скорость передачи — зависит от тактовой частоты шины и разрядности. Например, для шины ISA (8 МГц, 16 бит) максимальная скорость ПДП составляет около 16 Мбайт/с. Для PCI Express 3.0 (x16) — до 16 Гбайт/с.
  • Количество каналов — определяет, сколько устройств могут одновременно использовать ПДП (обычно от 4 до 8).
  • Поддержка режимов — наличие блочного, циклического или прозрачного режимов.

Применение

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

  • Накопители данных — жёсткие диски (HDD), твердотельные накопители (SSD) и оптические приводы используют ПДП для передачи данных в память. Без ПДП процессор был бы вынужден постоянно опрашивать контроллер диска, что сильно снижало бы производительность.
  • Сетевые адаптеры — при приёме и передаче пакетов данных сетевые карты используют ПДП для копирования данных в буферы памяти, освобождая процессор для обработки протоколов.
  • Видеокарты — современные видеокарты (GPU) через шину PCI Express используют ПДП для обмена текстурами, вершинными данными и результатами вычислений с оперативной памятью.
  • Звуковые карты — при воспроизведении и записи звука ПДП позволяет передавать аудиоданные без загрузки процессора.
  • Встроенные системы — в микроконтроллерах и системах на кристалле (SoC) ПДП используется для передачи данных между периферийными модулями (АЦП, ЦАП, UART, SPI) и памятью.

Проблемы и ограничения

  • Когерентность кэша — при использовании ПДП данные, записанные в память, могут оказаться устаревшими в кэше процессора. Для решения этой проблемы применяются механизмы когерентности кэша (например, протокол MESI) или специальные инструкции процессора (например, clflush в x86).
  • Конфликты на шине — при одновременном доступе нескольких устройств к шине могут возникать задержки и снижение пропускной способности. Для управления приоритетами используются арбитры шины.
  • Безопасность — ПДП может быть использован для атак на память (например, DMA-атаки), когда злоумышленник через физический доступ к шине (например, через Thunderbolt) может читать или записывать данные в память, минуя защиту операционной системы. Для защиты применяются механизмы, такие как IOMMU (Input-Output Memory Management Unit), который изолирует доступ устройств к памяти.

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

  • В первых IBM PC контроллер ПДП (Intel 8237) работал на частоте 4,77 МГц и поддерживал только 8-битные передачи.
  • В современных процессорах (например, Intel Core i7) встроенный контроллер ПДП может обрабатывать до 40 линий PCI Express, каждая из которых может работать в режиме Bus Mastering.
  • Технология Intel QuickPath Interconnect (QPI) и AMD HyperTransport также используют принципы ПДП для межпроцессорного обмена данными.

Источники

  • Intel Corporation. Intel 8237A High Performance Programmable DMA Controller Datasheet. 1984.
  • Tanenbaum, A. S., Austin, T. Structured Computer Organization. 6th ed. Pearson, 2012.
  • Hennessy, J. L., Patterson, D. A. Computer Architecture: A Quantitative Approach. 6th ed. Morgan Kaufmann, 2017.
  • PCI Express Base Specification Revision 3.0. PCI-SIG, 2010.

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

На главную BFOmetr →