Veremgép
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:
- közvetlenül a hardverben végrehajtott utasításkészlet-architektúrák
- Burroughs Large Systems Architecture (1961 óta)
- A Collins Radio Collins Adaptive Processing System mikroszámítógépe (CAPS, 1969 óta) és a Rockwell Collins Advanced Architecture Microprocessor (AAMP, 1981 óta). [ 1 ]
- Az UCSD Pascal p-gép ( mint a Pascal MicroEngine és sok más)
- A T/16 a Tandem Computerstől
- Hewlett Packard HP 3000 ( a klasszikus, nem a PA -RISC )
- Az Atmel MARC4 mikrokontrollere [ 2 ] _
- Különféle "Forth chipek", [ 3 ] például az RTX2000 , RTX2010 , Sh-Boom , F21 [ 4 ] és PSC1000 [ 5 ]
- Bernd Paysan 4stack processzora négy veremből áll. [ 6 ]
- A Charles H. Moore által tervezett "Ignite" stack gép megőrzi vezető szerepét a funkcionális sűrűség terén.
- A Saab Ericsson Space Thor mikroprocesszor [ 7 ]
- Szoftverben értelmezett
virtuális gépek
- UCSD Pascal p-gépe (ami nagyon hasonlít Burroughsra)
- A Java virtuális gép utasításkészlete
- Az ECMA 335 ( Microsoft .NET - környezet) Common Intermediate Language (CIL) virtuális végrehajtási rendszere (VES )
- A Forth programozási nyelv , különösen a Forth virtuális gép
- Adobe PostScript . _ _
- Parakeet programozási nyelv .
- A Sun Microsystems SwapDrop programozási nyelve a Sun Ray intelligens kártya azonosításához .
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
- verem-orientált programozási nyelv
- Nagy Burroughs rendszerek
- Forth (programozási nyelv)
- akkumulátoros gép
- regisztráló gép
- Kazal
- Hívási lista
Hivatkozások
- ↑ A világ első Java processzora , David A. Greve és Matthew M. Wilding, Electronic Engineering Times, 1998. január 12.,
- ↑ MARC4 4 bites architektúra
- ↑ Forth chipek archiválva 2006-02-15 a Wayback Machine -nél
- ↑ F21 mikroprocesszor áttekintése
- ↑ Elérhető egy Java chip – most! , szerző: Rick Brian Slack
- ↑ 4stackProcesszor
- ↑ Harry Gunnarsson és Thomas Lundqvist (1995). A GNU C fordító portolása a Thor mikroprocesszorra . Letöltve: 2008. december 4 .
- ↑ "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.
- ↑ Virtuális gép leszámolás: Stack vs. Register Machine, Yunhe Shi, David Gregg, Andrew Beatty, M. Anton Ertle
- ↑ Hennessy, uo.
- ↑ Sh'Boom CPU leírása, Charles Moore
- ↑ Nagy Burroughs rendszerek
- ↑ 8051 CPU kézikönyv, Intel, 1980
Külső linkek
- Stack Computers: Philip J. Koopman, Jr. újhullámos könyve, 1989
- Homebrew CPU FPGA-ban – FPGA-t használó homebrew veremgép
- Mark 1 FORTH Computer archiválva : 2009. szeptember 1., a Wayback Machine webhelyen . — Homebrew stack gép diszkrét logikai áramkörök használatával
- Mark 2 FORTH Computer Archivált 2009-09-04 a Wayback Machine -nél . — Homebrew veremgép bitslice/PLD használatával
- The Case for Virtual Register Machines , Brian Davis, Andrew Beatty, Kevin Casey, David Gregg és John Waldron