Jazel - Jazelle

Jazelle DBX (doğrudan baytkodu yürütme) bazı sağlayan bir uzantısıdır ARM işlemciler çalıştırmak için Java bytecode içinde donanım mevcut ARM ve yanında üçüncü bir yürütme devlet olarak Başparmak modları. Jazelle işlevselliği ARMv5TEJ mimarisinde belirtilmiş ve Jazelle teknolojisine sahip ilk işlemci ARM926EJ-S olmuştur . Jazelle, mimari uygunluk için gerekli olduğu (yalnızca önemsiz biçimde de olsa) v5 sonrası çekirdekler dışında, CPU adına eklenen bir "J" ile gösterilir.

Jazelle RCT (Çalışma Zamanı Derleme Hedefi) farklı bir teknolojidir ve ThumbEE modunu temel alır ve Java ve diğer yürütme ortamlarıyla önceden (AOT) ve tam zamanında (JIT) derlemeyi destekler.

Jazelle DBX'in en belirgin kullanımı, cep telefonu üreticileri tarafından Java ME oyunlarının ve uygulamalarının yürütme hızını artırmaktır . Jazelle uyumlu bir Java sanal makinesi (JVM), daha karmaşık veya daha az kullanılan bayt kodu işlemleri için yazılıma dönerken Java bayt kodunu donanımda çalıştırmayı dener. ARM, tipik program kullanımındaki bayt kodunun yaklaşık %95'inin doğrudan donanımda işlendiğini iddia ediyor.

Yayınlanan özellikler çok eksiktir, yalnızca Jazelle kullanan bir JVM'yi destekleyebilen işletim sistemi kodu yazmak için yeterlidir. Bildirilen amaç, yalnızca JVM yazılımının donanım arabirimi ayrıntılarına bağlı olması (veya buna izin verilmesi) gerektiğidir. Bu sıkı bağlama, donanımın ve JVM'nin diğer yazılımları etkilemeden birlikte gelişebilmesini kolaylaştırır. Aslında bu, ARM Holdings'e hangi JVM'lerin Jazelle'den yararlanabileceği üzerinde önemli bir kontrol sağlıyor. Ayrıca açık kaynaklı JVM'lerin Jazelle kullanmasını da engeller. Bu sorunlar, Jazelle DBX'in nominal halefi olan ARMv7 ThumbEE ortamı için geçerli değildir.

uygulama

Jazelle uzantısı , işlemci komut hattındaki getirme ve kod çözme aşamaları arasında fazladan bir aşama olarak uygulanan düşük düzeyli ikili çeviri kullanır . Tanınan bayt kodları, bir veya daha fazla yerel ARM talimatından oluşan bir dizeye dönüştürülür.

Jazelle modu, en yaygın basit JVM talimatları için JVM yorumunu donanıma taşır. Bu, yorumlama maliyetini önemli ölçüde azaltmayı amaçlamaktadır. Bu, diğer şeylerin yanı sıra, Tam zamanında derleme ve diğer JVM hızlandırma tekniklerine olan ihtiyacı azaltır . Jazelle donanımında uygulanmayan JVM talimatları, Jazelle uyumlu JVM uygulamasında uygun rutinlerin çağrılmasına neden olur. Doğru yorumlanırsa tüm JVM iç kısımları şeffaf olduğundan (performans hariç) ayrıntılar yayınlanmaz.

Jazelle moduna BXJ komutları ile girilir. Jazelle'in bir donanım uygulaması, yalnızca JVM bayt kodlarının bir alt kümesini kapsayacaktır. İşlenmeyen bayt kodları için veya işletim sistemi tarafından geçersiz kılındıysa, donanım JVM yazılımını çağırır. Sistem, JVM yazılımının donanımda hangi bayt kodlarının uygulandığını bilmesine gerek kalmayacak şekilde tasarlanmıştır ve tam bayt kodları kümesi için JVM yazılımı tarafından bir yazılım geri dönüşü sağlanır.

Komut seti

Jazelle komut seti , Java bayt kodu olarak iyi bir şekilde belgelenmiştir . Ancak, ARM tam yürütme ortamı ayrıntılarıyla ilgili ayrıntıları açıklamadı; Sun'ın HotSpot Java Sanal Makinesi ile sağlanan belgeler şu kadar ileri gider: "Şüpheye mahal vermemek için, BXJ talimatını uygulamak ve ARM Jazelle mimari uzantısının [..] sözleşmesi olmadan kullanılmasını sağlamak için yazılım kodu içeren ürünlerin dağıtımı. ARM'den kesinlikle yasaktır."

ARM çalışanları geçmişte işlemci uzantısı hakkında bazı iyi ipuçları veren birkaç teknik inceleme yayınladı . ARM Mimarisi referans Kılavuzunun 2008'den itibaren mevcut sürümleri , "BXJ" (Branch ve eXchange to Java) talimatı için sözde kodu içermiştir, ancak daha ince ayrıntılar "ALT-MİMARİ TANIMLI" olarak gösterilmiş ve başka bir yerde belgelenmiştir.

Uygulama ikili arabirimi (ABI)

Jazelle durumu , JVM ile Jazelle donanım durumu arasında üzerinde anlaşmaya varılmış bir çağrı kuralına dayanır . Bu uygulama ikili arabirimi ARM tarafından yayınlanmadığından, Jazelle'i çoğu kullanıcı ve Özgür Yazılım JVM'leri için belgelenmemiş bir özellik haline getirir .

Tüm VM durumu, normal ARM kayıtları içinde tutulur ve mevcut işletim sistemleriyle uyumluluğa ve değiştirilmemiş kesme işleyicilerine izin verir. Bir bayt kodunu yeniden başlatmak (örneğin bir kesintiden dönüşü takip etmek gibi), ilgili ARM talimatlarının tam sırasını yeniden çalıştıracaktır.

JVM durumunun en önemli kısımlarını tutmak için belirli kayıtlar atanmıştır: R0–R3 kayıtları, Java yığınının tepesinin bir diğer adını tutar, R4, Java yerel işlenenini sıfır (işaretçi *this) tutar ve R6, Java yığın işaretçisini içerir.

Jazelle, mevcut program sayacı PC'sini veya onun eşanlamlı kaydı R15'i yeniden kullanır . Bir sonraki bayt koduna yönelik bir işaretçi R14'e girer, bu nedenle PC'nin kullanımı hata ayıklama dışında genellikle kullanıcı tarafından görülmez.

CPSR: Mod göstergesi

Java bayt kodu, ARM CPSR'de (Mevcut Program Durum Kaydı) iki bitin bir kombinasyonu tarafından ayarlanan mevcut talimat olarak belirtilir. "T" biti temizlenmeli ve "J" biti ayarlanmalıdır.

Bayt kodları, donanım tarafından iki aşamada çözülür (Thumb ve ARM kodu için tek bir aşamaya karşı) ve donanım ve yazılım kod çözme (Jazelle modu ve ARM modu) arasında geçiş yapmak ~ 4 saat döngüsü sürer.

Jazelle donanım durumuna girişin başarılı olması için, CP14:C0(C2)[bit 0] kaydındaki JE (Jazelle Enable) biti ayarlanmalıdır; JE bitinin [ayrıcalıklı] bir işletim sistemi tarafından temizlenmesi, uygulama programlarının Jazelle donanım hızlandırmasını kullanmasını önlemek için üst düzey bir geçersiz kılma sağlar. Ek olarak, CP14:c0(c1)[bit 1] içinde bulunan CV (Yapılandırma Geçerli) biti, donanımın kullanması için tutarlı bir Jazelle durumu kurulumu olduğunu gösterecek şekilde ayarlanmalıdır.

BXJ: Daldan Java'ya

BXJ komutu Jazelle durumuna geçmeyi dener ve izin verilir ve başarılı olursa CPSR'de "J" bitini ayarlar; aksi takdirde, "düşer" ve standart bir BX ( Branch ) komutu gibi davranır . Bir işletim sisteminin veya hata ayıklayıcının Jazelle modunun tam olarak farkında olması gereken tek zaman, hatalı veya sıkışmış bir talimatın kodunun çözülmesidir. Bir sonraki talimatları gösteren Java program sayacı (PC), donanım veya yazılım işlemesinden bağımsız olarak, BXJ şube talebini yürütmeden önce Bağlantı Kaydı'na (R14) yerleştirilmelidir, sistem kod çözmeye nereden başlayacağını bilmelidir.

Geçerli durum CPSR'de tutulduğundan, görev değiştirme ve geçerli Java bayt kodunun işlenmesi yeniden başlatıldıktan sonra bayt kodu komut seti otomatik olarak yeniden seçilir.

Jazelle durum moduna girdikten sonra, bayt kodları üç yoldan biriyle işlenebilir: kodu çözülür ve donanımda yerel olarak yürütülür, yazılımda işlenir (optimize edilmiş ARM/ThumbEE JVM koduyla) veya geçersiz/geçersiz işlem kodu olarak değerlendirilir. Üçüncü durum, JVM kesme noktalarını ayarlamak için kullanılan 0xff Java bayt kodu gibi bir dalın ARM istisna moduna girmesine neden olur.

İşlenmeyen bir bayt koduyla karşılaşılıncaya veya bir özel durum oluşana kadar donanımda yürütme devam eder. 134 ila 149 bayt kodu (JVM belirtiminde belirtilen 203 bayt kodundan) doğrudan donanımda çevrilir ve yürütülür.

Düşük seviyeli kayıtlar

Donanım sanal makinesi için düşük seviyeli yapılandırma kayıtları, ARM Yardımcı işlemcisi "CP14 kaydı c0"da tutulur. Kayıtlar, donanım hızlandırıcının (varsa) algılanmasına, etkinleştirilmesine veya devre dışı bırakılmasına izin verir.

  • CP14:C0(C0) kaydındaki Jazelle Kimlik Kaydı'na tüm modlarda salt okunur olarak erişilebilir.
  • CP14:c0(c1)'deki Jazelle OS Kontrol Kaydı'na yalnızca çekirdek modunda erişilebilir ve kullanıcı modunda erişildiğinde bir istisnaya neden olur.
  • CP14:C0(C2)'deki Jazelle Ana Yapılandırma Kaydı, kullanıcı modunda salt yazılır ve çekirdek modunda okunur-yazılır.

Jazelle'in "önemsiz" bir donanım uygulaması ( QEMU öykünücüsünde bulunduğu gibi) yalnızca BXJ işlem kodunun kendisini desteklemek (BXJ'yi normal bir BX talimatı olarak ele almak) ve tüm CP14 için RAZ'ı (Sıfır Olarak Oku) döndürmek için gereklidir. :c0 Jazelle ile ilgili kayıtlar.

Halef: ThumbEE

ARMv7 mimarisi, JVM bayt kodlarının Jazelle ve Direct Bytecode Execution'ın önemini azaltmıştır . Uygulama açısından, Jazelle için artık yalnızca önemsiz donanım desteği gereklidir: Jazelle moduna girme ve çıkma desteği, ancak herhangi bir Java bayt kodunu yürütmek için destek değil.

Bunun yerine, Thumb Execution Environment ( ThumbEE ) tercih edilecekti, ancak o zamandan beri de kullanımdan kaldırıldı. ARMv7-A işlemcilerde (Cortex-A8 ve Cortex-A9 gibi) ThumbEE desteği zorunluydu ve ARMv7-R işlemcilerde isteğe bağlıydı. ThumbEE, belki de JIT teknolojilerini kullanarak derlenmiş ortamları hedef aldı . Java'ya özel değildi ve tamamen belgelendi; Jazelle'in başarabileceğinden çok daha geniş bir benimseme bekleniyordu.

ThumbEE, Thumb2 16/32-bit komut setinin bir çeşidiydi. Boş işaretçi kontrolünü entegre etti; bazı yeni arıza mekanizmaları tanımladı; ve 16-bit LDM ve STM işlem kodu alanını, menzil kontrolü, yeni bir işleyici çağırma şeması ve daha fazlası gibi birkaç talimatı desteklemek için yeniden tasarladı. Buna göre, Thumb veya Thumb2 kodu üreten derleyiciler, ThumbEE tabanlı çalışma zamanı ortamlarıyla çalışacak şekilde değiştirilebilir.

Referanslar