31-Bit-Computing - 31-bit computing

In der Computerarchitektur sind 31-Bit- Ganzzahlen , Speicheradressen oder andere Dateneinheiten diejenigen, die 31 Bit breit sind.

1983 führte IBM die 31-Bit-Adressierung in der System/370- XA- Mainframe- Architektur als Upgrade auf die physische und virtuelle 24-Bit- Adressierung und die vorübergehende 24-Bit-virtuelle/ 26-Bit- physikalische Adressierung früherer Modelle ein. Diese Verbesserung ermöglichte es, die Adressräume 128-mal größer zu machen, was es Programmen ermöglichte, Speicher über 16 MB zu adressieren  (als "oberhalb der Zeile" bezeichnet). Unterstützung für COBOL , FORTRAN und später auf Linux/390 war enthalten.

In den frühen 1980er Jahren wurde das Motorola 68012 eingeführt; es hatte 32-Bit-Daten- und Adressregister, wie es das Motorola 68010 tat, aber anstatt die unteren 24 Bits einer Adresse an den Adresspins bereitzustellen, lieferte es alle bis auf Bit 30 an den Adresspins.

31-Bit-IBM-Mainframes

Die Architektur

Im System/360 , anders als bei 360/67 und frühen System/370- Architekturen, waren die Universalregister 32 Bit breit, die Maschine führte 32-Bit-Rechenoperationen aus und Adressen wurden immer in 32-Bit-Wörtern gespeichert die Architektur wurde als 32-Bit- Architektur angesehen , aber die Maschinen ignorierten die oberen 8 Bits der Adresse, was zu einer 24-Bit-Adressierung führte. Bei der XA-Erweiterung wurde nur das höherwertige Bit (Bit 0) im Wort bei der Adressierung ignoriert. Eine Ausnahme ist, dass Mode-Switching-Befehle auch Bit 0 verwenden. Es gab mindestens zwei Gründe, warum IBM die 32-Bit-Adressierung des 360/67 . nicht implementiert hat

  1. Die Schleifensteuerbefehle BXH und BXLE führten Vergleiche mit Vorzeichen durch .
  2. Ein Großteil der existierenden Software verwendet Bit 0 als Listenende-Anzeige.

Überleitung

Der Übergang war knifflig: Assembler-Programmierer, darunter auch IBMs eigene Betriebssystem-Architekten und -Entwickler, nutzten seit fast zwanzig Jahren das freie Byte am Anfang von Adressen für Flags. IBM entschied sich, zwei Adressierungsformen bereitzustellen, um die Probleme zu minimieren: Wenn das höchstwertige Bit (Bit 0) einer 32-Bit-Adresse eingeschaltet war, wurden die nächsten 31 Bits als virtuelle Adresse interpretiert. Wenn das höchstwertige Bit ausgeschaltet war, wurden nur die unteren 24 Bits als virtuelle Adresse behandelt (genau wie bei Pre-XA-Systemen). Somit könnten Programme weiterhin die sieben niederwertigen Bits des obersten Bytes für andere Zwecke verwenden, solange sie das oberste Bit ausgelassen haben. Die einzigen Programme, die eine Modifikation erforderten, waren diejenigen, die das oberste (ganz links) Bit eines Wortes setzen, das eine Adresse enthält. Dies betraf auch Adressvergleiche: Das ganz linke Bit eines Wortes wird auch als Vorzeichen-Bit in der 2er-Komplement-Arithmetik interpretiert und zeigt eine negative Zahl an, wenn Bit 0 eingeschaltet ist. Programme, die vorzeichenbehaftete arithmetische Vergleichsanweisungen verwenden, können umgekehrte Ergebnisse erhalten. Zwei äquivalente Adressen könnten als ungleich verglichen werden, wenn eine von ihnen das Vorzeichenbit eingeschaltet hätte, selbst wenn die restlichen Bits identisch wären. Das meiste davon war für Programmierer, die Hochsprachen wie COBOL oder FORTRAN verwendeten , unsichtbar , und IBM unterstützte eine Zeitlang den Übergang mit Dual-Mode-Hardware.

Bestimmte Maschinenbefehle in diesem 31-Bit-Adressierungsmodus ändern das Adressierungsmodus-Bit als möglicherweise beabsichtigten Nebeneffekt. Zum Beispiel speichern die ursprünglichen Unterprogramm-Aufrufbefehle BAL, Branch and Link und ihr Register-Register-Äquivalent BALR, Branch and Link Register bestimmte Statusinformationen, den Befehlslängencode, den Bedingungscode und die Programmmaske im obersten Byte der Rücksendeadresse. Ein BAS-, Branch- und Save-Befehl wurde hinzugefügt, um 31-Bit-Rückkehradressen zu ermöglichen. BAS und sein Register-Register-Äquivalent, BASR, Branch and Save Register, waren Teil des Befehlssatzes des System/360-Modells 67 , das das einzige System/360- Modell war, das Adressen länger als 24 Bit zuließ. Diese Befehle wurden beibehalten, aber für die 31-Bit-Adressierung modifiziert und erweitert.

Zusätzliche Befehle zur Unterstützung der 24/31-Bit-Adressierung umfassen zwei neue Register-Register-Aufruf/Rückkehr-Befehle, die auch eine Änderung des Adressierungsmodus bewirken (z. B. Branch and Save and Set Mode, BASSM, die 24/31-Bit-Version eines Aufrufs, bei dem die Linkage-Adresse einschließlich des Modus wird gespeichert und eine Verzweigung wird zu einer Adresse in einem möglicherweise anderen Modus durchgeführt, und BSM, Branch and Set Mode, die 24/31-Bit-Version einer Rückkehr, bei der die Rückkehr direkt auf die zuvor gespeicherte Linkage-Adresse erfolgt und im vorherigen Modus). Zusammengenommen erlauben BASSM und BSM 24-Bit-Aufrufe auf 31-Bit (und Rückkehr zu 24-Bit), 31-Bit-Aufrufe auf 24-Bit (und Rückkehr auf 31-Bit), 24-Bit-Aufrufe auf 24-Bit ( und Rückkehr zu 24-Bit) und 31-Bit-Aufrufe zu 31-Bit (und Rückkehr zu 31-Bit).

Wie BALR 14,15 (die reine 24-Bit-Form eines Aufrufs) wird BASSM als BASSM 14,15 verwendet, wobei die Verknüpfungsadresse und der Modus in Register 14 gespeichert werden und eine Verzweigung zu der Unterprogrammadresse und dem Modus erfolgt in Register 15 angegeben. Ähnlich wie BCR 15,14 (die 24-Bit-only-Form einer unbedingten Rückkehr) wird BSM als BSM 0,14 verwendet, wobei 0 anzeigt, dass der aktuelle Modus nicht gespeichert wird (das Programm verlässt) das Unterprogramm, sowieso), und eine Rückkehr zum Aufrufer an der in Register 14 angegebenen Adresse und Betriebsart ist vorzunehmen. Ausführliche Beispiele für die Verwendung von BAS, BASR, BASSM und BSM finden Sie insbesondere in der IBM Publikation MVS/Extended Architecture System Programming Library: 31-Bit Addressing, GC28-1158-1, S. 29–30.

370/ESA-Architektur

In den 1990er Jahren führte IBM die 370/ESA-Architektur (später 390/ESA und schließlich ESA/390 oder System/390, kurz S/390) ein, die die Entwicklung zur vollständigen virtuellen 31-Bit-Adressierung vollendete und dieses Adressierungsmodus-Flag beibehielt. Diese neueren Architekturen ermöglichen mehr als 2 GB physischen Speicher und ermöglichen mehrere gleichzeitige Adressräume mit einer Größe von jeweils bis zu 2 GB. Ab Mitte 2006 gab es zu viele Programme, die durch diesen mehrfachen 31-Bit-Adressierungsmodus unangemessen eingeschränkt waren.

z/Architektur

IBM durchbrach im Jahr 2000 mit der Einführung des ersten 64-Bit- z/Architecture- Systems, dem IBM zSeries Model 900 , die lineare Adressierungsbarriere von 2 GB ("die Stange") . Im Gegensatz zur XA-Umstellung reserviert z/Architecture kein Top-Bit um einen früheren Code zu identifizieren. z/Architecture behält die Kompatibilität mit 24-Bit- und 31-Bit-Code bei, sogar älterer Code läuft gleichzeitig mit neuerem 64-Bit-Code.

Linux/390

Da Linux/390 erstmals für die vorhandene 32-Bit-Daten-/31-Bit-Adressierungshardware im Jahr 1999 veröffentlicht wurde, sind auch anfängliche Mainframe-Linux-Anwendungen, die im Pre-z/Architecture-Modus kompiliert wurden, auf die 31-Bit-Adressierung beschränkt. Diese Einschränkung ist bei 64-Bit-Hardware, 64-Bit- Linux auf IBM Z und 64-Bit-Linux-Anwendungen verschwunden . Die 64-Bit-Linux-Distributionen führen immer noch 32-Bit-Daten-/31-Bit-Adressierungsprogramme aus. Die 31-Bit-Adressierung von IBM ermöglicht es dem 31-Bit-Code, zusätzlichen Speicher zu verwenden. Zu jedem Zeitpunkt befinden sich jedoch maximal 2 GB in jedem Arbeitsadressraum. Für Nicht-64-Bit-Linux auf Prozessoren mit 31-Bit-Adressierung ist es möglich, Speicher oberhalb der 2-GB-Bar als RAM-Disk zuzuweisen. Die Unterstützung des 31-Bit-Linux-Kernels (nicht des User-Space) wurde in Version 4.1 entfernt.

Rubin und Smalltalk

Interpreter für Ruby- und Smalltalk-Sprachen verwenden das niedrigste Bit, um festzustellen, ob ein Wert eine Ganzzahl ohne Box ist oder nicht. Dies bedeutet, dass auf 32-Bit-Computern (oder 16-Bit-Computern mit 32-Bit-Zeigern) 31-Bit-Ganzzahlen ausgepackt werden. Im Falle eines Überlaufs wird das Ergebnis in ein Boxed-Objekt gepasst, was bedeutet, dass es allokiert und im Garbage-Collection-Bereich gesammelt werden muss. Wenn Sie also 32-Bit-Werte haben, die nicht in das 31-Bit-Format mit Vorzeichen passen, sind sie in diesen Interpretern sehr ineffizient. Gleiches gilt für 63-Bit-Unboxed-Integer auf 64-Bit-Computern. Ähnliche Designs finden sich in LISP und einigen anderen Sprachen, deren Variablen Werte jeden Typs annehmen können. In einigen Fällen gab es Hardwareunterstützung für diese Art von Design: siehe Tagged-Architektur und Lisp-Maschine .

Verweise