Жазель
Jazelle DBX (прямое выполнение байт-кода) [1] это расширение, которое позволяет некоторым процессорам ARM выполнять код Java аппаратный байт - в качестве третьего состояния выполнения наряду с существующими режимами ARM и Thumb . [2] Функциональность Jazelle была указана в архитектуре ARMv5TEJ. [3] а первым процессором с технологией Jazelle стал ARM926EJ-S . [4] Jazelle обозначается буквой «J», добавленной к имени ЦП, за исключением ядер после версии 5, где он требуется (хотя и только в тривиальной форме) для соответствия архитектуре.
Jazelle RCT (Runtime Compilation Target) — это другая технология, основанная на режиме ThumbEE; он поддерживает опережающую (AOT) и своевременную (JIT) компиляцию с Java и другими средами выполнения.
Наиболее широко Jazelle DBX используется производителями мобильных телефонов для увеличения скорости выполнения игр и приложений Java ME . [ нужна ссылка ] (JVM) с поддержкой Jazelle Виртуальная машина Java попытается запустить байт-код Java на аппаратном уровне, одновременно возвращаясь к программному обеспечению для более сложных или менее используемых операций с байт-кодом. ARM утверждает, что примерно 95% байт-кода при типичном использовании программы обрабатывается непосредственно на оборудовании.
Опубликованные спецификации очень неполны, их достаточно только для написания кода операционной системы , которая может поддерживать JVM, использующую Jazelle. [ нужна ссылка ] Заявленное намерение состоит в том, что только программное обеспечение JVM должно (или ему разрешено) зависеть от деталей аппаратного интерфейса. Такая тесная привязка облегчает совместную эволюцию аппаратного обеспечения и JVM, не затрагивая другое программное обеспечение. По сути, это дает ARM Holdings значительный контроль над тем, какие JVM могут использовать Jazelle. [ нужна ссылка ] Это также не позволяет JVM с открытым исходным кодом использовать Jazelle. Эти проблемы не относятся к среде ARMv7 ThumbEE, номинальному преемнику Jazelle DBX.
Выполнение
[ редактировать ]Расширение Jazelle использует низкоуровневую двоичную трансляцию , реализованную как дополнительный этап между этапами выборки и декодирования в конвейере инструкций процессора . Распознанные байт-коды преобразуются в строку из одной или нескольких собственных инструкций ARM.
Режим Jazelle переносит интерпретацию JVM на аппаратное обеспечение для наиболее распространенных простых инструкций JVM. Это призвано значительно снизить стоимость устного перевода. Помимо прочего, это снижает необходимость в JIT-компиляции и других методах ускорения JVM. [5] Инструкции JVM, которые не реализованы в аппаратном обеспечении Jazelle, вызывают вызов соответствующих процедур в реализации JVM, поддерживающей Jazelle. Подробности не публикуются, поскольку все внутренности JVM прозрачны (кроме производительности) при правильной интерпретации.
Вход в режим Jazelle осуществляется с помощью инструкций BXJ. Аппаратная реализация Jazelle будет охватывать только подмножество байт-кодов JVM. Для необработанных байт-кодов (или если они переопределены операционной системой) оборудование вызывает программную JVM. Система спроектирована таким образом, что программной JVM не нужно знать, какие байт-коды реализованы аппаратно, а программная JVM обеспечивает резервный вариант для полного набора байт-кодов.
Набор инструкций
[ редактировать ]Jazelle Набор инструкций хорошо документирован как байт-код Java . Однако ARM не опубликовала подробностей о точных деталях среды выполнения; документация, поставляемая с Sun HotSpot виртуальной машиной Java , доходит до следующего утверждения: «Во избежание сомнений, распространение продуктов, содержащих программный код для выполнения инструкции BXJ и позволяющее использовать расширение архитектуры ARM Jazelle без [..] соглашения от ARM категорически запрещено». [6]
Сотрудники ARM в прошлом опубликовали несколько официальных документов, в которых содержатся некоторые полезные советы по расширению процессора. [ нужна ссылка ] Версии справочного руководства по архитектуре ARM, доступные с 2008 года, включают псевдокод для инструкции «BXJ» (ветвь и обмен на Java), но более мелкие детали показаны как «ОПРЕДЕЛЕННАЯ ПОДАРХИТЕКТУРА» и документированы в другом месте.
Бинарный интерфейс приложения (ABI)
[ редактировать ]Состояние Jazelle зависит от согласованного соглашения о вызовах между JVM и состоянием оборудования Jazelle. Этот двоичный интерфейс приложения не опубликован ARM, что делает Jazelle недокументированной функцией для большинства пользователей и JVM свободного программного обеспечения.
Все состояние виртуальной машины хранится в обычных регистрах ARM, что обеспечивает совместимость с существующими операционными системами и обработчиками прерываний без изменений. Перезапуск байт-кода (например, после возврата из прерывания) приведет к повторному выполнению полной последовательности связанных инструкций ARM.
Определенные регистры предназначены для хранения наиболее важных частей состояния JVM: регистры R0–R3 содержат псевдоним вершины стека Java, R4 содержит нулевой локальный операнд Java (указатель на *this
), а R6 содержит указатель стека Java. [7]
Jazelle повторно использует существующий счетчик программ PC или его синоним регистра 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, — это декодирование ошибочной или захваченной инструкции. Java Счетчик программ (PC), указывающий на следующие инструкции, должен быть помещен в регистр связи (R14) перед выполнением запроса ветвления BXJ, поскольку независимо от аппаратной или программной обработки система должна знать, с чего начать декодирование.
Поскольку текущее состояние сохраняется в CPSR, набор инструкций байт-кода автоматически выбирается повторно после переключения задач и перезапуска обработки текущего байт-кода Java. [7]
После входа в режим состояния Jazelle байт-коды могут обрабатываться одним из трех способов: декодироваться и выполняться аппаратно, обрабатываться программно (с оптимизированным кодом JVM ARM/ThumbEE) или рассматриваться как недопустимый/недопустимый код операции. Третий случай приведет к переходу в режим исключения ARM, как и байт-код Java 0xff, который используется для установки точек останова JVM. [12]
Выполнение будет продолжаться аппаратно до тех пор, пока не встретится необработанный байт-код или не возникнет исключение. От 134 до 149 байт-кодов (из 203 байт-кодов, указанных в спецификации JVM) транслируются и выполняются непосредственно на оборудовании.
Регистры низкого уровня
[ редактировать ]Регистры конфигурации низкого уровня для аппаратной виртуальной машины хранятся в «регистре CP14 c0» сопроцессора ARM. Регистры позволяют обнаружить, включить или отключить аппаратный ускоритель (если он доступен). [13]
- Регистр идентификаторов Jazelle в регистре CP14:C0(C0) доступен только для чтения во всех режимах.
- Регистр управления ОС Jazelle по адресу CP14:c0(c1) доступен только в режиме ядра и вызовет исключение при доступе в пользовательском режиме.
- Регистр основной конфигурации Jazelle по адресу CP14:C0(C2) доступен только для записи в пользовательском режиме и для чтения и записи в режиме ядра.
«Тривиальная» аппаратная реализация Jazelle (как в эмуляторе QEMU ) требуется только для поддержки самого кода операции BXJ (рассматривая BXJ как обычную инструкцию BX). [3] ) и вернуть RAZ (Read-As-Zero) для всех регистров, связанных с CP14:c0 Jazelle. [14]
Преемник: ThumbEE
[ редактировать ]В архитектуре ARMv7 меньше внимания уделяется Jazelle и прямому выполнению байт-кодов JVM. С точки зрения реализации теперь требуется только тривиальная аппаратная поддержка Jazelle: поддержка входа и выхода из режима Jazelle, но не выполнение каких-либо байт-кодов Java.
Вместо этого среде выполнения Thumb ( ThumbEE предпочтение отдавалось ), но с тех пор она также устарела. Поддержка ThumbEE была обязательной в процессорах ARMv7-A (таких как Cortex-A8 и Cortex-A9) и необязательной в процессорах ARMv7-R. ThumbEE ориентирован на скомпилированные среды, возможно, с использованием JIT технологий . Это не было специфичным для Java и было полностью документировано; Ожидалось гораздо более широкое распространение, чем смогла достичь Джазель.
ThumbEE был вариантом 16/32-битного набора команд Thumb2. Он интегрировал проверку нулевого указателя; определил некоторые новые механизмы неисправностей; и перепрофилировали 16-битное пространство кодов операций LDM и STM для поддержки нескольких инструкций, таких как проверка диапазона, новая схема вызова обработчика и многое другое. Соответственно, компиляторы, создающие код Thumb или Thumb2, могут быть модифицированы для работы со средами выполнения на основе ThumbEE.
Ссылки
[ редактировать ]- ^ US 7089539 , «Интерпретация программных инструкций».
- ^ «Вычисления с использованием искусственного интеллекта» . Архивировано из оригинала 28 марта 2014 г.
- ^ Jump up to: а б с д и «Справочное руководство по архитектуре ARM» (PDF) . Arm.com . Архивировано из оригинала 26 января 2007 г.
{{cite web}}
: CS1 maint: неподходящий URL ( ссылка ) - ^ «Shanghai Jade лицензирует стартовый комплект ARM Prime для SoC DCP» . Проектирование и повторное использование . 12 января 2004 г. Архивировано из оригинала 6 февраля 2004 г.
- ^ «CPM Design Online — использование аппаратных расширений ARM DBX для ускорения Java во встроенных приложениях с ограниченным пространством» . Архивировано из оригинала 21 декабря 2008 г. Проверено 25 февраля 2009 г.
- ^ «Примечания к выпуску — реализация CLDC HotSpotTM — версия 1.1.3» . java.sun.com . 26 октября 2007 г. Архивировано из оригинала 2 июня 2008 г.
{{cite web}}
: CS1 maint: неподходящий URL ( ссылка ) - ^ Jump up to: а б «Информационный документ ARM. Ускорение решения проблем встроенной Java» (PDF) . jp.arm.com . 14 апреля 2004 г. Архивировано из оригинала (PDF) 9 января 2009 г.
- ^ Intel, введение в архитектуру ARM. Мертвая ссылка, февраль 2020 г. [ постоянная мертвая ссылка ]
- ^ Маринас, Каталин (4 июня 2007 г.). «Re: [RFC][PATCH] Добавить информацию о состоянии ARM Jazelle в надгробие show_regs» . linux-arm-kernel (список рассылки) . Проверено 5 июня 2020 г.
- ^ Технический документ ARM, Высокопроизводительная Java на встроенных устройствах.
- ^ Jump up to: а б по архитектуре ARM « Справочное руководство » (PDF) . jp.arm.com (на японском языке). Архивировано из оригинала (PDF) 10 сентября 2008 г.
- ^ ARM, ARM1026EJ-S Техническое справочное руководство.
- ^ Справочное руководство ARM, Общие сведения о режимах энергосбережения процессора ARM11.
- ^ Справочник ARM, Техническое справочное руководство Cortex-A8.