close

Veremgép

Ugrás a navigációhoz Ugrás a kereséshez

A veremgép olyan számítási modell , amelyben a számítógép memóriája egy vagy több verem formájában van . A kifejezés egy valódi számítógépre is utal, amely egy idealizált veremgépet valósít meg vagy szimulál.

Ezenkívül a veremgép egy valós vagy szimulált gépre is utalhat "0-operandus" utasításkészlettel . Egy ilyen gépen a legtöbb utasítás implicit módon a verem tetején lévő értékekre vonatkozik, és lecseréli ezeket az értékeket az eredménnyel. Az ilyen gépeken általában van egy "betöltési" és egy "tárolási" utasítás is, amelyek tetszőleges helyekre olvasnak és írnak a RAM -ban . (Mint minden más utasításhoz hasonlóan a "betöltés" és a "tárolás" utasításoknak sincs szükségük operandusokra egy tipikus veremmotorban – mindig a verem tetejéről veszik az olvasni vagy írni kívánt RAM címét.)

A veremgépek ("0 operandusos utasításkészlet") előnye az akkumulátoros gépekkel ("1 operandusos utasításkészlet") és a regisztergépekkel ("2 operandusos utasításkészlet" vagy "3 operandusos utasításkészlet") szemben hogy a "0-operandus" utasításkészlethez írt programok általában nagyobb kódsűrűséggel rendelkeznek, mint a más utasításkészletekhez írt egyenértékű programok.

Veremek az automata elméletben

Az automata elméletben egy veremgépnek számos verem van. A bemenet az 1. verem kezdeti tartalma; az összes többi verem üresen kezdődik. A veremgép minden állapota olvasási vagy írási állapot ; és minden állapot megad egy veremszámot, amelyből olvasni (pop) vagy írni (push) kell. Ezenkívül az írási állapot meghatározza az írandó szimbólumot és a következő állapotot, amelyre át kell térni. Az olvasási állapot megadja az ábécé minden egyes szimbólumához, hogy milyen állapotba kerülne át, ha a szimbólumot elolvasnák; emellett azt is meghatározza, hogy melyik állapotba kell áttérni, ha a verem üres. Egy veremgép leáll, amikor az átmenetei speciális leállított állapotba kerülnek.

Az 1 veremű veremgép nagyon gyenge számítási modell . Például kimutatható, hogy egyetlen 1 veremből álló gép sem képes felismerni a 0 n 1 n egyszerű nyelvet (a 0-k száma és az 1-esek száma), pumpa argumentumokon keresztül . Az egyveremes gépek számítási teljesítménye szigorúan nagyobb, mint egy véges automatáé , de szigorúan kisebb, mint a determinisztikus veremautomaté .

Másrészt egy több veremből álló veremgép egyenértékű egy Turing-géppel . Például egy 2 veremből álló gép emulálhat egy Turing-gépet úgy, hogy az egyik köteget a szalagnak az aktuális Turing-gép fejpozíciójától balra eső részéhez, a másik verem pedig a jobb oldali részhez használja.

Praktikus stack gépek

A verem alapú utasításkészlettel rendelkező gépek egy vagy több veremmel rendelkezhetnek. Egyes veremgépek 2 veremből álló gépek, a két verem általában egy adatverem és egy visszatérési verem , az előbbi az adatokkal végzett műveletekhez, az utóbbi pedig a visszatérési címekhez . Más gépek ugyanazt a köteget használják mindkettőhöz.

Az operandusokhoz processzorregisztereket használó gép könnyen szimulálhat egy veremgépet. Az ilyen szimulációt néha virtuális veremgépnek is nevezik . A (többé-kevésbé) verem alapú (hardveres) utasításkészlet előnye a regiszter alapú architektúrával szemben a rövidebb utasítások száma, mivel kevesebb operanduscímet kell megadni. Ez ugyanaz, mint a jobb kódsűrűség és a kisebb lefordított programok.

A veremmotorok kereskedelmi megvalósításai általában speciális célú regiszterek kis készletét tartalmazzák a kontextusbezárás kezelésére, azaz olyan veremkeretek, amelyek nem a legfelső veremkeret (dinamikus versus lexikális hatókör). A kontextusburkolt használatának és elérésének két különböző módja. A gyakorlati veremgépek tehát nem azonosak az automata-elmélet veremgépeivel, de lehetővé teszik, hogy a veremalapú CPU teljes mértékben alkalmas legyen általános célú számítástechnikára.

Példák a köteggépek kereskedelmi felhasználására:

Ne feledje, hogy a Burroughs architektúra a veremmotort címkézett memóriával kombinálja (a memória minden szavának néhány bitje az operandusok adattípusának leírására szolgál). A címkézett memória kevés műveleti kódot igényel , azaz egyetlen "add" utasítás működik egész és lebegőpontos operandusok bármilyen kombinációjához . A kevesebb műveleti kód megkövetelése azt jelenti, hogy a teljes utasításkészlet elfér kisebb műveleti kódokban, csökkentve az utasítás teljes szélességét.

Teljesítmény

A stack gépek versenyeznek a hagyományos regisztergépekkel a piaci részesedésért. Mindkét architektúrának vannak erősségei. A következő megbeszélés célja, hogy képet adjon a két architektúra relatív előnyeiről.

A hagyományos hivatkozások azt mondják [ 8 ] , hogy a veremgépek lassúak, mert a veremek a memóriában vannak, és ezért lassabban érhetők el, mint a regiszterek. Ezt azonban némileg ellensúlyozza a veremmotor kisebb kódmérete, amely gyorsabban lekérhető és végrehajtható. Ezt megerősítik mind a gépi architektúra, mind a fordítók agresszív optimalizálásával végzett kísérletek [ 9 ] , amelyek azt mutatják, hogy a regiszter gépi kódja 47%-kal kevesebb virtuális utasítást tartalmaz, ugyanakkor 25%-kal nagyobb, mint a verem gépi kódja. Amikor veremek vannak a memóriában, egy regisztergép körülbelül 26,5%-kal gyorsabban fut, mint egy veremgép, nagyrészt a regiszterekben lévő állandók újrafelhasználásának köszönhetően.

Azt is mondják [ 10 ] , hogy a regiszterek több lehetőséget biztosítanak a párhuzamos végrehajtásra szuperskaláris végrehajtás során . Ennek oka az lehet, hogy a szuperskaláris veremgépek és a szükséges optimalizáló fordítók nem túl aktív kutatási vagy kereskedelmi fejlesztési terület. Elvileg a szuperskaláris számítógép sebességét a fő memória lassú elérési sebessége korlátozza, nem pedig a köztes eredmények kezelésére használt jelölés.

Egyes veremgépek [ 11 ] ​[ 12 ]​ olyan gyorsítótárral rendelkeznek, amely a verem egyes részeit nagy sebességű regiszterekben tárolja, hogy felgyorsítsa a verem elérését, miközben a kód gyors és kicsi marad. Ez azonban nem minden stack gépre igaz.

A valós idejű késleltetés, vagyis az elektronikus eseménytől a hasznos megszakítási kód kezdetéig eltelt idő alacsonyabb lehet veremgépeken, mert a regisztereket el kell menteni, majd vissza kell állítani, hogy a megszakítási kód ne sérüljön meg. számítások a háttérben. Egyes regisztergépek, például az Intel 8051 [ 13 ] több regiszterkészlettel rendelkeznek. A megszakítási kód egyszerűen megváltoztathatja a regiszterkészlet indexét, hogy a programok által általában használt regiszterek érintése nélkül működhessen. Sajnos ez a funkció nem minden naplózó gépen létezik.

A veremgépek kisebb kódmérete csökkentheti a számítógép memória méretét és költségét. Kevés memóriaelérés növelheti a regisztergép sebességét egy veremgéphez képest (amelynek a memóriájában vannak a veremek). A regiszterek mentéséhez és visszaállításához szükséges idő csökkentésével a veremgép kevesebb többletterheléssel reagálhat a megszakításokra.

Lásd még

Hivatkozások

  1. A világ első Java processzora , David A. Greve és Matthew M. Wilding, Electronic Engineering Times, 1998. január 12.,
  2. MARC4 4 bites architektúra
  3. Forth chipek archiválva 2006-02-15 a Wayback Machine -nél
  4. F21 mikroprocesszor áttekintése
  5. Elérhető egy Java chip – most! , szerző: Rick Brian Slack
  6. 4stackProcesszor
  7. Harry Gunnarsson és Thomas Lundqvist (1995). A GNU C fordító portolása a Thor mikroprocesszorra . Letöltve: 2008. december 4 . 
  8. "Számítógépes architektúra, kvantitatív megközelítés", John L. Henessy, David Goldberg; Lásd a stack gépekről szóló vitát.
  9. Virtuális gép leszámolás: Stack vs. Register Machine, Yunhe Shi, David Gregg, Andrew Beatty, M. Anton Ertle
  10. Hennessy, uo.
  11. Sh'Boom CPU leírása, Charles Moore
  12. Nagy Burroughs rendszerek
  13. 8051 CPU kézikönyv, Intel, 1980

Külső linkek