Jazelle DBX (англ. Direct Bytecode eXecution, «безпосереднє виконання байткоду») — технологія, що дозволяє виконання інструкцій байт-коду Java на апаратному рівні. Реалізована у деяких процесорах архітектури ARM.
Пропрієтарні віртуальні машини Java, що підтримують Jazelle, виконують код Java апаратно, і лише для деяких складних чи рідко використовуваних інструкцій — програмно. Згідно з вимогою ARM, приблизно 95 % байт-коду типового програмного забезпечення виконувалися апаратно.[]
Перша архітектура з підтримкою Jazelle — ARMv5TEJ, а перший дизайн процесора з цією технологією — ARM926EJ-S. Наявність Jazelle позначається літерою «J» у назві архітектури чи процесора.
Опублікувані специфікації є досить неповними, оскільки достатні лише для написання коду операційної системи яка може підтримувати JVM, використовуючи Jazelle. Проголошена мета полягає в тому, що тільки JVM повинно (або може) залежати від деталей апаратного інтерфейсу. Цей тісний зв'язок між JVM і апаратною складовою сприяє їх взаємному розвитку без шкоди для інших програм. По суті це надає ARM Ltd. значний контроль над тим, які саме Java-машинами здатні використовувати Jazelle.
Одне з очевидних застосувань Jazelle — прискорення виконання програм для платформи Java ME.
Технологія , що з'явилася у архітектурі ARMv7, може вважатися номінальним нащадком Jazelle.
Реалізація
Розширення Jazelle працює як , і реалізоване як додаткова стадія між вибіркою і декодуванням інструкції центрального процесора. Розпізнані байт-коди перетворюються в послідовності з однієї або більше інструкцій ARM.
Режим Jazelle виконує апаратно найбільш поширені прості інструкції JVM, з метою суттєво збільшити швидкість інтерпретації. Серед іншого, це зменшує необхідність в компілюванні «на льоту» (just in time) та інших JVM технологій прискорення. JVM інструкції, які не реалізовані на апаратному рівні Jazelle, призводять до виклику відповідних підпрограм у JVM. Детальна інформація не публікується.
Перехід до режиму Jazelle здійснюється інструкцією BXJ
.
Архітектура системи команд
Набір команд Jazelle документовано як байт-код Java. Разом з тим компанією ARM не було опубліковано подробиць з виконання цих команд. Наприклад, у документації, що надається з віртуальною машиною HotSpot, вказано: «Для того, щоб уникнути непорозумінь, заявляємо: дистрибуція програм, які містять код інструкції BXJ
і дозволяють використовувати режим Jazelle [..] без явного дозволу компанії ARM заборонена.».
Співробітники ARM в минулому опублікували декілька «білих» документів (англ. white papers), що мали показати деякі аспекти розширень процесора. Довідник з архітектури ARM версії 2008 року містив псевдокод інструкції BXJ
(англ. Branch and eXchange to Java), але без вказання подробиць.
Двійковий програмний інтерфейс (ABI)
Двійковий програмний інтерфейс (ABI) Jazelle, необхідний для коректної взаємодії з JVM, не опублікований ARM, в результаті чого Jazelle є незадокументованою функцією для більшості користувачів і відкритих реалізацій JVM.
Стан віртуальної машини Jazelle знаходиться в межах звичайних регістрів ARM, що забезпечує сумісність з існуючими операційними системами і обробниками переривань і винятків. Перезапуск байт-коду (наприклад, після повернення з переривання) повторно виконує всю послідовність відповідних інструкцій ARM.
Найважливіші складові стану JVM зберігаються у спеціальних регістрах: регістри r0
-r3
слугують як аліас вершини стеку Java, регістр r4
містить локальний операнд номер 0 (призначений для *this
), а r6
вказує на верхівку стеку Java.
Jazelle використовує той самий регістр адреси інструкції, що і решта режимів ARM (r15
). Регістр r14
вказує на наступний байт-код в r14, тому лічильник команд у Jazelle-режимі, як правило, не помітний для користувача (якщо тільки не відбувається зневадження).
Індикація режиму у регістрі CPSR
Режим виконання байт-коду Java позначається поєднанням двох бітів у регістрі ARM CPSR (англ. Current Program Status Register — регістр поточного статусу програми). Біт T
має бути очищений, а біт J
— встановлений.
Байт-код декодується апаратно в два етапи (у порівнянні з одним для Thumb та ARM коду). Перемикання між апаратним та програмним декодуванням (режим Jazelle і режим ARM) займає приблизно 4 такти процесора..
Для входу у режим Jazelle, біт JE
(англ. Jazelle Enable) у регістрі співпроцесора CP14:c0(c2) (біт 0) повинен бути встановленим. Якщо операційна система очищує цей біт, це унеможливлює виконання програми користувача з прискоренням Jazelle. Крім цього, біт 1 (CV, англ. Configuration Valid) регістру CP14:c0(c1) має бути встановлений, щоб показати, що встановлена конзистентність режиму Jazelle для використання процесором.
Інструкція BXJ
Інструкція BXJ
(англ. Branch and eXchange to Java)) здійснює перехід на вказану адресу, і одночасно, якщо це можливо, встановлює стан Jazelle — біт J у регістрі CPSR. Якщо вхід у режим Jazelle неможливий, інструкція діє аналогічно до BX
. Єдине місце, де операційна система або зневаджувач повинні знати про режим Jazelle, це декодування інструкцій, що викликають виняткові ситуації. Перед виконанням команди BXJ
до регістру R14 (Link Register) повинна бути записана адреса наступної інструкції у режимі Java, незалежно від того, використовується апаратне прискорення Java чи ні.
Через те, що поточний стан процесора зберігається у CPSR, набір команд Java автоматично активується після перемикання задачі, і виконання Java продовжується з коректної адреси.
Після переходу в режим Jazelle, байт-код може опрацьовуватися по одному з трьох шляхів; декодування і виконання на апаратному рівні, програмне виконання (з оптимізованим для ARM/ThumbEE кодом JVM), або некоректний код операції. Третій випадок спричиняє виняткову ситуацію (режим ARM) — наприклад, так відбувається у випадку Java байт-коду 0xFF, що використовується для встановлення точки зупинки JVM (breakpoint).
Виконання продовжується на апаратному рівні до тих пір, поки не трапиться непідтримуваний байт-код, або не виникне нештатна ситуація. З 203 кодів, зазначених у специфікації JVM, апаратно декодуються і виконуються приблизно 134—149 інструкцій.
Низькорівневі регістри
Низькорівневі регістри конфігурації апаратної віртуальної машини знаходяться в ARM співпроцесорі «CP14 регістр c0». Регістри дозволяють виявляти, вмикати або вимикати апаратний прискорювач, якщо він присутній.
- Jazelle Identity Register (CP14:c0(c0)): доступний тільки для читання у всіх режимах.
- Jazelle OS Control Register (CP14:c0(c1)): доступний лише у режимі ядра, при зверненні з режима користувача настає виняткова ситуація.
- Jazelle Main Configuration Register (CP14:c0(С2)) доступний лише для запису в режимі користувача та читання-запису в режимі ядра.
Емулятор QEMU підтримує «тривіальну» реалізацію Jazelle: інструкція BXJ
працює так само, як і звичайна BX
, а всі регістри CP14:c0 повертають при читанні нуль.
Джерела
- . Архів оригіналу за 27 травня 2005. Процитовано 22 березня 2018.
- ARM
- . Архів оригіналу за 27 вересня 2007. Процитовано 22 березня 2018.
- CPM Design Online Використання розширень ARM DBX для прискорення виконання Java при обмежених ресурсах вбудованих застосунків [ 21 грудня 2008 у Wayback Machine.]
- Sun, Hotspot, Заключні Нотатки CLDC HotSpotTM Реалізації V_2.0 [ 2 червня 2008 у Wayback Machine.]
- Accelerating to meet the challenge of embedded Java [ 9 січня 2009 у Wayback Machine.].
- ARM Whitepaper,
- 02_ARM_Architecture.ppt : Introduction to ARM architecture (англ.). Intel.
- Catalin Marinas (ARM). [RFC][PATCH] Add ARM Jazelle state info in show_regs tombstone (англ.).
- ARM Whitepaper, Висока продуктивність Java на вбудованих пристроях.
- ARM довідковий посібник (японською),
- ARM, Технічний довідник ARM1026EJ-S [ 23 березня 2018 у Wayback Machine.]
- Довідниковий посібник ARM, Режим збереження енергії процесорів ARM11 [ 23 березня 2018 у Wayback Machine.]
- . Архів оригіналу за 23 березня 2018. Процитовано 28 квітня 2022.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Jazelle DBX angl Direct Bytecode eXecution bezposerednye vikonannya bajtkodu tehnologiya sho dozvolyaye vikonannya instrukcij bajt kodu Java na aparatnomu rivni Realizovana u deyakih procesorah arhitekturi ARM Propriyetarni virtualni mashini Java sho pidtrimuyut Jazelle vikonuyut kod Java aparatno i lishe dlya deyakih skladnih chi ridko vikoristovuvanih instrukcij programno Zgidno z vimogoyu ARM priblizno 95 bajt kodu tipovogo programnogo zabezpechennya vikonuvalisya aparatno dzherelo Persha arhitektura z pidtrimkoyu Jazelle ARMv5TEJ a pershij dizajn procesora z ciyeyu tehnologiyeyu ARM926EJ S Nayavnist Jazelle poznachayetsya literoyu J u nazvi arhitekturi chi procesora Opublikuvani specifikaciyi ye dosit nepovnimi oskilki dostatni lishe dlya napisannya kodu operacijnoyi sistemi yaka mozhe pidtrimuvati JVM vikoristovuyuchi Jazelle Progoloshena meta polyagaye v tomu sho tilki JVM povinno abo mozhe zalezhati vid detalej aparatnogo interfejsu Cej tisnij zv yazok mizh JVM i aparatnoyu skladovoyu spriyaye yih vzayemnomu rozvitku bez shkodi dlya inshih program Po suti ce nadaye ARM Ltd znachnij kontrol nad tim yaki same Java mashinami zdatni vikoristovuvati Jazelle Odne z ochevidnih zastosuvan Jazelle priskorennya vikonannya program dlya platformi Java ME Tehnologiya sho z yavilasya u arhitekturi ARMv7 mozhe vvazhatisya nominalnim nashadkom Jazelle RealizaciyaRozshirennya Jazelle pracyuye yak i realizovane yak dodatkova stadiya mizh vibirkoyu i dekoduvannyam instrukciyi centralnogo procesora Rozpiznani bajt kodi peretvoryuyutsya v poslidovnosti z odniyeyi abo bilshe instrukcij ARM Rezhim Jazelle vikonuye aparatno najbilsh poshireni prosti instrukciyi JVM z metoyu suttyevo zbilshiti shvidkist interpretaciyi Sered inshogo ce zmenshuye neobhidnist v kompilyuvanni na lotu just in time ta inshih JVM tehnologij priskorennya JVM instrukciyi yaki ne realizovani na aparatnomu rivni Jazelle prizvodyat do vikliku vidpovidnih pidprogram u JVM Detalna informaciya ne publikuyetsya Perehid do rezhimu Jazelle zdijsnyuyetsya instrukciyeyu BXJ Arhitektura sistemi komandNabir komand Jazelle dokumentovano yak bajt kod Java Razom z tim kompaniyeyu ARM ne bulo opublikovano podrobic z vikonannya cih komand Napriklad u dokumentaciyi sho nadayetsya z virtualnoyu mashinoyu HotSpot vkazano Dlya togo shob uniknuti neporozumin zayavlyayemo distribuciya program yaki mistyat kod instrukciyi BXJ i dozvolyayut vikoristovuvati rezhim Jazelle bez yavnogo dozvolu kompaniyi ARM zaboronena Spivrobitniki ARM v minulomu opublikuvali dekilka bilih dokumentiv angl white papers sho mali pokazati deyaki aspekti rozshiren procesora Dovidnik z arhitekturi ARM versiyi 2008 roku mistiv psevdokod instrukciyi BXJ angl Branch and eXchange to Java ale bez vkazannya podrobic Dvijkovij programnij interfejs ABI Dvijkovij programnij interfejs ABI Jazelle neobhidnij dlya korektnoyi vzayemodiyi z JVM ne opublikovanij ARM v rezultati chogo Jazelle ye nezadokumentovanoyu funkciyeyu dlya bilshosti koristuvachiv i vidkritih realizacij JVM Stan virtualnoyi mashini Jazelle znahoditsya v mezhah zvichajnih registriv ARM sho zabezpechuye sumisnist z isnuyuchimi operacijnimi sistemami i obrobnikami pererivan i vinyatkiv Perezapusk bajt kodu napriklad pislya povernennya z pererivannya povtorno vikonuye vsyu poslidovnist vidpovidnih instrukcij ARM Najvazhlivishi skladovi stanu JVM zberigayutsya u specialnih registrah registri r0 r3 sluguyut yak alias vershini steku Java registr r4 mistit lokalnij operand nomer 0 priznachenij dlya this a r6 vkazuye na verhivku steku Java Jazelle vikoristovuye toj samij registr adresi instrukciyi sho i reshta rezhimiv ARM r15 Registr r14 vkazuye na nastupnij bajt kod v r14 tomu lichilnik komand u Jazelle rezhimi yak pravilo ne pomitnij dlya koristuvacha yaksho tilki ne vidbuvayetsya znevadzhennya Indikaciya rezhimu u registri CPSR Rezhim vikonannya bajt kodu Java poznachayetsya poyednannyam dvoh bitiv u registri ARM CPSR angl Current Program Status Register registr potochnogo statusu programi Bit T maye buti ochishenij a bit J vstanovlenij Bajt kod dekoduyetsya aparatno v dva etapi u porivnyanni z odnim dlya Thumb ta ARM kodu Peremikannya mizh aparatnim ta programnim dekoduvannyam rezhim Jazelle i rezhim ARM zajmaye priblizno 4 takti procesora Dlya vhodu u rezhim Jazelle bit JE angl Jazelle Enable u registri spivprocesora CP14 c0 c2 bit 0 povinen buti vstanovlenim Yaksho operacijna sistema ochishuye cej bit ce unemozhlivlyuye vikonannya programi koristuvacha z priskorennyam Jazelle Krim cogo bit 1 CV angl Configuration Valid registru CP14 c0 c1 maye buti vstanovlenij shob pokazati sho vstanovlena konzistentnist rezhimu Jazelle dlya vikoristannya procesorom Instrukciya BXJ Instrukciya BXJ angl Branch and eXchange to Java zdijsnyuye perehid na vkazanu adresu i odnochasno yaksho ce mozhlivo vstanovlyuye stan Jazelle bit J u registri CPSR Yaksho vhid u rezhim Jazelle nemozhlivij instrukciya diye analogichno do BX Yedine misce de operacijna sistema abo znevadzhuvach povinni znati pro rezhim Jazelle ce dekoduvannya instrukcij sho viklikayut vinyatkovi situaciyi Pered vikonannyam komandi BXJ do registru R14 Link Register povinna buti zapisana adresa nastupnoyi instrukciyi u rezhimi Java nezalezhno vid togo vikoristovuyetsya aparatne priskorennya Java chi ni Cherez te sho potochnij stan procesora zberigayetsya u CPSR nabir komand Java avtomatichno aktivuyetsya pislya peremikannya zadachi i vikonannya Java prodovzhuyetsya z korektnoyi adresi Pislya perehodu v rezhim Jazelle bajt kod mozhe opracovuvatisya po odnomu z troh shlyahiv dekoduvannya i vikonannya na aparatnomu rivni programne vikonannya z optimizovanim dlya ARM ThumbEE kodom JVM abo nekorektnij kod operaciyi Tretij vipadok sprichinyaye vinyatkovu situaciyu rezhim ARM napriklad tak vidbuvayetsya u vipadku Java bajt kodu 0xFF sho vikoristovuyetsya dlya vstanovlennya tochki zupinki JVM breakpoint Vikonannya prodovzhuyetsya na aparatnomu rivni do tih pir poki ne trapitsya nepidtrimuvanij bajt kod abo ne vinikne neshtatna situaciya Z 203 kodiv zaznachenih u specifikaciyi JVM aparatno dekoduyutsya i vikonuyutsya priblizno 134 149 instrukcij Nizkorivnevi registri Nizkorivnevi registri konfiguraciyi aparatnoyi virtualnoyi mashini znahodyatsya v ARM spivprocesori CP14 registr c0 Registri dozvolyayut viyavlyati vmikati abo vimikati aparatnij priskoryuvach yaksho vin prisutnij Jazelle Identity Register CP14 c0 c0 dostupnij tilki dlya chitannya u vsih rezhimah Jazelle OS Control Register CP14 c0 c1 dostupnij lishe u rezhimi yadra pri zvernenni z rezhima koristuvacha nastaye vinyatkova situaciya Jazelle Main Configuration Register CP14 c0 S2 dostupnij lishe dlya zapisu v rezhimi koristuvacha ta chitannya zapisu v rezhimi yadra Emulyator QEMU pidtrimuye trivialnu realizaciyu Jazelle instrukciya BXJ pracyuye tak samo yak i zvichajna BX a vsi registri CP14 c0 povertayut pri chitanni nul Dzherela Arhiv originalu za 27 travnya 2005 Procitovano 22 bereznya 2018 ARM Arhiv originalu za 27 veresnya 2007 Procitovano 22 bereznya 2018 CPM Design Online Vikoristannya rozshiren ARM DBX dlya priskorennya vikonannya Java pri obmezhenih resursah vbudovanih zastosunkiv 21 grudnya 2008 u Wayback Machine Sun Hotspot Zaklyuchni Notatki CLDC HotSpotTM Realizaciyi V 2 0 2 chervnya 2008 u Wayback Machine Accelerating to meet the challenge of embedded Java 9 sichnya 2009 u Wayback Machine ARM Whitepaper 02 ARM Architecture ppt Introduction to ARM architecture angl Intel Catalin Marinas ARM RFC PATCH Add ARM Jazelle state info in show regs tombstone angl ARM Whitepaper Visoka produktivnist Java na vbudovanih pristroyah ARM dovidkovij posibnik yaponskoyu ARM Tehnichnij dovidnik ARM1026EJ S 23 bereznya 2018 u Wayback Machine Dovidnikovij posibnik ARM Rezhim zberezhennya energiyi procesoriv ARM11 23 bereznya 2018 u Wayback Machine Arhiv originalu za 23 bereznya 2018 Procitovano 28 kvitnya 2022