Soyut makine -Abstract machine

Soyut bir makine , bir bilgisayar sisteminin nasıl çalıştığının ayrıntılı ve kesin bir analizine izin veren bir bilgisayar bilimi teorik modelidir. Girdileri alması ve önceden tanımlanmış kurallara dayalı olarak çıktılar üretmesi açısından matematiksel bir işleve benzer . Soyut makineler, doğru ve donanımdan bağımsız olarak performans göstermeleri beklendiği için gerçek makinelerden farklıdır . Soyut makineler , programların adım adım yürütülmesine izin verdikleri için “ makinelerdir ” ; " soyutturlar " çünkü gerçek ( donanımın ) birçok yönünü göz ardı ederler.) makineler. Tipik bir soyut makine, girdi, çıktı ve birincisini ikincisine dönüştürmek için kullanılan izin verilen işlemler kümesi açısından bir tanımdan oluşur. Gerçek dünyadaki bilgisayar sistemleri için modellerin yanı sıra tamamen teorik nedenlerle kullanılabilirler. Hesaplama teorisinde , soyut makineler genellikle hesaplanabilirlikle ilgili düşünce deneylerinde veya algoritmaların karmaşıklığını analiz etmek için kullanılır . Soyut makinelerin bu kullanımı, sonlu durum makineleri , Mealy makineleri , aşağı açılan otomatlar ve Turing makineleri gibi hesaplama karmaşıklığı teorisi alanıyla bağlantılıdır .


sınıflandırma

Soyut makineler, herhangi bir zamanda yapmalarına izin verilen işlem sayısına bağlı olarak genellikle iki türe ayrılır: deterministik soyut makineler ve deterministik olmayan soyut makineler . Deterministik bir soyut makine, belirli bir başlangıç ​​durumu veya koşulunun her zaman aynı çıktıları verdiği bir sistemdir. Girdilerin çıktılara nasıl dönüştürüldüğü konusunda rastgelelik veya varyasyon yoktur. Bu arada, deterministik olmayan soyut bir makine, farklı uygulamalarda aynı girdi için çeşitli çıktılar sağlayabilir. Yineleme sayısına bakılmaksızın aynı girdi için aynı sonucu veren deterministik bir algoritmanın aksine, deterministik olmayan bir algoritma farklı çıktılara ulaşmak için çeşitli yollar izler. Deterministik olmayan algoritmalar, deterministik bir yaklaşım kullanarak kesin bir çözüm elde etmenin zor veya maliyetli olduğu durumlarda yaklaşık cevaplar elde etmek için yararlıdır.

Bir Turing makinesi çalışması .

Örneğin Turing makinesi , bilgisayar bilimindeki en temel soyut makinelerden biridir. Bu, herhangi bir uzunlukta bir bant (sembol dizisi) üzerinde işlem yapabilen bir makinedir . Hem sembolleri değiştirmek hem de temel aldığı sembolü değiştirmek için talimatlar içerir. İlkel bir Turing bilgisayarındaki tek komut "sembolü 1'e dönüştür sonra sağa hareket et" olacaktır ve bu makine yalnızca 1'lerden oluşan bir dizi üretecektir. Bu temel Turing makinesi deterministiktir, ancak aynı girdi verildiğinde birkaç eylemi yürütebilen deterministik olmayan Turing makineleri de inşa edilebilir.

Bir Soyut Makinenin Uygulanması

Fiziksel uygulama durumunda ( donanımda ) soyut bir makinenin herhangi bir uygulaması, bir programlama dilinin talimatlarını yürütmek için bir tür fiziksel cihaz (mekanik, elektronik, vb.) kullanır . Ancak soyut makine, soyut makine ile altta yatan fiziksel aygıt arasındaki seviyelerde yazılım veya aygıt yazılımında da uygulanabilir .

Programlama Dili Uygulaması

" Makine " terimi, makinenin "anlaması" için yeterince resmileştirilmiş algoritmaları yürüten fiziksel bir makine olan bir bilgi işlem makinesini ifade eder. Soyut bir makine, sezgisel olarak, fiziksel bir bilgisayar fikrinin soyutlanmasından başka bir şey değildir. Gerçek yürütme için, algoritmalar bir programlama dili tarafından sunulan yapılar kullanılarak uygun şekilde biçimlendirilmelidir . Bu, yürütülecek algoritmaların programlama dili komutları kullanılarak ifade edilmesi gerektiği anlamına gelir. Bir programlama dilinin sözdizimi, talimatlar olarak bilinen sonlu bir dizi yapı kullanarak programların oluşturulmasını sağlar . Soyut makinelerin çoğu, genellikle bir yığın ve kayıtlar içeren bir program deposunu ve bir durumu paylaşır. Dijital bilgisayarlarda yığın, yalnızca pozitif tam sayıları sayabilen (içine bir başlangıç ​​değeri yüklendikten sonra) bir adres kaydına sahip bir bellek birimidir . Yığın için adres kaydı, yığın işaretçisi olarak bilinir, çünkü değeri her zaman yığındaki en üst öğeyi ifade eder. Program, gerçekleştirilecek bir sonraki talimatı gösteren bir yığın işaretçisi ile bir dizi talimattan oluşur . Talimat tamamlandığında, bir yığın işaretçisi ilerletilir. Soyut bir makinenin bu temel kontrol mekanizması, yürütme döngüsü olarak da bilinir . Bu nedenle, programlama dili için soyut bir makine, programlama dilinde yazılmış programları depolayabilen ve çalıştırabilen herhangi bir veri yapıları ve algoritmalar koleksiyonudur. Derleme için bir ara dil adımı sağlayarak , bir programlama dilinin yüksek seviyesi ile gerçek bir makinenin düşük seviyesi arasındaki boşluğu doldurur . Soyut bir makinenin yönergeleri, belirli bir kaynak dilin veya kaynak diller kümesinin işlemlerini gerçekleştirmek için gerekli olan benzersiz işlemlere uyarlanır.

Zorunlu Programlama Dilleri

1950'lerin sonlarında, Association for Computing Machinery (ACM) ve diğer müttefik kuruluşlar , Conway'in makinesi gibi Evrensel Bilgisayar Odaklı Dil (UNCOL) için birçok teklif geliştirdi . UNCOL konsepti iyidir, ancak üretilen kodun düşük performansı nedeniyle yaygın olarak kullanılmamıştır . Java Virtual Machine'in 1990'ların sonlarında geliştirilmesine rağmen, hesaplamanın birçok alanında performansı sorun olmaya devam edecektir . Algol Object Code (1964), P4-machine (1976), UCSD P-machine (1977) ve Forth (1970) bu türden bazı başarılı soyut makinelerdir.

Nesne Yönelimli Programlama Dilleri

Nesne yönelimli programlama dilleri için soyut makineler genellikle yığın tabanlıdır ve nesne alanları ve yöntemleri için özel erişim yönergelerine sahiptir . Bu makinelerde, bellek yönetimi genellikle bir çöp toplayıcı (programlama dillerinde yerleşik bellek kurtarma özelliği) tarafından dolaylı olarak gerçekleştirilir. Smalltalk-80 (1980), Self (1989) ve Java (1994) bu uygulamanın örnekleridir.

Dize İşleme Dilleri

Dize işleme dili , sayılardan ziyade dizeleri işlemeye odaklanan bir bilgisayar dilidir . Onlarca yıldır komut kabukları , programlama araçları , makro işlemciler ve betik dilleri biçiminde dize işleme dilleri var . Uygun bir soyut makine kullanmanın iki faydası vardır: artan yürütme hızı ve gelişmiş taşınabilirlik. Snobol4 ve ML/I , makine bağımsızlığını kazanmak için soyut bir makine kullanan erken dize işleme dillerinin iki dikkate değer örneğidir.

Fonksiyonel Programlama Dilleri

Bir Krivine makinesinin resimli temsili .

SECD makinesi (1964) ve Cardelli'nin İşlevsel Soyut Makinesi (1983) dahil olmak üzere işlevsel diller için erken soyut makineler , istek veya değere göre çağrı olarak da bilinen, işlev bağımsız değişkenlerinin çağrıdan önce değerlendirildiği katı değerlendirmeyi tanımladı. ve tam olarak bir kez. Son yıllarda, G-machine (1984), Krivine machine (1985) ve Three Instruction Machine (1986) gibi araştırmaların çoğu tembel (veya ihtiyaca göre yapılan) değerlendirme üzerine olmuştur. gerektiğinde ve en fazla bir kez değerlendirilir. Bunun bir nedeni, katı değerlendirmenin etkili bir şekilde uygulanmasının artık iyi anlaşılması, dolayısıyla soyut bir makineye olan ihtiyacın azalmasıdır.

Mantık Programlama Dilleri

Tahmin hesabı (birinci dereceden mantık) , mantık programlama dillerinin temelidir . En iyi bilinen mantık programlama dili Prolog'dur . Prolog'daki kurallar, evrensel olarak nicelleştirilmiş 'Horn yan tümceleri' olarak bilinen tek tip bir biçimde yazılır; bu, amacın kanıtını keşfetmeye çalışan hesaplamaya başlamak anlamına gelir. Prolog program derlemesinde fiili standart haline gelen Warren Abstract Machine WAM (1983), çoğu çalışmanın odak noktası olmuştur . Geri izlemeyi (arama algoritması) desteklemek için veri birleştirme talimatları ve kontrol akışı talimatları gibi özel amaçlı talimatlar sağlar.

Soyut Bir Makinenin Yapısı

Genel bir soyut makine, bir bellek ve bir yorumlayıcıdan oluşur . Bellek, verileri ve programları depolamak için kullanılırken, yorumlayıcı, programlarda yer alan talimatları yürüten bileşendir.

Soyut bir makinenin yapısı

Tercüman, tercüme ettiği dile özgü işlemleri yapmalıdır . Bununla birlikte, dillerin çeşitliliği göz önüne alındığında, işlem kategorilerini ve tüm tercümanlar tarafından paylaşılan bir " yürütme mekanizmasını " belirlemek akla yatkındır. Tercümanın işlemleri ve eşlik eden veri yapıları aşağıdaki kategorilere ayrılmıştır:

  1. İlkel verileri işlemek için işlemler :
  2. İşlemlerin yürütme sırasını kontrol etmek için işlemler ve veri yapıları ;
  3. Veri transferlerini kontrol etmek için operasyonlar ve veri yapıları ;
  4. Bellek yönetimi için işlemler ve veri yapıları .

İlkel verileri işlemek için işlemler

Soyut bir makine bile algoritmalar yürüterek çalışır, bu nedenle dizeler ve tamsayılar gibi ilkel veri türlerini işlemek için işlemler içermelidir. Örneğin, tamsayılar (tamsayı veya gerçek), hem fiziksel soyut makineler hem de birçok programlama dili tarafından kullanılan soyut makineler için neredeyse evrensel olarak temel veriler olarak kabul edilir . Makine gerekli farklı aritmetik işlemleri (toplama, çarpma vb.) hemen yapar.

Sekans kontrolü için işlemler ve veri yapıları

"Dizi kontrolü" için işlemler ve yapılar , program talimatlarının yürütme akışını kontrol etmeye izin verir. Belirli koşullar karşılandığında, bir programın tipik sıralı yürütülmesini değiştirmek gerekir. Bu nedenle yorumlayıcı , veri manipülasyonu için kullanılanlardan farklı işlemlerle (örneğin, yürütülecek bir sonraki komutun adresini güncelleme işlemleri) değiştirilmiş veri yapılarını (yürütülecek bir sonraki talimatın adresini depolamak için kullanılanlar gibi) kullanır . ).

Veri aktarımlarını kontrol etmek için işlemler ve veri yapıları

Veri aktarım işlemleri, işlenenlerin ve verilerin bellekten yorumlayıcıya ve tersi yönde nasıl aktarılacağını kontrol etmek için kullanılır. Bu işlemler, mağaza ve işlenenlerin mağazadan alınma sırası ile ilgilidir.

Bellek yönetimi için işlemler ve veri yapıları

Bellek yönetimi , verileri ve uygulamaları ayırmak için bellekte gerçekleştirilen işlemlerle ilgilidir. Soyut makinede, veriler ve programlar süresiz olarak tutulabilir veya programlama dilleri söz konusu olduğunda, daha karmaşık bir mekanizma kullanılarak bellek tahsis edilebilir veya yeniden tahsis edilebilir.

Soyut Makinelerin Hiyerarşileri

Soyut makineler hiyerarşisi

Her makinenin hemen altındaki seviyenin işlevselliğini kullandığı ve hemen üstündeki seviyeyi karşılamak için kendi ek işlevselliğini eklediği soyut makine hiyerarşileri sıklıkla kullanılır. Fiziksel elektronik cihazlarla oluşturulmuş bir donanım bilgisayarı en temel düzeyde eklenebilir. Bu seviyenin üzerinde, soyut mikro programlanmış makine seviyesi tanıtılabilir. Makine dilinde yazılmış program tarafından uygulanan işletim sisteminin sağladığı soyut makine , donanımın hemen üzerinde (veya donanım yazılımı seviyesi yoksa doğrudan üzerinde) bulunur . Bir yandan işletim sistemi, fiziksel makinede bulunmayan daha yüksek düzeyli ilkel öğeler (örneğin, dosyalar üzerinde işlem yapan ilkel öğeler) sağlayarak fiziksel makinenin kapasitesini genişletir. Ana makine , Java Sanal makinesi ve bayt kodu dili gibi bir aracı makine kullanılarak üst düzey bir programlama dilinin uygulandığı işletim sistemi tarafından verilen soyut makine tarafından oluşturulur . Yüksek seviyeli dil (örneğin Java) için soyut makine tarafından verilen seviye , genellikle hiyerarşinin son seviyesi değildir. Bu noktada ek hizmetleri bir arada sunan bir veya birden fazla uygulama devreye alınabilir. Örneğin bir "web makinesi" seviyesi, Web iletişimlerini ( iletişim protokolleri veya HTML kodu sunumu ) yönetmek için gerekli işlevleri uygulamak için eklenebilir . " Web Hizmeti " düzeyi bunun üzerinde bulunur ve hem etkileşim protokolleri hem de ilgili süreçlerin davranışı açısından web hizmetlerinin iletişim kurmasını sağlamak için gerekli işlevleri sağlar. Bu düzeyde, Web hizmetlerine dayalı sözde "iş süreçleri"nin davranışını belirleyen tamamen yeni diller geliştirilebilir (buna bir örnek, İş Süreci Yürütme Dili'dir ). Son olarak, en üst düzeyde , çok özel ve sınırlı işlevselliğe sahip özel bir uygulama (örneğin, E-ticaret ) bulunabilir.

Ayrıca bakınız

Referanslar

  1. ^ Weisstein, Eric W. "Soyut Makine" . mathworld.wolfram.com . Erişim tarihi: 2022-05-16 .
  2. ^ a b c d e f "Soyut Makine Nedir?" . EasyTechJunkie . Erişim tarihi: 2022-05-16 .
  3. ^ a b c d e f g h i j Diehl, Stephan; Hartel, Pieter; Sestoft, Peter (Mayıs 2000). "Programlama dili uygulaması için soyut makineler" . Gelecek Nesil Bilgisayar Sistemleri . 16 (7): 739–751. doi : 10.1016/S0167-739X(99)00088-6 .
  4. ^ "9.1.1: Sonlu Durum Makinesine Genel Bakış" . Mühendislik LibreTexts . 2021-04-29 . Erişim tarihi: 2022-05-31 .
  5. ^ "Deterministik Sistem Nedir? - Techopedia'dan Tanım" . Techopedia.com . Erişim tarihi: 2022-05-30 .
  6. ^ Stearns, Richard E. (Ocak 2003). "Deterministik ve deterministik olmayan zaman ve alt sınır problemleri" . ACM Dergisi . 50 (1): 91–95. doi : 10.1145/602382.602409 . ISSN  0004-5411 . S2CID  2194820 .
  7. ^ Armoni, Michal; Gal-Ezer, Judith (Aralık 2007). "Determinizmsizlik: Bilgisayar bilimi çalışmalarında soyut bir kavram" . Bilgisayar Bilimleri Eğitimi . 17 (4): 243–262. Bib kodu : 2007CSEd...17..243A . doi : 10.1080/08993400701442885 . ISSN  0899-3408 . S2CID  41928460 .
  8. ^ Gill, John (Aralık 1977). "Olasılığa Dayalı Turing Makinelerinin Hesaplamalı Karmaşıklığı" . SIAM Journal on Computing . 6 (4): 675–695. doi : 10.1137/0206049 . ISSN  0097-5397 .
  9. ^ a b c d e f g h i j k l m n o Gabbrielli, Maurizio; Martini, Simone (2010), "Soyut Makineler" , Programlama Dilleri: İlkeler ve Paradigmalar , Londra: Springer Londra, s. 1–25, doi : 10.1007/978-1-84882-914-5_1 , ISBN 978-1-84882-913-8, alındı ​​2022-05-16
  10. ^ Bair, Ray; Chien, Andrew; Aşçı Jeanine; Donofrio, Dave; Grider, Gary; Kuehn, Jeff; Moore, Shirley; Şalf, John; Vetter, Jeff (2018/02/01). "Donanım Değerlendirmesi: Exascale Computing için Soyut Makine Modelleri ve Proxy Mimarileri" . doi : 10.2172/1733300 . OTI 1733300  . {{cite journal}}:Alıntı günlüğü gerektirir |journal=( yardım )
  11. ^ "FOLDOC'tan soyut makine" . foldoc.org . Erişim tarihi: 2021-08-07 .
  12. ^ Tanrım, J.; Melvin, SW; Pat, YN (1986). "VAX 8600 mikro kodu aracılığıyla Prolog'un uygulanması" . 19. Yıllık Mikroprogramlama Çalıştayı Bildirileri - MICRO 19 . New York, New York, ABD: ACM Press: 68–74. doi : 10.1145/19551.19538 . ISBN 081860736X. S2CID  3846072 .
  13. ^ "soyut makine" . Oxford Referansı . Erişim tarihi: 2022-05-16 .
  14. ^ García-Martín, Julio Manuel; Sutil-Martin, Miguel (1999/08/15). "Soyut Makineleri Tasarlamak İçin Bir Model" . doi : 10.13140/RG.2.1.3680.5203 ​​. {{cite journal}}:Alıntı günlüğü gerektirir |journal=( yardım )
  15. ^ upscfever.com (2017/01/25). "Bilgisayar Organizasyonu ve Mimarisi (Yığın Organizasyonu) - UPSC FEVER" . upscfever.com . Erişim tarihi: 2022-05-31 .
  16. ^ a b Tyson, Matthew (2020-01-17). "JVM nedir? Java Sanal Makinesi Tanıtımı" . Bilgi Dünyası Erişim tarihi: 2022-05-31 .
  17. ^ "Nesne Yönelimli Programlama (OOP) Nedir?" . SearchAppArchitecture . Erişim tarihi: 2022-05-31 .
  18. ^ "Dize işleme dilleri için tasarım hususları" , A Study in String Processing Languages ​​, Lecture Notes in Computer Science, Berlin, Heidelberg: Springer Berlin Heidelberg, cilt. 205, s. 17–37, 1985, doi : 10.1007/3-540-16041-8_2 , ISBN 978-3-540-16041-0, alındı ​​2022-05-31
  19. ^ Hackett, Jennifer; Hutton, Graham (2019/07/26). "İhtiyaca göre arama, durugörüye göre değere göre aramadır" . ACM'nin Programlama Dilleri Üzerine Tutanakları . 3 (ICFP): 1–23. doi : 10.1145/3341718 . ISSN  2475-1421 . S2CID  195782686 .
  20. ^ "Giriş | Giriş" . Geeks için Geeks . 2018-05-26 . Erişim tarihi: 2022-05-31 .
  21. ^ Accattoli, Beniamino; Barenbaum, Pablo; Mazza, Damiano (2014-11-26). "Soyut makinelerin damıtılması" . ACM SIGPLAN Bildirimleri . 49 (9): 363–376. doi : 10.1145/2692915.2628154 . ISSN  0362-1340 . S2CID  234775413 .
  22. ^ Baeldung (2018/01/11). "Java İlkellerine Giriş | Baeldung" . www.baeldung.com . Erişim tarihi: 2022-05-31 .
  23. ^ "Tercüman" , Java'da Yazılım Mimarisi Tasarım Modelleri , Auerbach Yayınları, 2004-04-27, doi : 10.1201/9780203496213.ch34 , ISBN 978-0-8493-2142-9, alındı ​​2022-05-31
  24. ^ "Donanım - Yazılım - Ürün Yazılımı: Fark Nedir?" . cankurtaran teli Erişim tarihi: 2022-05-31 .
  25. ^ Accattoli, Beniamino; Barras, Bruno (2017-10-09). "Ortamlar ve soyut makinelerin karmaşıklığı" . Bildirime Dayalı Programlamanın İlkeleri ve Uygulamalarına İlişkin 19. Uluslararası Sempozyum Bildirileri . Namur Belçika: ACM: 4–16. doi : 10.1145/3131851.3131855 . ISBN 978-1-4503-5291-8. S2CID  11953081 .
  26. ^ "Web Hizmetleri" . referans.wolfram.com . Erişim tarihi: 2022-05-31 .
  27. ^ DB Skillicorn (2005). Paralel Programlamanın Temelleri . Cambridge Üniversitesi Yayınları. p. 18. ISBN'si 978-0-521-01856-2.

daha fazla okuma

  • Peter van Emde Boas, Machine Models and Simulations s. 3–66, görünen:
Jan van Leeuwen , ed. "Teorik Bilgisayar Bilimi El Kitabı. Cilt A: Algoritmalar ve Karmaşıklık , The MIT PRESS/Elsevier, 1990. ISBN  0-444-88071-2 (cilt A). QA 76.H279 1990