MMIX - MMIX

MMIX
Návrhář Donald Knuth
Bity 64bitové
Představeno 1999
Design RISC
Kódování Pevný
Větvení Kód podmínky
Endianness Velký
Otevřeno Ano, bez licenčních poplatků
Registry
32 účelových registrů
Obecný účel 256

MMIX (vyslovováno em-mix ) je 64bitová architektura RISC (Reduced Instruction Set Computing ) navržená Donaldem Knuthem , k níž významně přispěli John L. Hennessy (který se podílel na návrhu architektury MIPS ) a Richard L. Sites ( který byl architektem alfa architektury). Knuth to řekl

MMIX je počítač určený k ilustraci aspektů programování na úrovni stroje. V mých knihách Umění počítačového programování nahrazuje MIX , stroj ve stylu šedesátých let, který dříve hrál takovou roli ... Snažil jsem se navrhnout MMIX tak, aby jeho strojový jazyk byl jednoduchý, elegantní a snadno se učil. Současně jsem dával pozor, abych zahrnoval všechny složitosti potřebné k dosažení vysokého výkonu v praxi, aby bylo v zásadě možné MMIX vybudovat a dokonce možná být konkurenceschopný s některými z nejrychlejších počítačů pro všeobecné použití na trhu. “

Knuth zahájil návrh MMIX v roce 1999 a stabilní verzi návrhu vydal v roce 2011. Procesor je očíslován jako „2009“, přičemž Knuth vysvětluje, že toto je aritmetický průměr z počtu jiných počítačových architektur; stejně jako „MMIX“ římskými číslicemi .

Architektura

MMIX je big-endian 64bitový redukovaný soubor instrukcí (RISC) s 256 64bitovými registry pro obecné účely, 32 64bitovými registry pro speciální účely, 32bitovými instrukcemi s pevnou délkou a 64bitovou virtuální adresou prostor . Instrukční sada MMIX obsahuje 256 operačních kódů, z nichž jeden je vyhrazen pro budoucí rozšíření. MMIX používá čísla s plovoucí desetinnou čárkou IEEE 754 .

Instrukce

Všechny pokyny mají přidruženou mnemotechnickou pomůcku. Například instrukce č. 20 (32 desetinná) je spojena s ADD. Většina instrukcí má symbolický tvar OP X,Y,Z, kde OP určuje druh instrukce, X specifikuje registr použitý k uložení výsledku instrukce a zbytek určuje operandy instrukce. Každé z těchto polí je široké osm bitů. Například ADD $0,$1,3znamená „Nastavit 0 $ na součet 1 $ a 3“.

Většina pokynů může mít buď okamžité hodnoty, nebo obsah registru; jedna mnemotechnická instrukce tedy může odpovídat jednomu ze dvou operačních kódů.

Programy MMIX jsou obvykle konstruovány pomocí jazyka sestavení MMIXAL. Níže je jednoduchý program MMIXAL, který vytiskne řetězec „ Hello, world! “:

        LOC   #100                   % Set the address of the program
                                     % initially to 0x100.

Main    GETA  $255,string            % Put the address of the string
                                     % into register 255.

        TRAP  0,Fputs,StdOut         % Write the string pointed to by
                                     % register 255 to the standard
                                     % output file.

        TRAP  0,Halt,0               % End process.

string  BYTE  "Hello, world!",#a,0   % String to be printed.  #a is
                                     % newline, 0 terminates the
                                     % string.

Registry

V čipu MMIX je 256 přímo adresovatelných univerzálních architektonických registrů označených 0 až 255 dolary a 32 účelových architektonických registrů. K registrům zvláštního účelu lze přistupovat pomocí pokynů GET a PUT. Dva ze speciálních registrů, rL a rG, určují, které z obecných registrů jsou lokální a které globální. Všechny registry od $ 0 ... ([rL] - 1) jsou lokální registry a představují okno do interního zásobníku registrů. Registry z [rL] ... ([rG] - 1) jsou "okrajové registry", vždy vrátí 0, pokud jsou použity jako zdroj v operaci. Použití okrajového registru jako cíle operace způsobí, že stroj automaticky zvýší rL, aby zahrnoval tento registr. Všechny registry [rG] ... 255 $ se nazývají globální registry a nejsou součástí zásobníku registrů.

Místní zásobník registrů

Zásobník místních registrů poskytuje každému podprogramu vlastní lokální registry rL, označené 0 až $ (rL - 1) . Kdykoli je vyvolán podprogram, řada místních registrů je posunuta dolů po zásobníku (posunutím začátku okna). Argumenty volaného podprogramu jsou ponechány ve zbývajících místních registrech. Když podprogram skončí, vyskočí dříve zaslané registry. Protože interní zásobník může obsahovat pouze konečný počet registrů, může být nutné uložit část zásobníku do paměti. To je implementováno pomocí speciálních registrů rO a rS, které zaznamenávají, která část zásobníku místních registrů je v paměti a která část je stále v místních fyzických registrech. Zásobník registrů zajišťuje rychlé propojení podprogramů.

Speciální registry

32 speciálních fyzických architektonických registrů je následující:

  1. rB, registr bootstrapu (vypnutí)
  2. Při vypínání rB ← $ 255 a $ 255 ← rJ. Tím se ušetří rJ v obecném registru.
  3. rD, registr dividend
    Rozdělovač celých čísel bez znaménka to používá jako levou polovinu 128bitového vstupu, který má být dělen druhým operandem.
  4. rE, registr epsilon
    Používá se pro plovoucí srovnání s ohledem na epsilon.
  5. rH, registr himult
    Slouží k uložení levé poloviny 128bitového výsledku násobení celých čísel bez znaménka.
  6. rJ, návratový skokový registr
    Slouží k uložení adresy další instrukce PUSHes a POP pro návrat z PUSH.
  7. rM, registr masky multiplexu
    Používá se instrukcí multiplexu.
  8. rR, zbytek registru
    Je nastaveno na zbytek celočíselného dělení.
  9. rBB, bootstrap registr (past)
    Při chytání do pasti rBB ← $ 255 a $ 255 ← rJ. Tím se ušetří rJ v obecném registru
  10. rC, počítadlo cyklů
    Zvyšuje se každý cyklus.
  11. rN, sériové číslo
    Konstanta identifikující tento konkrétní procesor MMIX.
  12. rO, posun zásobníku registrů
    Používá se k implementaci zásobníku registrů.
  13. rS, ukazatel zásobníku zásobníku
    Používá se k implementaci zásobníku registrů.
  14. rI, čítač intervalů
    Sníží se každý cyklus. Při nule způsobí přerušení.
  15. rT, registr adresy pasti
    Slouží k uložení adresy vypínacího vektoru.
  16. rTT, dynamický registr adres pasti
    Slouží k uložení adresy vektoru pasti.
  17. rK, registr masky přerušení
    Slouží k povolení a zakázání konkrétních přerušení.
  18. rQ, registr požadavků na přerušení
    Slouží k záznamu přerušení, která nastanou.
  19. rU, počítadlo využití
    Slouží k udržení počtu provedených pokynů.
  20. rV, virtuální překladový registr
    Používá se k překladu virtuálních adres na fyzické adresy. Obsahuje velikost a počet segmentů, kořenové umístění tabulky stránek a číslo adresního prostoru.
  21. rG, globální prahový registr
    Všechny odkazy na obecné registry s číslem větším nebo rovným rG odkazují na globální registry.
  22. rL, místní prahový registr
    Všechny odkazy na obecné registry s číslem menším než rL odkazují na místní registry.
  23. rA, aritmetický stavový registr
    Slouží k záznamu, povolení a zakázání aritmetických výjimek, jako je přetečení a dělení nulou.
  24. rF, registr umístění selhání
    Slouží k uložení adresy instrukce, která způsobila selhání.
  25. rP, predikční registr
    Používá se podmíněným swapem (CSWAP).
  26. rW, registr přerušený (vypnutý)
    Používá se při vypínání k uložení adresy instrukce po té, která byla přerušena.
  27. rX, prováděcí registr (vypnutí)
    Používá se při vypínání k uložení přerušené instrukce.
  28. rY, Y operand (trip)
    Používá se při vypínání k uložení operandu Y přerušené instrukce.
  29. rZ, Z operand (vypínací)
    Používá se při vypínání k uložení operandu Z přerušené instrukce.
  30. rWW, kde přerušený registr (past)
    Používá se při zachycování k uložení adresy instrukce po té, která byla přerušena.
  31. rXX, prováděcí registr (past)
    Používá se při zachycování k uložení instrukce, která byla přerušena.
  32. rYY, Y operand (past)
    Používá se při zachycování k uložení operandu Y přerušené instrukce.
  33. rZZ, Z operand (past)
    Používá se při zachycování k uložení operandu Z přerušené instrukce.

Stejně jako programy běžící na téměř všech ostatních CPU lze programy MMIX přerušit několika způsoby. Externí hardware, jako jsou časovače, jsou běžným zdrojem přerušení před výpočtem (výpočetní) . Mnoho instrukcí způsobuje v určitých výjimečných případech přerušení; jako jsou výjimky selhání stránky ochrany paměti používané k implementaci virtuální paměti a zpracování výjimek s pohyblivou řádovou čárkou . MMIX má 2 druhy přerušení: „výlety“ a „pasti“. Hlavní rozdíl mezi „vypínáním“ a „depeší“ spočívá v tom, že depeše odesílají ovládání do programu „trap handler“ v operačním systému (trapping), ale výlety odesílají ovládání do programu „trip handler“ v uživatelské aplikaci (vypínání). Uživatelé mohou také vynutit, aby jakýkoli obslužný program přerušení běžel s explicitními pokyny pro přerušení softwaru TRIP a TRAP, podobně jako některé druhy pastí v jiných počítačových systémech. Zejména systémové volání z uživatelského programu do operačního systému používá instrukci TRAP.

Hardwarové implementace

Od října 2015 neexistují žádné známé hardwarové implementace architektury instrukční sady MMIX. Nicméně, nářadí fpgammix projektu MMIX v Verilog , takže je možné realizovat pomocí hradlové pole pole programovatelné .

Softwarové nástroje

Architektura instrukční sady MMIX je podporována řadou softwarových nástrojů pro výzkum počítačové architektury a vývoj softwaru.

Simulátory a assembler

  • MMIXware-Donald Knuth's MMIX-SIM simple (behavioral) simulator, MMIXAL assembler, test suite, sample programs, full documentation, and MMIX architecture (pipeline) simulator ( gzipped tarfile).
  • MMIXX -grafický balíček založený na X11 od Andrewa Pochinského z Centra teoretické fyziky MIT, který v kombinaci s výše uvedenými zdroji MMIXware rozšiřuje virtuální stroj MMIX o 640 × 480 pixelů , skutečné barvy „virtuálního displeje“ ( pro UNIX/Linux).

Překladač

GNU Compiler Collection obsahuje MMIX back-end pro své C / C ++ kompilátory, přispěli Hans-Peter Nilsson a části hlavního distribuce GCC od konce roku 2001. V listopadu 2017 se MMIX back-end GCC je i nadále aktivně vyvinuté a udržované dobrovolníky.

  • Pokyny k instalaci nástrojů GCC + MMIX od Hanse-Petera Nilssona.
  • §3.17.26. Možnosti MMIX pro GNU GCC verze 7.2.0 (web GNU GCC).
  • §9.28.  MMIX závislé funkce pro GNU as od GNU binutils verze 2.29, assembler back-end pro GNU GCC (GNU Binutils Web).

Výše uvedené nástroje by teoreticky mohly být použity ke kompilaci, sestavení a zavedení celého jádra operačního systému FreeBSD , Linux nebo jiného podobného operačního systému na hardware MMIX, pokud by takový hardware existoval.

Viz také

Reference

  • Donald E. Knuth (2005). The Art of Computer Programming Volume 1 Fascicle 1: MMIX A RISC Computer for the New Millennium . Addison-Wesley. ISBN  0-201-85392-2 (errata)

externí odkazy

  • Domovská stránka MMIX
  • Stránka MMIX Donalda Knutha - stručný úvod do MMIX a Knuthovy důvody pro použití hypotetického montážního jazyka v TAoCP.
  • Stránka novinek MMIX Donalda Knutha - simulátor open source napsaný v CWEB , příručce programátora a ukázkových programech.
  • Web MMIXmasters - web pro dobrovolníky (MMIXmasters), kteří převádějí všechny programy v TAOCP, svazky 1–3, ze starého MIXu na nový MMIX.
  • VMMMIX - VMMMIX je virtuální stroj MMIX. Má konzolu, HDD a ethernetové vstupy/výstupy. V současné době tento virtuální počítač běží pouze na systému Windows. A Linux běží na tomto virtuálním stroji MMIX.
  • Domovská stránka VMB - Projekt virtuální základní desky nabízí kolekci zařízení typu plug and play, která lze použít s příslušnou verzí CPU MMIX.