2012-10-12 18 views
9

Bugün some slides about Andoird basics okuyordum ve ifade belirdi:Kayıt tabanlı bir VM ile yığın tabanlı bir sistem arasındaki temel farklar nelerdir?

Dalvik VM yerine tabanlı yığının dayalı kayıt olduğunu.

Yani, Kayıt temelli bir VM ile yığın tabanlı bir sistem arasındaki temel farklar nelerdir?


ikinci bağlantı blogpost yeterince benim sorum:

http://markfaction.wordpress.com/2012/07/15/stack-based-vs-register-based-virtual-machine-architecture-and-the-dalvik-vm/

Başka linki:

http://androidjayavelu.blogspot.co.at/2011/06/dalvik-virtual-machine-vs-java-virtual.html

+1

Java kaynağından Seviye, herhangi bir kavramsal fark yoktur.Kaynak-bazlı bayt kodlarının bir yığın cinsinden yazıldığı baytkodlarda (javacın ürettiği) farklılık, kayıt tabanlı model için ise (sürpriz!) bayt kodları yazılır. –

+3

(JIT ile derlenmiş Java, "yığın tabanlı" bir mimaride bile, kayıt tabanlıdır.) –

+0

Bu bağlantı daha fazla açıklama almanıza yardımcı olacaktır http://markfaction.wordpress.com/2012/07/ 15/yığın tabanlı-vs-register-tabanlı-sanal-makine-mimarlık-ve-the-dalvik-vm/ – LeoMobDev

cevap

2

Bu makale de oldukça bilgilendirici: http://www.codeproject.com/Articles/461052/Stack-based-vs-Register-based-Virtual-Machine-Arch

Yığın Tabanlı Sanal Makineler Yığın tabanlı sanal makine, yukarıdaki sanal makinenin gereksinim duyduğu genel özellikleri uygular, ancak işlenenlerin depolandığı bellek yapısı yığın veri yapısıdır. İşlemler, veriyi yığından çıkartarak, işleyerek ve sonuçları LIFO (Sonunda İlk Çıkışı) moda geri iterek gerçekleştirilir.

stackAdd

POP 20 POP: yığın göre sanal makine, iki numara ilave edilmesi işlemi, genellikle (20, 7, ve 'sonuç' işlenen olan) şu şekilde gerçekleştirilecektir, 7 ADD 20, 7, sonuç PUSH sonucu PUSH ve POP işlemleri nedeniyle, bir ekleme işlemi gerçekleştirmek için dört komut satırı gereklidir. Yığın tabanlı modelin bir avantajı, işlenenlerin yığın işaretçisiyle örtük olarak ele alınmasıdır (yukarıdaki görüntüde SP). Bu, sanal makinenin işlenen adreslerini açıkça bilmesi gerekmediği anlamına gelir; yığın işaretçisinin bir sonraki işleneni (Pop) vermesi çağrılır. Yığın tabanlı VM'lerde, tüm aritmetik ve mantıksal işlemler, işlenenleri Pushing ve Popping ile gerçekleştirilir ve yığınla sonuçlanır. Sanal makinenin kayıt tabanlı uygulamada

Kayıt Tabanlı Sanal Makineler , işlenenler saklandığı veri yapısı CPU kayıtları dayanmaktadır. Burada PUSH veya POP işlemi yoktur, ancak komutların işlenenlerin adreslerini (kayıtlarını) içermesi gerekir. Yani, yönergeler için işlenenler, işlenene işaret edecek bir yığın işaretçisinin bulunduğu yığın tabanlı modelden farklı olarak, talimatta açıkça ele alınır. Örneğin, bir kayıt tabanlı sanal makine içinde gerçekleştirilebilir bir ek işlem olup, daha fazla veya daha az gibi olacaktır kullanıcı aşağıdaki gibidir:

registerAdd

Ekle, R1, R2, R3 olduğu; # R1 ve R2'nin içeriğini ekleyin, sonuçların sonucunu R3 olarak belirtin Daha önce de belirttiğim gibi, POP veya PUSH işlemleri yoktur, bu nedenle ekleme talimatı sadece bir satırdır. Ancak yığının aksine, işlenenlerin adreslerini açıkça R1, R2 ve R3 olarak belirtmeliyiz. Buradaki avantaj, bir istiften fırlatmanın ve bir yığından atmanın yükünün mevcut olmamasıdır ve bir kayıt temelli VM'deki talimatlar, komut gönderme döngüsü içinde daha hızlı yürütülür.

Kayıt tabanlı modelin bir başka avantajı, yığın tabanlı yaklaşımda yapılamayacak bazı optimizasyonlara izin vermesidir. Böyle bir örnek, kodda ortak alt ifadeler olduğunda, kayıt modeli bir kez hesaplayabilir ve alt ifadenin yeniden ortaya çıkması durumunda gelecekteki kullanım için bir kayıtta saklayabilir, bu da ifadeyi yeniden hesaplamanın maliyetini azaltır.

Kayıt tabanlı bir modelle ilgili sorun, ortalama kayıt talimatının, işlenen adreslerini açıkça belirtmemiz gerektiği için ortalama yığın komutundan daha büyük olmasıdır. Bir istif makinesi için talimatlar istif göstergesinden dolayı kısa olsa da, ilgili yazma makinesi talimatlarının işlenecek yerlerin yer alması ve yığın koduna kıyasla daha büyük bir kayıt kodu ile sonuçlanması gerekir. Karşılaştığımız harika bir blog makalesi (Bu bağlantıda), kayıt tabanlı bir sanal makinenin açıklayıcı ve basit bir C uygulamasını içermektedir. Sanal makineleri ve tercümanları uygulamak sizin ana çıkarınızsa, 'Dil Uygulama Kalıpları: Kendi alanınıza özgü ve genel programlama dillerinizi yaratın' başlıklı ANTLR yaratıcısı Terrence Parr'ın kitabı çok kullanışlı olabilir. "

+0

Eğer bu bir cevapsa, lütfen ilgili kodu buraya yapıştırın; bağlantılar değişebilir ve bu cevap artık geçerli olmayacaktır. – rfornal

İlgili konular