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

Прямой доступ к памяти

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

История

Концепция прямого доступа к памяти возникла в 1950-х годах в связи с необходимостью ускорить ввод-вывод данных в вычислительных машинах. Первые реализации ПДП появились в мейнфреймах, где процессор был слишком медленным для обработки каждого байта данных с периферийных устройств. В 1960-х годах компания IBM внедрила ПДП в свои системы серии System/360, что позволило значительно повысить производительность операций ввода-вывода.

С развитием микропроцессоров в 1970-х годах ПДП стал стандартной функцией в персональных компьютерах. В 1981 году IBM PC использовал контроллер ПДП Intel 8237, который обеспечивал четыре канала для передачи данных. В последующие десятилетия архитектура ПДП эволюционировала: появились более сложные контроллеры, встроенные в чипсеты материнских плат, а затем — в сами процессоры (например, в архитектуре x86 с появлением технологии Intel QuickPath Interconnect и AMD HyperTransport).

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

ПДП реализуется с помощью специализированного контроллера (DMA-контроллера) или встроенного механизма в процессоре. Процесс передачи данных включает несколько этапов:

  1. Инициализация: процессор настраивает контроллер ПДП, указывая адрес источника данных (например, регистр устройства ввода-вывода), адрес назначения в оперативной памяти, количество байтов для передачи и направление (чтение или запись).
  2. Запрос шины: устройство, готовое к передаче, отправляет сигнал запроса ПДП (DREQ) контроллеру.
  3. Арбитраж шины: контроллер ПДП запрашивает управление системной шиной у процессора. Процессор приостанавливает свою работу (или освобождает шину) и передаёт управление.
  4. Передача данных: контроллер ПДП управляет шиной и переносит данные между устройством и памятью напрямую, без участия процессора. Каждый такт шины передаётся один байт или слово (в зависимости от разрядности).
  5. Завершение: после передачи заданного количества байтов контроллер ПДП отправляет сигнал прерывания (IRQ) процессору, сообщая об окончании операции. Процессор возобновляет свою работу.

В современных системах ПДП часто реализуется через механизм bus mastering, когда устройство само становится «ведущим» на шине (например, PCI Express) и управляет передачей, не требуя отдельного контроллера.

Типы ПДП

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

По способу инициализации

По режиму работы контроллера

По типу шины

Применение

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

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

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

Недостатки

Современные реализации

В современных процессорах (например, Intel Core i7 и AMD Ryzen) ПДП интегрирован в чипсет или непосредственно в процессор. Используются технологии, такие как:

Примеры использования

Критика

Основной критикой ПДП является его уязвимость к ошибкам и атакам. В 2018 году была обнаружена уязвимость Rowhammer, которая использовала ПДП для изменения данных в соседних ячейках памяти. Также ПДП может быть использован в атаках типа DMA attack, когда злоумышленник подключает устройство (например, через Thunderbolt) и получает прямой доступ к памяти, обходя защиту операционной системы. Для защиты применяются технологии, такие как IOMMU (Input-Output Memory Management Unit), которая изолирует доступ устройств к памяти.

Источники

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

На главную BFOmetr →