31bitové výpočty - 31-bit computing

V počítačové architektuře jsou 31bitová celá čísla , adresy paměti nebo jiné datové jednotky ty, které jsou široké 31 bitů .

V roce 1983, IBM představil 31-bitové adresování v System / 370 XA mainframe architektury jako upgrade do 24bitové fyzické a virtuální, a přechodné 24bitový virtuální / 26-bit fyzikální, oslovení starších modelů. Toto vylepšení umožnilo 128krát větší adresové prostory, což programům umožnilo adresovat paměť nad 16  MB (dále jen „nad řádkem“). Byla zahrnuta podpora pro COBOL , FORTRAN a později pro Linux / 390 .

Na začátku 80. let byla představena Motorola 68012 ; měl 32bitové datové a adresové registry, jak to udělala Motorola 68010 , ale místo toho, aby poskytoval spodních 24 bitů adresy na kolících adresy, poskytoval všechny kromě bitu 30 na kolíky adresy.

31bitové sálové počítače IBM

Architektura

V architekturách System / 360 , jiných než 360/67 a raných architekturách System / 370 , byly registry pro obecné účely široké 32 bitů, stroj dělal 32bitové aritmetické operace a adresy byly vždy uloženy ve 32bitových slovech, takže architektura byla považována za 32bitovou , ale stroje ignorovaly prvních 8 bitů adresy, což vedlo k 24bitovému adresování. S příponou XA byl pro adresování ignorován pouze bit vyššího řádu (bit 0) ve slově. Výjimkou je, že instrukce pro přepínání režimů používala také bit 0. Existovaly přinejmenším dva důvody, proč IBM neimplementovala 32bitové adresování 360/67

  1. Pokyny pro ovládání smyčky BXH a BXLE provedly podepsané srovnání.
  2. Velká část stávajícího softwaru používala bit 0 jako indikátor konce seznamu.

Přechod

Přechod byl složitý: programátoři montážních jazyků, včetně vlastních architektů a vývojářů operačních systémů IBM, používali náhradní bajt v horní části adres pro příznaky téměř dvacet let. IBM se rozhodla poskytnout dvě formy adresování, aby se minimalizovala bolest: pokud byl zapnut nejvýznamnější bit (bit 0) 32bitové adresy, dalších 31 bitů bylo interpretováno jako virtuální adresa. Pokud byl nejvýznamnější bit vypnutý, pak se jako virtuální adresa považovalo pouze spodních 24 bitů (stejně jako u systémů před XA). Programy tedy mohly i nadále používat sedm bitů nízkého řádu horního bajtu pro jiné účely, pokud horní bit nechali vypnutý. Jediné programy vyžadující úpravy byly ty, které nastavily horní (vlevo) bit slova obsahující adresu. To také ovlivnilo srovnání adres: Levý bit slova je také interpretován jako znakový bit v aritmetice doplňku 2, což znamená záporné číslo, pokud je bit 0 zapnutý. Programy, které používají instrukce pro podepsané aritmetické srovnání, mohou získat obrácené výsledky. Dvě rovnocenné adresy by mohly být porovnány jako nerovné, pokud by jedna z nich měla zapnutý bit znaménka, i když zbývající bity byly identické. Většina z toho byla neviditelná pro programátory používající jazyky na vysoké úrovni, jako jsou COBOL nebo FORTRAN , a IBM po určitou dobu pomáhala přechodu s hardwarem s duálním režimem.

Určité strojové instrukce v tomto 31bitovém režimu adresování mění bit režimu adresování jako možná úmyslný vedlejší účinek. Například původní instrukce volání podprogramu BAL, Branch and Link a jeho ekvivalent registrového registru, BALR, Branch and Link Register, ukládají určité stavové informace, kód délky instrukce, stavový kód a masku programu do horního bajtu zpáteční adresy. Byla přidána instrukce BAS, Branch and Save, která umožňuje 31bitové zpáteční adresy. BAS a jeho ekvivalent registrového registru, BASR, Branch and Save Register, byly součástí sady instrukcí systému System / 360 Model 67 , což byl jediný model System / 360 umožňující adresy delší než 24 bitů. Tyto pokyny byly zachovány, ale byly upraveny a rozšířeny pro 31bitové adresování.

Mezi další pokyny na podporu 24 / 31bitového adresování patří dvě nové instrukce volání / zpětného registru k registraci, které také ovlivňují změnu režimu adresování (např. Branch and Save and Set Mode, BASSM, 24/31 bit verze of call where the adresa propojení včetně režimu se uloží a větev se přesune na adresu v případně jiném režimu a režim BSM, Branch a Set, 24/31 bitová verze návratu, kde je návrat přímo na dříve uloženou adresu propojení a v předchozím režimu). Společně BASSM a BSM umožňují 24bitové volání na 31bitové (a návrat na 24bitové), 31bitové volání na 24bitové (a návrat na 31bitové), 24bitové volání na 24bitové ( a návrat na 24 bitů) a 31 bitů volání na 31 bitů (a návrat na 31 bitů).

Stejně jako BALR 14,15 (24bitová forma volání) se BASSM používá jako BASSM 14,15, kde je adresa a režim spojení uložena v registru 14 a větev je převzata na adresu a režim podprogramu uvedeno v registru 15. Podobně jako BCR 15,14 (24bitová forma bezpodmínečného návratu) se BSM používá jako BSM 0,14, kde 0 znamená, že aktuální režim není uložen (program opouští podprogram, stejně) a je třeba provést návrat volajícímu na adresu a režim specifikovaný v registru 14. V publikaci IBM MVS / Extended Architecture System Programming Library: 31-Bit Addressing, GC28-1158-1, najdete rozsáhlé příklady použití zejména BAS, BASR, BASSM a BSM, str. 29–30.

370 / ESA architektura

V 90. letech představila IBM architekturu 370 / ESA (později pojmenovanou 390 / ESA a nakonec ESA / 390 nebo System / 390, zkrátka S / 390), završující vývoj k plnému 31bitovému virtuálnímu adresování a udržující tento příznak režimu adresování. Tyto pozdější architektury umožňují více než 2 GB fyzické paměti a umožňují více souběžných adresních prostorů až do velikosti 2 GB. V polovině roku 2006 bylo tímto režimem 31bitového adresování příliš mnoho programů nepřiměřeně omezených.

z / Architektura

V roce 2000 IBM prolomila bariéru lineárního adresování („bar“) o velikosti 2 GB zavedením prvního 64bitového systému z / Architecture , IBM zSeries Model 900. Na rozdíl od přechodu XA si z / Architecture nevyhrazuje špičkový bit identifikovat dřívější kód. z / Architecture udržuje kompatibilitu s 24bitovým a 31bitovým kódem, dokonce i starší kód běží současně s novějším 64bitovým kódem.

Linux / 390

Vzhledem k tomu, že Linux / 390 byl poprvé vydán pro stávající 32bitový datový / 31bitový adresovací hardware v roce 1999, jsou počáteční mainframové linuxové aplikace kompilované v režimu pre-z / Architecture omezeny také na 31bitové adresování. Toto omezení zmizelo u 64bitového hardwaru, 64bitového systému Linux v systému IBM Z a 64bitových aplikací pro Linux. Na 64bitových linuxových distribucích stále běží 32bitové datové / 31bitové adresovací programy. 31bitové adresování IBM umožňuje 31bitovému kódu využívat další paměť. V každém okamžiku jsou však v každém pracovním prostoru adres maximálně 2 GB. U 64bitového systému Linux na procesorech s 31bitovým adresováním je možné přiřadit paměť nad 2 GB lištu jako disk RAM. Podpora 31bitového linuxového jádra (nikoli uživatelského prostoru) byla ve verzi 4.1 odstraněna.

Ruby & Smalltalk

Tlumočníci jazyků Ruby a Smalltalk používají nejnižší bit k určení, zda je hodnota celé číslo bez rámečku. To znamená, že na 32bitových počítačích (nebo 16bitových počítačích s 32bitovými ukazateli) jsou 31bitová celá čísla unboxed. V případě přetečení se výsledek vejde do objektu v rámečku, což znamená, že musí být přidělen a odstraněn. Pokud tedy máte 32bitové hodnoty, které se nevejdou do 31bitového podepsaného formátu, budou v těchto tlumočnících velmi neefektivní. Totéž platí pro 63bitová celá čísla bez rámečku na 64bitových počítačích. Podobné návrhy lze nalézt v LISP a v některých dalších jazycích, jejichž proměnné mohou nabývat hodnot jakéhokoli typu. V některých případech existovala hardwarová podpora pro tento druh designu: viz Označená architektura a stroj Lisp .

Reference