Джазель - Jazelle

Джазель DBX (прямое выполнение байт-кода)[1] это расширение, которое позволяет некоторым РУКА процессоры для выполнения Байт-код Java в аппаратное обеспечение в качестве третьего состояния выполнения наряду с существующими ARM и Большой палец режимы.[2] Функциональность Jazelle уточнена в архитектуре ARMv5TEJ[3] и первым процессором с технологией Jazelle был ARM926EJ-S.[4] Jazelle обозначается буквой «J», добавленной к имени процессора, за исключением ядер post-v5, где это требуется (хотя и только в тривиальной форме) для соответствия архитектуре.

Джазель РКИ (Цель компиляции времени выполнения) - это другая технология, основанная на режиме ThumbEE и поддерживающая раньше времени (AOT) и вовремя (JIT) компиляция с Java и другими средами исполнения.

Наиболее широко Jazelle DBX используется производителями мобильных телефонов для увеличения скорости выполнения Java ME игры и приложения.[нужна цитата ] Знающий джазель Виртуальная машина Java (JVM) будет пытаться запустить байт-код Java на оборудовании, возвращаясь к программному обеспечению для более сложных или менее используемых операций с байт-кодом. ARM утверждает, что примерно 95% байт-кода при типичном использовании программы в конечном итоге обрабатываются непосредственно на оборудовании.

Опубликованные спецификации очень неполны, их достаточно только для написания Операционная система код, который может поддерживать JVM, использующий Jazelle.[нужна цитата ] Заявленное намерение состоит в том, что только программное обеспечение JVM должно (или может) зависеть от деталей аппаратного интерфейса. Эта тесная привязка способствует совместному развитию оборудования и JVM, не затрагивая другое программное обеспечение. По сути, это дает ARM Holdings значительный контроль над тем, какие JVM могут использовать Jazelle.[нужна цитата ] Это также предотвращает использование Jazelle JVM с открытым исходным кодом. Эти проблемы не относятся к среде ARMv7 ThumbEE, номинального преемника Jazelle DBX.

Выполнение

Расширение Jazelle использует низкоуровневые двоичная трансляция, реализованный как дополнительный этап между этапами выборки и декодирования в процессоре конвейер команд. Распознанные байт-коды преобразуются в строку из одной или нескольких собственных инструкций ARM.

В режиме Jazelle интерпретация JVM переносится на аппаратное обеспечение для наиболее распространенных простых инструкций JVM. Это предназначено для значительного снижения стоимости интерпретации. Помимо прочего, это снижает потребность в Своевременная компиляция и другие методы ускорения JVM.[5] Инструкции JVM, которые не реализованы на оборудовании Jazelle, вызывают вызов соответствующих подпрограмм в реализации JVM, поддерживающей Jazelle. Подробности не публикуются, так как все внутренности JVM прозрачны (за исключением производительности) при правильной интерпретации.

В режим Jazelle можно войти через инструкции BXJ. Аппаратная реализация Jazelle будет охватывать только подмножество байт-кодов JVM. Для необработанных байт-кодов - или в случае переопределения операционной системой - оборудование вызовет программную JVM. Система спроектирована таким образом, что программной JVM не нужно знать, какие байт-коды реализованы на оборудовании, а программная JVM обеспечивает программный откат для полного набора байт-кодов.

Набор инструкций

Джазель Набор инструкций хорошо документирован как Байт-код Java. Однако ARM не раскрывает подробностей о точных деталях среды выполнения; документация, поставляемая с Sun's HotSpot Виртуальная машина Java доходит до утверждения: «Во избежание сомнений, распространение продуктов, содержащих программный код для выполнения инструкции BXJ и обеспечения возможности использования расширения архитектуры ARM Jazelle без [..] согласия ARM, категорически запрещено».[6]

Сотрудники ARM в прошлом опубликовали несколько белые бумаги которые действительно дают некоторые полезные сведения о расширении процессора. Версии справочного руководства по архитектуре ARM, доступные с 2008 г., включают псевдокод для инструкции «BXJ» (переход и обмен на Java), но более мелкие детали показаны как «ОПРЕДЕЛЕНА ПОДАРХИТЕКТУРА» и задокументированы в другом месте.

Бинарный интерфейс приложения (ABI)

Государство Джазель полагается на согласованное соглашение о вызовах между JVM и состоянием оборудования Jazelle. Этот двоичный интерфейс приложения не публикуется ARM, что делает Джазель недокументированная особенность для большинства пользователей и виртуальных машин свободного программного обеспечения.

Все состояние виртуальной машины хранится в обычных регистрах ARM, что обеспечивает совместимость с существующими операционными системами и обработчиками прерываний без изменений. При перезапуске байт-кода (например, после возврата из прерывания) будет повторно выполнена полная последовательность связанных инструкций ARM.

Конкретные регистры предназначены для хранения наиболее важных частей состояния JVM: регистры R0 – R3 содержат псевдоним вершины стека Java, R4 содержит нулевой локальный операнд Java (указатель на *это), а R6 содержит указатель стека Java.[7]

Джазель повторно использует существующие счетчик команд ПК или его синоним регистр R15. Указатель на следующий байт-код идет в R14,[8] поэтому использование ПК обычно не видно пользователю, кроме как во время отладки.

CPSR: индикация режима

Байт-код Java указывается как текущий набор инструкций комбинацией двух битов в ARM CPSR (регистр текущего состояния программы). Бит "T" должен быть очищен, а бит "J" установлен.[9]

Байт-коды декодируются аппаратным обеспечением в два этапа (по сравнению с одним этапом для кода Thumb и ARM), а переключение между аппаратным и программным декодированием (режим Jazelle и режим ARM) занимает ~ 4 тактовых цикла.[10]

Для успешного входа в состояние оборудования Jazelle JE (Jazelle Enable)[3] бит в регистре CP14: C0 (C2) [бит 0] должен быть установлен; очистка бита JE [привилегированной] операционной системой обеспечивает высокоуровневое переопределение для предотвращения использования прикладными программами аппаратного ускорения Jazelle.[11] Кроме того, бит CV (действительная конфигурация)[3] найдено в CP14: c0 (c1) [бит 1][11] должен быть установлен, чтобы показать, что существует согласованная настройка состояния Jazelle для используемого оборудования.

BXJ: переход на Java

Инструкция BXJ пытается переключиться в состояние Jazelle и, если разрешено и успешно, устанавливает бит «J» в CPSR; в противном случае он "проваливается" и действует как стандартный BX (Ответвляться ) инструкция.[3] Единственный раз, когда операционная система или отладчик должны полностью осознавать режим Jazelle, - это декодирование ошибочной или захваченной инструкции. Ява счетчик команд (ПК), указывающий на следующие инструкции, должен быть помещен в регистр связи (R14) перед выполнением запроса ветвления BXJ, поскольку независимо от аппаратной или программной обработки система должна знать, с чего начать декодирование.

Поскольку текущее состояние сохраняется в CPSR, набор инструкций байт-кода автоматически выбирается повторно после переключения задач и перезапуска обработки текущего байт-кода Java.[7]

После входа в режим состояния Jazelle байт-коды могут обрабатываться одним из трех способов: декодироваться и выполняться на аппаратном уровне, обрабатываться программно (с оптимизированным кодом ARM / ThumbEE JVM) или обрабатываться как недопустимый / недопустимый код операции. Третий случай вызовет переход в режим исключения ARM, как и байт-код Java 0xff, который используется для установки точек останова JVM.[12]

Выполнение будет продолжаться на оборудовании до тех пор, пока не будет обнаружен необработанный байт-код или не возникнет исключительная ситуация. От 134 до 149 байт-кодов (из 203 байт-кодов, указанных в спецификации JVM) транслируются и выполняются непосредственно в оборудовании.

Регистры низкого уровня

Регистры низкоуровневой конфигурации для аппаратной виртуальной машины хранятся в сопроцессоре ARM "регистр CP14 c0". Регистры позволяют обнаруживать, включать или отключать аппаратный ускоритель (если он доступен).[13]

  • Регистр идентификации Jazelle в регистре CP14: C0 (C0) доступен только для чтения во всех режимах.
  • Регистр управления ОС Jazelle на CP14: c0 (c1) доступен только в режиме ядра и вызовет исключение при доступе в пользовательском режиме.
  • Главный регистр конфигурации Jazelle на CP14: C0 (C2) доступен только для записи в пользовательском режиме и для чтения-записи в режиме ядра.

«Тривиальная» аппаратная реализация Jazelle (найденная в QEMU эмулятор) требуется только для поддержки самого кода операции BXJ (обработка BXJ как обычной инструкции BX[3]) и вернуть RAZ (чтение как ноль) для всех регистров CP14: c0, связанных с Jazelle.[14]

Преемник: ThumbEE

Архитектура ARMv7 приглушила Jazelle и Прямое выполнение байт-кода байт-кодов JVM. С точки зрения реализации, теперь требуется только тривиальная аппаратная поддержка для Jazelle: поддержка входа и выхода из режима Jazelle, но не для выполнения каких-либо байт-кодов Java.

Вместо этого Среда выполнения Thumb (Большой палец ) было предпочтительнее, но с тех пор также устарел. Поддержка ThumbEE была обязательной в процессорах ARMv7-A (таких как Cortex-A8 и Cortex-A9) и необязательной в процессорах ARMv7-R. ThumbEE нацелены на скомпилированные среды, возможно, используя JIT технологии. Это совершенно не относилось к Java и было полностью задокументировано; ожидалось гораздо более широкое распространение, чем могла добиться Джазель.

ThumbEE был вариантом 16/32-разрядного набора команд Thumb2. Он интегрировал проверку нулевого указателя; определены некоторые новые механизмы сбоев; и перепрофилировали 16-битное пространство кодов операций LDM и STM для поддержки нескольких инструкций, таких как проверка диапазона, новая схема вызова обработчика и многое другое. Соответственно, компиляторы, которые создают код Thumb или Thumb2, могут быть изменены для работы со средами выполнения на основе ThumbEE.

Рекомендации

  1. ^ Патент 7089539 - Интерпретация программных инструкций. Патент США 7089539 - Интерпретация программных инструкций. 
  2. ^ https://web.archive.org/web/20140328171422/https://www.arm.com/products/processors/technologies/jazelle.php
  3. ^ а б c d е Справочное руководство по архитектуре ARM
  4. ^ Shanghai Jade лицензирует стартовый комплект ARM Prime для DCP SoC
  5. ^ CPM Design Online - Использование аппаратных расширений ARM DBX для ускорения Java во встроенных приложениях с ограниченным пространством
  6. ^ Sun, Hotspot, Примечания к выпуску Реализация CLDC HotSpotTM версии 2.0
  7. ^ а б Технический документ ARM, Ускорение решения проблемы встроенной Java
  8. ^ Intel, Введение в архитектуру ARM. Мертвая ссылка, февраль 2020 г.
  9. ^ Маринас, Каталин (4 июня 2007 г.). "Re: [RFC] [PATCH] Добавить информацию о состоянии ARM Jazelle в надгробную плиту show_regs". linux-arm-kernel (Список рассылки). Получено 5 июн 2020.
  10. ^ Технический документ ARM, Высокопроизводительная Java на встроенных устройствах
  11. ^ а б Справочное руководство ARM (японский), ARM ア ー キ テ ク チ ャ リ フ ァ レ ン ス マ ュ ア ル
  12. ^ ARM, ARM1026EJ-S Техническое справочное руководство
  13. ^ Справочное руководство ARM, Общие сведения о режимах энергосбережения процессора ARM11
  14. ^ Справочник ARM, Техническое справочное руководство Cortex-A8