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

Memory Protection Unit

Memory Protection Unit (MPU, блок защиты памяти) — это аппаратный модуль микроконтроллера или микропроцессора, предназначенный для контроля доступа к областям оперативной памяти и периферийным устройствам. MPU реализует политику защиты памяти на основе привилегий, разделяя адресное пространство на регионы с заданными правами доступа (чтение, запись, исполнение) и уровнями привилегий (режим ядра и пользовательский режим). В отличие от более сложного блока управления памятью (MMU), MPU не выполняет трансляцию виртуальных адресов в физические, а работает исключительно с физическими адресами, что делает его эффективным для встраиваемых систем реального времени.

История

Концепция аппаратной защиты памяти восходит к 1960-м годам, когда в мейнфреймах (например, IBM System/360) использовались регистры границ для изоляции процессов. В микроконтроллерах MPU начали применяться в 1990-х годах с развитием операционных систем реального времени (RTOS) и необходимостью защиты от ошибок программирования. Первые массовые реализации появились в архитектуре ARMv7-M (серия Cortex-M3/M4), где MPU стал стандартным компонентом для обеспечения безопасности в медицинских, автомобильных и промышленных устройствах. В 2020-х годах, с ростом требований к кибербезопасности (стандарты IEC 62443, ISO 21434), MPU интегрируется в большинство 32-битных микроконтроллеров, включая RISC-V и российские разработки (например, «Эльбрус»).

Архитектура и принцип работы

Регионы защиты

MPU делит физическое адресное пространство на несколько регионов (обычно от 8 до 16). Каждый регион характеризуется:

  • Базовым адресом — начало области (выравнивается по размеру региона).
  • Размером — степень двойки (от 32 байт до 4 ГБ).
  • Атрибутами доступа:
  • Чтение (R) — разрешено чтение данных.
  • Запись (W) — разрешена запись данных.
  • Исполнение (X) — разрешено выполнение кода.
  • Привилегии — доступ только из режима ядра (Privileged) или из пользовательского режима (Unprivileged).

Уровни привилегий

В архитектурах с MPU (например, ARM Cortex-M) поддерживаются два режима:

  • Handler Mode (режим обработчика прерываний) — полный доступ ко всем регионам, используется ядром RTOS и обработчиками прерываний.
  • Thread Mode (потоковый режим) — может быть привилегированным или непривилегированным. Обычно приложения работают в непривилегированном режиме, где MPU блокирует доступ к критическим областям (стеку ядра, таблицам векторов прерываний, периферии).

Механизм проверки

При каждом обращении к памяти (чтение/запись/выполнение) MPU проверяет:

  1. Попадает ли адрес в один из заданных регионов.
  2. Соответствует ли тип доступа атрибутам региона.
  3. Имеет ли текущий режим (привилегированный/непривилегированный) право на доступ.

Если проверка не пройдена, генерируется исключение (например, HardFault или MemManage Fault в ARM), которое обрабатывается операционной системой.

Виды и реализации

MPU в архитектуре ARM Cortex-M

  • Cortex-M0+ — опциональный MPU с 8 регионами, фиксированный размер региона (32 байта).
  • Cortex-M3/M4 — стандартный MPU с 8 регионами, поддержка атрибутов кэширования и буферизации.
  • Cortex-M7 — MPU с 16 регионами, поддержка TEX (Type Extension) для управления кэшем.
  • Cortex-M33/M85 — MPU с TrustZone, разделение на безопасный (Secure) и небезопасный (Non-Secure) миры.

MPU в архитектуре RISC-V

  • PMP (Physical Memory Protection) — аналог MPU, обязательный для профилей RISC-V S (Supervisor) и U (User). Поддерживает до 16 регионов с атрибутами R/W/X и режимами M (Machine), S, U.
  • Smepmp — расширение для защиты от выполнения кода в стеке (аналог NX-бита).

MPU в российских процессорах

  • «Эльбрус» (МЦСТ) — аппаратная защита памяти на основе тегов (capability-based), где каждый указатель содержит права доступа. MPU реализован как часть системы управления памятью, поддерживает до 16 регионов.
  • «Байкал» (Байкал Электроникс) — в ядрах ARM Cortex-A75 MPU используется для изоляции ядер и периферии в режиме TrustZone.

Применение

Операционные системы реального времени (RTOS)

  • FreeRTOS — использует MPU для изоляции задач: каждая задача получает свой регион памяти (стек, куча, глобальные переменные). При нарушении доступа (например, задача пытается изменить стек другой задачи) генерируется исключение, что предотвращает крах всей системы.
  • Zephyr — поддерживает MPU для защиты от переполнения стека и разделения привилегий между ядром и пользовательскими приложениями.
  • RT-Thread — в версии 4.0+ реализован менеджер MPU для динамического выделения регионов.

Безопасность встраиваемых систем

  • Медицинские устройства (кардиостимуляторы, инсулиновые помпы) — MPU блокирует запись в критически важные области (например, таблицу векторов прерываний), предотвращая сбои из-за ошибок ПО.
  • Автомобильная электроника (ECU, ADAS) — соответствие стандарту ISO 26262 (ASIL D) требует изоляции компонентов разного уровня критичности. MPU разделяет память между модулями ABS, подушек безопасности и мультимедиа.
  • Промышленные контроллеры (PLC) — MPU защищает от переполнения буфера в протоколах (Modbus, CANopen), что критично для систем управления технологическими процессами.

Кибербезопасность

  • Защита от эксплуатации уязвимостей — MPU запрещает выполнение кода в областях данных (NX-бит), что делает невозможным атаки типа buffer overflow с внедрением шелл-кода.
  • Изоляция криптографических ключей — ключи хранятся в отдельном регионе с доступом только из режима ядра, что предотвращает их утечку через пользовательские приложения.
  • TrustZone (ARM) — MPU в сочетании с TrustZone создаёт безопасную среду (Secure World) для выполнения доверенного кода, изолированного от основной ОС (Non-Secure World).

Сравнение с MMU

ПараметрMPUMMU
Трансляция адресовНет (работает с физическими адресами)Да (виртуальные → физические)
СложностьНизкая (несколько регистров)Высокая (TLB, таблицы страниц)
Задержка доступа0–1 такт (фиксированная)1–10 тактов (зависит от кэша TLB)
ЭнергопотреблениеНизкоеУмеренное
Поддержка виртуальной памятиНетДа (свопинг, страничная организация)
Область примененияMCU, RTOS, безопасные системыMPU, Linux, многозадачные ОС

MPU выбирается, когда требуется детерминированное время отклика и низкое энергопотребление, а MMU — для сложных ОС с виртуальной памятью (Linux, Windows Embedded).

Ограничения и критика

  • Недостаточная гибкость — фиксированное число регионов (обычно 8–16) ограничивает количество изолированных областей. В сложных системах с десятками задач этого может не хватить.
  • Отсутствие виртуальной памяти — MPU не позволяет выгружать данные на диск, что критично для систем с большим объёмом данных (например, мультимедийные плееры).
  • Сложность настройки — неправильное задание регионов (например, перекрытие или невыравнивание) может привести к неработоспособности системы. Требуется тщательное проектирование карты памяти.
  • Уязвимости в реализации — в некоторых моделях (например, ранние версии Cortex-M3) обнаружены ошибки в MPU, позволяющие обходить защиту через определённые последовательности инструкций.

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

  • Первый MPU в микроконтроллере появился в 1998 году в чипе ARM7TDMI (опционально).
  • В архитектуре RISC-V PMP может быть реализован программно через трапы (ловушки), что снижает производительность, но упрощает аппаратуру.
  • Российский микроконтроллер «К1986ВЕ92Ф» (НИИЭТ) содержит MPU с 8 регионами, совместимый с ARM Cortex-M4.
  • В 2023 году компания NXP выпустила серию MCX N94x с MPU, поддерживающим до 32 регионов — рекорд для массовых микроконтроллеров.

Источники

  • ARM Architecture Reference Manual ARMv7-M (ARM DDI 0403E)
  • RISC-V Instruction Set Manual, Volume II: Privileged Architecture (Version 1.12)
  • FreeRTOS MPU Porting Guide (Amazon Web Services)
  • IEC 62443-4-2: Security for industrial automation and control systems
  • ISO 26262-6: Road vehicles — Functional safety — Product development at the software level

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

На главную BFOmetr →