Блок управления памятью
Блок управления памятью (англ. Memory Management Unit, MMU) — это аппаратный компонент компьютерной системы (обычно входящий в состав центрального процессора или размещённый на системной плате), который отвечает за трансляцию виртуальных адресов в физические, а также за контроль доступа к памяти. MMU является ключевым элементом для реализации виртуальной памяти, защиты памяти и многозадачности в современных операционных системах.
История
Предпосылки появления
В ранних компьютерах (1940–1950-е годы) программы работали непосредственно с физическими адресами оперативной памяти. Это приводило к ряду проблем: программа могла случайно или намеренно повредить память другой программы или операционной системы, а также не позволяло эффективно использовать ограниченный объём ОЗУ. С развитием многозадачности (1960-е годы) возникла необходимость в изоляции процессов и организации виртуальной памяти.
Развитие в 1960–1970-х годах
Первые реализации MMU появились в мейнфреймах. Например, система IBM System/360 (1964 год) имела механизм динамической трансляции адресов (DAT). В 1970-х годах MMU стали внедряться в мини-компьютеры (например, DEC PDP-11 с опциональным блоком KT11). Однако массовое распространение MMU получили с появлением микропроцессоров.
Эра микропроцессоров (1980-е — настоящее время)
В 1980-х годах MMU стали интегрировать в микропроцессоры. Процессор Intel 80286 (1982 год) имел блок управления памятью, поддерживающий защищённый режим. Intel 80386 (1985 год) ввёл страничную организацию памяти, ставшую стандартом. В RISC-архитектурах (ARM, MIPS, SPARC) MMU также стал обязательным компонентом. С начала 2000-х годов MMU присутствует практически во всех процессорах общего назначения, включая мобильные (ARM Cortex) и серверные (x86-64, PowerPC).
Функции
Трансляция адресов
Основная функция MMU — преобразование виртуальных адресов (используемых программами) в физические адреса (адреса ячеек ОЗУ). Это осуществляется двумя основными методами:
- Страничная организация (paging): виртуальное адресное пространство делится на блоки фиксированного размера — страницы (обычно 4 КБ, 2 МБ, 1 ГБ). Физическая память делится на кадры (page frames) того же размера. MMU хранит таблицу страниц (page table), где каждой виртуальной странице сопоставлен физический кадр.
- Сегментная организация (segmentation): виртуальное пространство делится на сегменты переменного размера (например, код, данные, стек). Каждый сегмент описывается дескриптором, содержащим базовый адрес и длину.
На практике часто используется комбинация сегментации и страничной организации (например, в x86-архитектуре в защищённом режиме).
Защита памяти
MMU контролирует доступ к памяти на уровне страниц или сегментов. Каждая запись в таблице страниц содержит биты прав доступа:
- Чтение/запись/исполнение: запрещает или разрешает соответствующие операции.
- Привилегированный доступ: разделение на кольца защиты (rings) — обычно 0 (ядро ОС) и 3 (пользовательские приложения).
- Присутствие страницы: указывает, загружена ли страница в физическую память или выгружена на диск.
При нарушении прав (например, попытка записи в защищённую память) MMU генерирует исключение (page fault или protection fault), которое обрабатывается операционной системой.
Реализация виртуальной памяти
MMU позволяет операционной системе эмулировать больший объём ОЗУ за счёт использования дискового пространства (файл подкачки или раздел swap). Когда программа обращается к странице, отсутствующей в физической памяти, MMU вызывает page fault. ОС загружает страницу с диска, при необходимости вытесняя другую страницу (алгоритмы замещения: LRU, FIFO, NRU).
Кеширование и буферизация
Современные MMU взаимодействуют с кеш-памятью процессора (L1, L2, L3). Они управляют тегами кеша, обеспечивая когерентность данных в многопроцессорных системах. Кроме того, MMU может содержать буфер ассоциативной трансляции (TLB — Translation Lookaside Buffer), который кеширует недавно использованные трансляции для ускорения работы.
Устройство и архитектура
Основные компоненты
- Таблица страниц (Page Table) — структура данных, хранящая отображения виртуальных страниц на физические кадры. Может быть многоуровневой (например, 4 уровня в x86-64) для экономии памяти.
- TLB (Translation Lookaside Buffer) — небольшой, быстрый кеш, хранящий последние трансляции. Размер TLB варьируется от 32 до 512 записей в современных процессорах.
- Контроллер доступа — проверяет права доступа и генерирует исключения при нарушениях.
- Регистры управления — например, CR3 в x86, содержащий адрес корневой таблицы страниц.
Многоуровневая трансляция
Для уменьшения размера таблиц страниц (особенно при 64-битной адресации) используется иерархическая структура. В архитектуре x86-64:
- Уровень 1 (PML4) — 512 записей, каждая указывает на таблицу уровня 2.
- Уровень 2 (PDP) — 512 записей.
- Уровень 3 (PD) — 512 записей.
- Уровень 4 (PT) — 512 записей, содержащих физические адреса кадров.
Таким образом, для трансляции одного виртуального адреса требуется до 4 обращений к памяти (если TLB не содержит нужной записи).
Аппаратная поддержка
В современных процессорах MMU полностью реализован аппаратно. Например, в ARM Cortex-A процессорах MMU управляется регистрами TTBR0/TTBR1 и контролирует кеширование через биты в дескрипторах страниц. В x86-64 MMU является частью ядра процессора и работает на частоте ядра.
Применение
Операционные системы
- Linux: использует страничную организацию с поддержкой huge pages (2 МБ, 1 ГБ) для уменьшения накладных расходов.
- Windows: аналогично, с поддержкой PAE (Physical Address Extension) для доступа к более 4 ГБ памяти в 32-битных версиях.
- RTOS (FreeRTOS, VxWorks): могут использовать упрощённый MMU или обходиться без него для детерминизма.
Виртуализация
В гипервизорах (KVM, Xen, VMware) MMU используется для изоляции гостевых ОС. Аппаратная виртуализация (Intel VT-x, AMD-V) позволяет гостевой ОС напрямую управлять MMU без вмешательства гипервизора (через вложенные страничные таблицы — NPT/SLAT).
Встраиваемые системы
В микроконтроллерах (например, ARM Cortex-M) MMU обычно отсутствует, так как они работают в реальном времени и не требуют виртуальной памяти. Однако в более мощных встраиваемых процессорах (ARM Cortex-A, RISC-V с привилегированным режимом) MMU обязателен для запуска Linux или Android.
Безопасность
MMU является основой для реализации изоляции процессов в многозадачных ОС. Например, механизм ASLR (Address Space Layout Randomization) использует MMU для случайного размещения сегментов программ, что затрудняет эксплуатацию уязвимостей.
Ограничения и критика
Производительность
Трансляция адресов через MMU добавляет задержки (особенно при промахах TLB). Для критичных к времени приложений (HPC, игры) это может быть проблемой. Решения: увеличение размера TLB, использование huge pages, предвыборка страниц.
Энергопотребление
MMU потребляет энергию, что критично для мобильных устройств. В ARM-процессорах есть режимы пониженного энергопотребления, отключающие MMU (например, при глубоком сне).
Сложность
Реализация MMU требует значительных аппаратных ресурсов (транзисторов) и усложняет проектирование процессора. В бюджетных микроконтроллерах MMU не используется для снижения стоимости.
Интересные факты
- В процессоре Intel 8086 не было MMU — адресация была сегментной, но без защиты и виртуализации.
- В архитектуре x86-64 максимальный размер виртуального адресного пространства составляет 48 бит (256 ТБ), хотя физическая память может быть до 64 ТБ.
- Некоторые процессоры (например, SPARC) поддерживают несколько контекстов MMU, что позволяет быстро переключаться между процессами без сброса TLB.
- В операционной системе Linux MMU используется для реализации механизма copy-on-write (COW), когда страницы разделяются между процессами до момента записи.
Источники
- Intel 64 and IA-32 Architectures Software Developer’s Manual, Volume 3A: System Programming Guide
- ARM Architecture Reference Manual (ARMv8-A)
- Таненбаум Э., Бос Х. Современные операционные системы. 4-е изд. — СПб.: Питер, 2015.
- Love R. Linux Kernel Development. 3rd ed. — Addison-Wesley, 2010.
- Hennessy J., Patterson D. Computer Architecture: A Quantitative Approach. 6th ed. — Morgan Kaufmann, 2017.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →