Çalışma Zamanı Sistemleri ve Sanal Makineler
Çalışma zamanı sistemleri ve sanal makineler, programlar için yürütme ortamı sağlamakta, ara kodu yorumlamakta veya derlemekte ve çalışan bir programın ihtiyaç duyduğu hizmetleri yönetmektedir.
Tanım
Bir çalışma zamanı sistemi, bir programın kendi kodunun ötesinde yürütülmesini destekleyen yazılım ortamıdır ve bir sanal makine, taşınabilirlik ve çalışma zamanı hizmetleri sağlayan, taşınabilir bir talimat setini yorumlayan veya derleyen soyut bir yürütme motorudur.
Kapsam
Bu konu, derlenmiş kod ile donanım arasındaki katmanı kapsamaktadır: bayt kodu yorumlayıcıları ve soyut makineler, anında (JIT) derleme, dinamik dağıtım ve metot arama, çağırma kuralları ve yığın yönetimi ile istisna işleme ve yansıma gibi çalışma zamanı hizmetleri. Taşınabilir sanal makinelerin tasarımını ve yönetilen dilleri verimli kılan teknikleri ele almaktadır.
Temel sorular
- Sanal makineler donanımlar arasında taşınabilirliği nasıl sağlamaktadır?
- Anında derleme (just-in-time compilation) yorumlamayı ve yerel kodu nasıl birleştirmektedir?
- Dinamik dağıtım ve metot arama nasıl verimli hale getirilmektedir?
- Yönetilen bir dili hangi çalışma zamanı hizmetleri desteklemelidir?
Temel kuramlar
- Taşınabilir sanal makine mimarisi
- Java Sanal Makinesi (Java Virtual Machine) spesifikasyonu, taşınabilir, doğrulanabilir bir bayt kodu ve yürütme modeli tanımlamakta, bir sanal makinenin bir dili belirli bir donanımdan nasıl ayırdığını göstermektedir.
- Anında derleme (Just-in-time compilation)
- Aycock, çalışma zamanlarının yürütme sırasında kodu yerel forma derlediği teknikleri incelemekte, yorumlama başlangıcını, çalışma zamanı bilgileri kullanılarak derlenmiş kodun verimiyle dengelemektedir.
- Dinamik dağıtım için satır içi önbellekleme (inline caching)
- Deutsch ve Schiffman'ın Smalltalk uygulaması, dinamik olarak dağıtılan dillerde metot aramasını hızlı hale getirmek için anahtar teknikler olan satır içi önbelleklemeyi (inline caching) ve dinamik çeviriyi tanıtmıştır.
Klinik önem
Sanal makineler ve yönetilen çalışma zamanları, Java, .NET, JavaScript ve Python için yaygın olarak kullanılan platformlara güç vermekte, taşınabilirlik, güvenlik ve adaptif optimizasyon sağlamaktadır. JIT derlemesi ve satır içi önbellekleme (inline caching), üst düzey, dinamik dillerin rekabetçi performans elde etmesinin nedenleridir.
Tarihçe
Soyut makineler, ilk taşınabilir sistemlere ve 1984'teki uygulaması dinamik çeviri ve satır içi önbelleklerin (inline caches) öncülüğünü yapan Smalltalk'a dayanmaktadır. Java Sanal Makinesi (Java Virtual Machine), 1990'ların ortalarında taşınabilir bayt kodunu yaygınlaştırmış ve HotSpot gibi adaptif JIT derleyicileri ile daha sonraki JavaScript motorları, agresif çalışma zamanı optimizasyonunu ana akım yönetilen dillere taşımıştır.
Tartışmalar
- Yorumlama ve anında derleme (just-in-time compilation) karşılaştırması
- Çalışma zamanı tasarımcıları, hızlı başlangıç ve düşük bellek kullanımına sahip basit yorumlayıcıları, ısınma süresi ve uygulama karmaşıklığı pahasına daha yüksek tepe performansı elde eden JIT derleyicileriyle karşılaştırmakta, genellikle ikisini katmanlı sistemlerde birleştirmektedir.
Öne çıkan isimler
- Peter Deutsch
- John Aycock
- James Gosling
- Gilad Bracha
İlgili konular
Temel eserler
- lindholm2014
- aycock2003
- deutsch1984
Sıkça sorulan sorular
- Bu bağlamda sanal makine nedir?
- Burada bir sanal makine, temel donanımı soyutlayan ve tüm bir bilgisayarı taklit etmek yerine çalışma zamanı hizmetleri sağlayan, taşınabilir bir talimat setini (bayt kodu gibi) çalıştıran bir yazılım yürütme motorudur.
- Anında derleme (just-in-time compilation) performansa nasıl yardımcı olmaktadır?
- Bir JIT derleyicisi, bir programın sıkça yürütülen kısımlarını çalışma zamanında yerel koda çevirmekte, önceden derleyen bir derleyicinin sahip olmadığı profil oluşturma bilgilerini kullanmakta, böylece 'sıcak kod' (hot code) neredeyse yerel hızda çalışmaktadır.