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

Dynamic Address Translation

Dynamic Address Translation (DAT, динамическая трансляция адресов) — это механизм управления памятью в вычислительных системах, обеспечивающий автоматическое преобразование виртуальных (логических) адресов, используемых программой, в физические адреса оперативной памяти. DAT является ключевым компонентом систем с виртуальной памятью, позволяя процессам работать с адресным пространством, не зависящим от фактического размера и расположения доступной физической памяти.

История

Концепция динамической трансляции адресов возникла в 1960-х годах в связи с развитием многозадачных операционных систем и необходимостью изоляции процессов друг от друга. Первые реализации DAT были аппаратными и появились в мейнфреймах, таких как IBM System/360 (1964 год) и Atlas (1962 год, Манчестерский университет). В этих системах использовались сегментная и страничная организация памяти, требующие динамического преобразования адресов.

В 1970-х годах DAT стала стандартной функцией процессоров для универсальных ЭВМ, включая советские модели, такие как ЕС ЭВМ (серия IBM-совместимых машин) и БЭСМ-6. В последней использовалась страничная организация памяти с аппаратным блоком трансляции адресов, что позволяло эффективно реализовывать многозадачность.

С распространением микропроцессоров в 1980-х годах DAT была интегрирована в архитектуры x86 (Intel 80286, 1982 год — защищённый режим с сегментацией; Intel 80386, 1985 год — страничная адресация) и ARM. В современных процессорах DAT реализована на аппаратном уровне через блоки управления памятью (MMU — Memory Management Unit).

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

DAT преобразует виртуальный адрес, сгенерированный процессором или программой, в физический адрес, по которому происходит обращение к оперативной памяти. Этот процесс включает несколько этапов:

  1. Разделение адреса. Виртуальный адрес делится на номер виртуальной страницы (или сегмента) и смещение внутри неё.
  2. Поиск в таблице страниц. MMU обращается к таблице страниц (или сегментов), хранящейся в оперативной памяти, чтобы найти запись, соответствующую данному виртуальному адресу. Запись содержит физический адрес страницы, а также флаги доступа (например, права на чтение/запись, бит присутствия).
  3. Проверка прав доступа. Если страница отсутствует в физической памяти (бит присутствия сброшен), возникает исключение (page fault), которое обрабатывается операционной системой. ОС загружает страницу из внешней памяти (например, с диска) в ОЗУ и обновляет таблицу.
  4. Формирование физического адреса. Если страница присутствует, MMU объединяет физический адрес страницы из таблицы со смещением из виртуального адреса, получая итоговый физический адрес.

Для ускорения трансляции используется буфер ассоциативной трансляции (TLB — Translation Lookaside Buffer), который кэширует недавно использованные записи таблицы страниц. TLB является частью MMU и значительно снижает задержки при обращении к памяти.

Типы трансляции

Страничная трансляция

Виртуальное адресное пространство делится на страницы фиксированного размера (обычно 4 КБ в x86-совместимых системах, 64 КБ в некоторых архитектурах). Каждая страница независимо отображается на физическую память. Это позволяет эффективно использовать память, так как страницы могут быть разбросаны по физической памяти произвольным образом. Страничная трансляция поддерживается в большинстве современных ОС (Linux, Windows, macOS).

Сегментная трансляция

Виртуальное адресное пространство делится на сегменты переменной длины, соответствующие логическим частям программы (например, код, данные, стек). Каждый сегмент имеет базовый адрес и длину. Сегментная трансляция использовалась в ранних системах (Intel 80286, OS/2) и в архитектуре x86 в защищённом режиме. В современных системах сегментация обычно сочетается со страничной трансляцией (например, в x86-64 сегментация минимальна, а основная нагрузка ложится на страницы).

Комбинированная трансляция

Многие архитектуры (например, x86-64, ARMv8-A) поддерживают двухуровневую трансляцию: сначала виртуальный адрес преобразуется в линейный адрес через сегментацию (или игнорируется), а затем — в физический через страничную таблицу. В некоторых системах (например, IBM PowerPC) используется трехуровневая иерархия таблиц страниц.

Аппаратная реализация

DAT реализуется через блок управления памятью (MMU), который является частью процессора. MMU содержит:

  • Таблицы страниц (Page Tables) — структуры данных в оперативной памяти, описывающие отображение виртуальных страниц на физические.
  • TLB — быстрый кэш для записей таблиц страниц.
  • Контроллер исключений — обрабатывает page faults и другие ошибки трансляции.

В многопроцессорных системах (SMP) каждый процессор имеет собственный MMU, но таблицы страниц могут быть общими или раздельными. Для синхронизации TLB между процессорами используются инструкции типа INVLPG (x86) или TLBI (ARM).

Применение

DAT является основой для реализации следующих функций операционных систем:

  • Виртуальная память. Позволяет процессам использовать адресное пространство, превышающее объём физической памяти. Неиспользуемые страницы выгружаются на диск (своп-файл или раздел подкачки).
  • Изоляция процессов. Каждый процесс получает собственное виртуальное адресное пространство, что предотвращает несанкционированный доступ к памяти других процессов.
  • Защита памяти. Биты доступа в таблицах страниц (например, запрет на выполнение кода из данных) предотвращают эксплуатацию уязвимостей, таких как переполнение буфера.
  • Поддержка многозадачности. ОС может быстро переключать контексты, меняя только таблицы страниц (или их часть) без физического перемещения данных.
  • Совместное использование памяти. Разные виртуальные адреса могут указывать на одну физическую страницу (например, разделяемые библиотеки).

Примеры в архитектурах

x86 (Intel/AMD)

В защищённом режиме (32-бит) используется двухуровневая страничная трансляция: виртуальный адрес делится на каталог (10 бит), таблицу (10 бит) и смещение (12 бит). В 64-битном режиме (x86-64) применяется четырёхуровневая иерархия (9 бит на уровень, 12 бит смещение). В процессорах Intel Core (начиная с 2013 года) поддерживается пятиуровневая трансляция для адресации до 57 бит виртуального пространства.

ARM

В архитектуре ARMv8-A (AArch64) используется четырёхуровневая страничная трансляция с размером страницы 4 КБ, 16 КБ или 64 КБ. MMU поддерживает отдельные таблицы для привилегированного (EL1) и пользовательского (EL0) режимов.

RISC-V

В архитектуре RISC-V (начиная с версии 1.10) реализована аппаратная страничная трансляция через уровни Sv32 (32-бит), Sv39 (39-бит), Sv48 (48-бит) и Sv57 (57-бит). Размер страницы фиксирован — 4 КБ.

Критика и ограничения

  • Накладные расходы. DAT требует дополнительных циклов процессора на каждый доступ к памяти (особенно при промахе TLB). В современных системах это компенсируется большими кэшами TLB (до 4096 записей) и предварительной выборкой.
  • Сложность реализации. Многоуровневые таблицы страниц увеличивают задержки при промахе TLB. Для снижения задержек используются аппаратные ускорители (например, page walker в x86).
  • Уязвимости. Ошибки в реализации DAT (например, в MMU Intel Pentium в 1990-х годах) могут приводить к сбоям или утечкам данных. Атаки типа Meltdown и Spectre (2018 год) эксплуатировали особенности работы TLB и спекулятивного выполнения.
  • Зависимость от ОС. DAT требует поддержки со стороны операционной системы (настройка таблиц, обработка page faults). Без ОС (например, в embedded-системах) DAT может быть отключена.

Источники

  • Таненбаум Э., Бос Х. «Современные операционные системы» (4-е издание). — СПб.: Питер, 2015.
  • Intel Corporation. «Intel 64 and IA-32 Architectures Software Developer’s Manual» (Volume 3A: System Programming Guide). — 2023.
  • ARM Limited. «ARM Architecture Reference Manual ARMv8-A» (DDI 0487I). — 2022.
  • Waterman A., Asanović K. «The RISC-V Instruction Set Manual, Volume II: Privileged Architecture» (Document Version 1.12). — 2021.
  • Hennessy J., Patterson D. «Computer Architecture: A Quantitative Approach» (6th Edition). — Morgan Kaufmann, 2017.

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

На главную BFOmetr →