İkili çeviri - Binary translation

Olarak işlem , ikili için bir tür ikili recompilation sekansları talimatları bir çevrilen kaynak komut seti için hedef talimat seti. Komut seti simülasyonu gibi bazı durumlarda , hedef komut seti, komut izleme, koşullu kesme noktaları ve sıcak nokta algılama gibi test etme ve hata giderme özellikleri sağlayan kaynak komut setiyle aynı olabilir .

İki ana tür statik ve dinamik ikili çeviridir. Çeviri, donanımda (örneğin, bir CPU'daki devrelerle ) veya yazılımda (örneğin, çalışma zamanı motorları, statik yeniden derleyici, emülatörler) yapılabilir.

Motivasyon

İkili çeviri, bir hedef platform için bir ikilinin olmaması, hedef platform için derlenecek kaynak kodunun olmaması veya başka bir şekilde hedef platform için kaynağı derlemedeki zorluklarla motive edilir.

Statik olarak yeniden derlenen ikili dosyalar, öykünme ek yükü kaldırıldıkça, ilgili öykünülmüş ikili dosyalardan potansiyel olarak daha hızlı çalışır. Bu, genel olarak yorumlanan ve derlenmiş programlar arasındaki performans farkına benzer.

Statik ikili çeviri

Statik ikili çeviriyi kullanan bir çevirmen , dinamik ikili çeviride yapıldığı gibi, çalıştırılabilir bir dosyanın tüm kodunu, önce kodu çalıştırmak zorunda kalmadan hedef mimaride çalışan koda dönüştürmeyi amaçlar . Kodun tamamı çevirmen tarafından keşfedilemediği için bunu doğru yapmak çok zordur. Örneğin, yürütülebilir dosyanın bazı kısımlarına yalnızca , değeri yalnızca çalışma zamanında bilinen dolaylı dallar aracılığıyla erişilebilir .

Böyle bir statik ikili çevirmen , önemli ölçüde düşük geliştirme maliyetleri ve hedef ikilinin yüksek performansıyla, muhtemelen birçok kaynak ve hedef çift arasında verimli çeviri gerçekleştirmek için evrensel süperoptimizer gözetleme deliği teknolojisini ( Sorav Bansal ve Stanford Üniversitesi'nden Alex Aiken tarafından geliştirilmiştir ) kullanır. PowerPC'den x86'ya çeviri deneylerinde, bazı ikili dosyalar yerel sürümlerden bile daha iyi performans gösterdi, ancak ortalama olarak yerel hızın üçte ikisinde çalıştılar.

Statik ikili çevirilere örnekler

Honeywell , Honeywell 200 serisi bilgisayarları için Liberator adlı bir program sağladı ; onun için programlar çevirmek olabilir IBM 1400 serisi Honeywell 200 serisi için programlara bilgisayarların.

2014 yılında , 1998 video oyunu StarCraft'ın bir ARM mimari versiyonu , orijinal x86 versiyonunun statik yeniden derlenmesi ve ek tersine mühendisliği ile oluşturuldu . Pandora el topluluk kendi başlarına gerekli araçları geliştirmek ve başarıyla birkaç kez bu tercümeleri elde etme yeteneğine oldu.

Örneğin, başarılı bir x86-to- x64 statik recompilation için oluşturulan usul arazi jeneratör video oyunu arasında Küp Dünyası 2014 yılında.

Diğer bir örnek, 2013 yılında LLVM kullanımı altında oluşturulan Super Mario Bros video oyununun NES- to- x86 statik olarak yeniden derlenmiş sürümüdür .

2004'te Nintendo'dan Scott Elliott ve Phillip R. Hutchinson, Game Boy ikili programından "C" kodu oluşturmak için bir araç geliştirdi; bu, daha sonra yeni bir platform için derlenebilir ve havayolu eğlence sistemlerinde kullanılmak üzere bir donanım kitaplığına bağlanabilir.

1995'te Bell Communications Research'ten Norman Ramsey ve Bilgisayar Bilimleri Bölümünden Mary F. Fernandez, Princeton Üniversitesi statik montaj çevirisi için temel araçları içeren New Jersey Makine Kodu Araç Kitini geliştirdi .

Dinamik ikili çeviri

Dinamik ikili çeviri (DBT) kısa bir kod dizisine (tipik olarak tek bir temel blok sırasına göre) bakar, ardından onu çevirir ve ortaya çıkan diziyi önbelleğe alır. Kod sadece keşfedilir olarak tercüme ve mümkün olduğunda ve şube talimatları zaten tercüme ve kaydedilen kod (noktaya yapılan edilir memoization ).

Dinamik ikili çeviri, basit öykünmeden farklıdır (öykünücünün ana okuma-kod çözme-yürütme döngüsünü ortadan kaldırır - büyük bir performans darboğazı), bunun için çeviri sırasında büyük ek yükler sağlar. Bu ek yük, çevrilmiş kod dizileri birden çok kez yürütüldükçe umarız amorti edilir.

Daha gelişmiş dinamik çevirmenler , çevrilen kodun hangi bölümlerin çok sayıda çalıştırıldığını bulmak için kullanıldığı dinamik yeniden derlemeyi kullanır ve bu bölümler agresif bir şekilde optimize edilir . Bu teknik bir anımsatır JIT derleyicisi ve aslında böyle derleyiciler (örneğin Güneş 'in HotSpot teknolojisi) sanal bir talimat seti (dinamik çevirmen olarak görülebilir baytkodu gerçek birine).

Yazılımda dinamik ikili çevirilere örnekler

  • Apple Computer , PowerPC serisi Macintosh'larında M68K kodu için dinamik bir çeviri öykünücüsü uyguladı ve bu çok yüksek düzeyde güvenilirlik, performans ve uyumluluk elde etti (bkz. Mac 68K öykünücüsü ). Bu, Apple'ın makineleri yalnızca kısmen yerel bir işletim sistemiyle pazara sunmasına olanak tanıdı ve son kullanıcılar, yazılım yatırımlarını riske atmadan yeni, daha hızlı mimariyi benimseyebilirlerdi. Kısmen öykünücü çok başarılı olduğu için, işletim sisteminin birçok bölümü öykünülmüş olarak kaldı. 2001'de Mac OS X (10.0) piyasaya sürülene kadar PowerPC yerel işletim sistemine (OS) tam geçiş yapılmadı . (Mac OS X " Classic " çalışma zamanı ortamı, Mac OS'ye kadar PowerPC Mac'lerde bu emülasyon özelliğini sunmaya devam etti. X 10.5 .)
  • Intel tabanlı Mac'ler için Mac OS X 10.4.4 , Apple'ın PPC tabanlı donanımdan x86'ya geçişini kolaylaştırmak için Rosetta dinamik çeviri katmanını tanıttı . Apple için Transitive Corporation tarafından geliştirilen Rosetta yazılımı, Transitive'in QuickTransit çözümünün bir uygulamasıdır .
  • QuickTransit, ürün ömrü boyunca SPARCx86 , x86 → PowerPC ve MIPSItanium 2 çeviri desteği de sağladı .
  • DEC , kullanıcıların CISC VAX mimarisinden Alpha RISC mimarisine geçmesine yardımcı olan çeviri araçlarıyla benzer bir başarı elde etti .
  • HP ARIES (Otomatik Yeniden Çeviri ve Tümleşik Ortam Simülasyonu), HPE Integrity Sunucular için HP-UX 11i'de HP 9000 HP-UX uygulamalarını şeffaf ve doğru bir şekilde yürütmek için hızlı kod yorumunu iki aşamalı dinamik çeviriyle birleştiren bir yazılım dinamik ikili çeviri sistemidir . ARIES hızlı yorumlayıcı, ayrıcalıklı olmayan PA-RISC talimatlarının eksiksiz bir setini kullanıcı müdahalesi olmadan taklit eder. Yorumlama sırasında, uygulamanın yürütme modelini izler ve yalnızca sık çalıştırılan kodu çalışma zamanında yerel Itanium koduna çevirir . ARIES, birinci aşamada çevrilen kodun, ikinci aşama çevirisi sırasında çevrilen kodu daha da optimize etmek için kullanılan çalışma zamanı profil bilgilerini topladığı bir teknik olan iki aşamalı dinamik çeviri uygular. ARIES, dinamik olarak çevrilmiş kodu, kod önbelleği adı verilen bellek arabelleğinde depolar. Çevrilen temel bloklara yapılan diğer referanslar, doğrudan kod önbelleğinde yürütülür ve ek yorum veya çeviri gerektirmez. Çevrilen kod bloklarının hedefleri, yürütmenin çoğu zaman kod önbelleğinde gerçekleşmesini sağlamak için geriye yamalanır. Öykünmenin sonunda, ARIES, orijinal uygulamayı değiştirmeden tüm çevrilmiş kodu atar. ARIES emülasyon motoru ayrıca, bir HP 9000 HP-UX uygulamasının sistem çağrılarını, sinyal teslimini, istisna yönetimini, iş parçacığı yönetimini, hata ayıklama için HP GDB öykünmesini ve uygulama için çekirdek dosya oluşturmayı öykünen Ortam Öykünmesini de uygular .
  • DEC, x86 uygulamalarını Alpha uygulamalarına dönüştürmek için FX! 32 ikili çeviricisini yarattı .
  • Sun Microsystems ' Wabi yazılım SPARC talimatlarına x86 dinamik çevirisini dahil.
  • Ocak 2000'de Transmeta Corporation, Crusoe adlı yeni bir işlemci tasarımını duyurdu . Gönderen SSS kendi web sitesinde,

    Akıllı mikroişlemci , motoru olarak bir donanım VLIW çekirdeğinden ve Code Morphing yazılımı olarak adlandırılan bir yazılım katmanından oluşur. Code Morphing yazılımı, x86 talimatlarını yerel Crusoe yönergelerine dönüştüren veya çeviren bir kabuk […] görevi görür . Ek olarak, Code Morphing yazılımı dinamik bir derleyici ve kod iyileştirici içerir […] Sonuç, en az güç miktarında artırılmış performanstır. […] [Bu], Transmeta'nın VLIW donanımını ve Code Morphing yazılımını, geniş yazılım uygulamaları tabanını etkilemeden ayrı ayrı geliştirmesine olanak tanır.

  • Intel Corporation bir IA-32 Yürütme Katmanı geliştirdi ve uyguladı - Itanium tabanlı sistemlerde IA-32 uygulamalarını desteklemek için tasarlanmış , Microsoft Windows Server for Itanium mimarisinin yanı sıra Linux'un çeşitli sürümlerinde de bulunuyor. Red Hat ve Suse . IA-32 uygulamalarının Itanium işlemcilerde yerel IA-32 modunu kullanacaklarından daha hızlı çalışmasını sağladı.
  • Dolphin ( GameCube / Wii için bir emülatör ), PowerPC kodunu x86 ve AArch64'e JIT yeniden derlemesini gerçekleştirir.

Donanımda dinamik ikili çevirilere örnekler

  • Pentium Pro, karmaşık CISC x86 talimatlarını daha RISC benzeri dahili mikro işlemlere çevirdiğinden , x86 Intel CPU'lar .
  • Nvidia Tegra K1 Denver , yavaş bir donanım kod çözücüsü üzerinden ARM talimatlarını kendi mikrokod talimatlarına çevirir ve sıcak kod için bir yazılım ikili çevirici kullanır.

Ayrıca bakınız

Referanslar

daha fazla okuma