IBM System /360 Architektur

Bis zum Jahre 1960 hatte die IBM sieben verschiedene Rechnerarchitekturen entwickelt.
Zwar haben sämtliche sieben IBM-Architekturen zum Bau sehr erfolgreicher Rechner geführt, nur konnten diese Rechner nicht mit einander kommunizieren und auch keine Daten austauschen. Das lag an der Unterschiedlichkeit der Datendarstellung, der Befehle, und der Arbeitsweisen der einzelnen Maschinen.

Da die Rechnerentwicklung immer schneller voran schritt, erkannte man bald, dass eine Vereinheitlichung der Arbeitsweisen und der Datencodierung für zukünftige Rechner erforderlich war. Dies führte zu einer der größten intellektuellen Anstrengungen in der Technikgeschichte. Denn man wagte es, einen einigermaßen zukunftssicheren Standard für sämtliche neu zu entwickelnde Rechner fest zu schreiben.
Eine Gruppe der fähigsten Ingenieure, Techniker, Programmiere und Mathematiker entwickelte in wochenlanger Arbeit Regeln, welche die Zweckbestimmung der zukünftigen Rechner, ihre logischen Funktionen, sowie die Datencodierung, unabhängig von der Größe oder Leistungsfähigkeit der einzelnen Rechnermodelle, beschrieben. Die technische Realisierung dieser Regeln war nicht vorgegeben, sie blieb den Ingenieuren überlassen.
Ein Beispiel für die Verwirklichung der System/360 Architektur ist unter System/ 360 Modell 20 beschrieben.

Die neuartige System/360 Architektur legte besonderen Wert auf:

Außerdem wurde die Steuerung der zukünftigen Rechner grundsätzlich von der früher üblichen manuellen Bedienung abgelöst und durch eine Steuerung ausschließlich durch Programme ersetzt. Dies war die Geburtsstunde der modernen Software, das heißt, der Betriebssysteme.

Datendarstellung

Um von den verschiedenen zuvor gebräuchlichen Codesystemen (fünf -Bit, sieben-Bit, BCD- Code, usw) weg zukommen, wurde als kleinste adressierbare Einheit ein Block von 9 Bits festgelegt. Diese 9 Bits wurden Byte genannt, wobei die einzelnen Bits im Byte zwecks Identifizierung grundsätzlich von links nach rechts (mit Null beginnend) nummeriert wurden, und zwar unabhängig von ihrer logischen oder numerischen Bedeutung.
Bit 0 war immer das Paritätsbit. Die verbleibenden 8 Datenbits ermöglichten nun den Aufbau einer Codetabelle mit 256 verschiedenen Bitmustern, die man den Extended Binary Coded Decimal Interchange Code (EBCDIC) nannte. Dies war die zukünftige Form der Datendarstellung, und in diesem Format sollten auch Daten von Rechner zu Rechner übertragen werden.
Der EBCDIC-Code ermöglichte nicht nur die Darstellung von Zahlen, sondern auch die Darstellung von alphabetischen Zeichen in den meisten Weltsprachen.

Das Byte konnte im so genannten gepackten Format zwei Ziffern darstellen oder im ungepackten Format ein alphabetisches Zeichen. Da vier Bits im gepackten Format die Ziffern von 0 bis 15 darstellen können, standen nun 16 Möglichkeiten zur Darstellung von Adressen auf hexadezimaler Basis zur Verfügung. Für die Darstellung von alphabetischen Zeichen stellten die linken vier Bits im Byte die "Zone", das heißt, die Y-Koordinate für die EBCDIC-Tabelle dar, die rechten vier Bits definierten die X-Koordinate. Auf diese Weise war jeder der 256 Codeplätze adressierbar.

Speicheradressierung

Die System/360 Architektur sah für den Speicherzugriff Adressen von maximal 24 Bits Länge vor, so dass bis zu 16 Megabytes adressiert werden konnten. Allerdings konnten einzelnen Maschinen, je nach ihrer GrÃöße, wesentlich kleinere Hauptspeicher haben. Grundsätzlich wurde der Speicher immer von links nach rechts, das heißt, von 0 aufsteigend bis zum jeweiligen Maximum adressiert.
Beim Überschreiten der Obergrenze kehrte die Adresse wieder zum Nullpunk zurück.

Schutzschlüssel

Um bestimmte Daten gegen Überschreiben schützen zu können, wurden 16 Schlüssel (4-Bit Nummern) vorgesehen, von denen die Nummer Null den Universalschlüssel darstellte.
Die Schutzschlüssel konnten beliebigen Speicherbereichen zugeteilt werden. Es wurde festgelegt, daß jeder Speicherzugriff mit einem mitgebrachten Schlüssel zu erfolgen hat und daß dieser Schlüssel mit dem Schlüssel des Speicherbereichs zu vergleichen ist, auf welchen zugegriffen werden soll.
Nur bei Übereinstimmung (oder mit Schlüssel Null) konnte der Zugriff erfolgen. Der Schutzschlüssel wurde Teil der Speicheradresse.

Relative Speicheradressierung

In früheren Architekturen waren die Adressen absolute Zahlen, die unmittelbar den physischen Speicherplatz definierten. Da jede Programm Änderung an beliebiger Stelle alle Nachfolgeadressen ungültig machte, erfand man eine Methode, mit der ganze Programmblöcke verschoben werden konnten, ohne die Struktur innerhalb eines solchen Blocks zu verändern.
Dazu wurde festgelegt, dass Adressen nur die Distanz von einem bestimmten Startpunkt an definierten und nicht den direkten Speicherplatz. Der Startpunkt wurde durch den Inhalt eines Registers (Basisregisters) bestimmt. Bei jedem Speicherzugriff wurde die in der Instruktion angegebene Adresse als Verschiebefaktor betrachtet und zum Inhalt eines Basisregisters addiert. Auf diese Weise wurde der Speicherplatz errechnet. Die Adressen in den Instruktionen bestanden daher aus zwei Teilen, der Adresse des zu benutzenden Basisregisters und dem Verschiebefaktor.
Um ein Programm als Ganzes zu verschieben, brauchte nur das Basisregister neu geladen zu werden.

Instruktionsformate

Grundsätzlich unterschied die System/360 Architektur zwischen Instruktionen und Ein-Ausgabebefehlen.
Instruktionen bestimmten die arithmetisch/logischen Aufgaben, die der Rechner auszuführen hatte. Sie waren 2, 4 oder 6 Bytes lang. Sie wurden in der Regel sequentiell ausgeführt.
Die Befehle hingegen bestimmten einzig den Datentransfer zwischen dem Speicher und den Ein-/Ausgabegeräten (siehe Standardschnittstelle). Da sowohl die Instruktionen wie auch die Ein-/Ausgabebefehle Zutritt zum Hauptspeicher beanspruchten, musste das Programm immer zugunsten der Ein-/Ausgabe Operationen unterbrochen werden. Diese Programmunterbrechung und die spätere Wiederfortführung war durch die Architektur hierarchisch geregelt.

Die Instruktionen für alle künftige Maschinen wurden grundsätzlich in vier Funktionskategorien gruppiert.
Man unterschied:

Alle Instruktionen hatten einen einheitlichen Aufbau. Das erste Byte war immer der Operationsschlüssel, der angibt, was zu tun ist. Die Operandenadressen bestanden aus der Basisregisteradresse und dem Verschiebefaktor. Die Datenfelder gab es mit fester und mit variabler Länge. Für variable Felder wurde eine Längenangabe in der Instruktion vorgesehen.
Es wurden insgesamt etwa 120 Instruktionen definiert, die für jede Maschine Pflicht waren, außer den Instruktionen für die Gleitkommaarithmetik. Die letztere war für technisch-wissenschaftlich orientierte Maschinen vorgesehen und galt als Zusatzeinrichtung. Für die Gleitkommadarstellung wurden zwei unterschiedliche Formate, nämlich eines für normale Genauigkeit und eines für erhöhte Genauigkeit definiert. Der Unterschied lag in der Größe der Mantisse.

Allgemeine Register

Für die Zwecke der Adressierung und andere logischer Aufgaben wurde ein Satz von 16 allgemein zugänglichen Registern definiert, die als Arbeitsspeicher fungierten. Sie waren 24 Bits breit ausgelegt. Mittels dieser Register wurden Adressen errechnet oder indiziert, logische Operationen, wie AND, OR, EXOR oder ADD durchgeführt, oder sie dienten zur temporären Speicherung irgend welcher Faktoren. Die allgemeinen Register waren nicht Bestandteil des Hauptspeichers.

Interne Steuerungsfelder

Zur Steuerung der Rechner wurde grundsätzlich von der früher üblichen manuellen Beeinflussung mittels Schalter und Bedienungspersonal auf fast ausschließliche Steuerung durch Programme gesetzt. Dies ist eines der wichtigsten Wesensmerkmale der System/360 Architektur, denn es verlangte nach einem zentralen Steuerungsprogramm, einem so genannten Operatingsystem.

Die zukünftigen Rechner konnten durch Hardware nur insoweit gesteuert werden, dass die erste Instruktion eines Programms geladen wurde. Alle nachfolgenden Schritte waren Sache der Software. Daher war die erste, durch Hardware geladene Instruktion, immer eine Verzweigung zum Anfang des jeweiligen Programms.

Um die zukünftigen Rechner mittels Software steuern zu können, wurden bestimmte Felder im Hauptspeicher auf genau definierten Plätzen festgelegt. Diese Plätze waren für jeden Rechner die gleichen.

Es wurden 16 so genannte Wörter definiert, die man pauschal die System-Area nannte.
Eines der wichtigsten Steuerungsorgane war das Programm Status Wort (PSW). Es enthielt immer die Adresse der nächsten auszuführenden Instruktion und war die Stelle, an die sich der Rechner periodisch wandte, um die nächste Aufgabe anzugehen.
Im PSW war unter anderem immer das Resultat jeder Operation in der Form eines Bedingungsschlüssels verzeichnet. Dieser Schlüssel ermöglichte es, von der sequentiellen Abarbeitung der Instruktionen abzuweichen, das heißt, damit konnte das Programm verzweigen, sofern die gestellte Bedingung erfüllt war.
Das PSW enthielt auch den Schutzschlüssel, mit dem auf den Hauptspeicher zugegriffen werden sollte.

Um eine Unterbrechung des gerade laufenden Programms und eine spätere Wiederfortführung zu ermöglichen, wurden in der System-Area Plätze für mehrere PSWs vorgesehen.
Eine Unterbrechung war beispielsweise immer dann notwendig, wenn Daten zwischen dem Hauptspeicher und den Ein-/Ausgabegeräten auszutauschen waren. Oder, wenn eine Ausnahmesituation (z.B. ein Fehler oder der Überlauf eines Resultats) Sondermaßnahmen erforderlich machte.
Zur Unterbrechung wurde das laufende PSW weggespeichert und ein bestimmtes neues PSW in die zentrale Steuerstelle eingesetzt. Der Unterbrechungsgrund wurde im alten PSW festgehalten. Zur Fortsetzung des unterbrochenen Programms wurde zum geeigneten spätern Zeitpunkt das frühere (alte) PSW wieder zurück getauscht.
Die Regeln für diesen Austausch wurden durch die System,/360 Architektur vorgeschrieben.

Die Standardschnittstelle

Die Standardschnittstelle diente zum Datentransfer zwischen dem Hauptspeicher und den angeschlossenen Maschinen. Um Geräte der unterschiedlichsten Bauart von den unterschiedlichsten Hersteller anschließen und betreiben zu können, definierte die System/360 Architektur die Standard-Schnittstelle. Sie bestand aus einem Satz von Kabeln mit genormten Steckverbindungen und einem einheitlichen Betriebsprotokoll. Man nannte diese Schnittstelle kurz den Kanal.

Es gab zwei Betriebsweisen für den Kanal, den Selektor-Betrieb und den Bytemultiplexer-Betrieb.
Im Selektor-Betrieb wurden die Daten einer ausgewählten Maschine immer in einem ununterbrochen Zug von Bytes mit hoher Geschwindigkeit übertragen.
Im Bytemultiplexer-Betrieb konnten mehrere Maschinen ausgewählt werden, die dann quasi-gleichzeitig Daten über das selbe Kabel übertrugen. Dies geschah durch die zeitliche Verzahnung der einzelnen Bytes von verschiedenen Maschinen mittels einer präzisen Zuteilungstechnik.
Ein Rechner konnte mit mehreren Kanälen ausgerüstet sein. Das Funktionsprinzip war bei beiden Betriebsarten ähnlich.

Physisch bestand der Kanal im Wesentliche aus zwei Datenübertragungskabeln, eines ausschließlich zum Senden und eines ausschließlich zum Empfangen von Daten.
Jedes dieser Kabel bestand aus 9 Koaxial-Adern, so dass ein Byte samt Paritätsbit parallel übertragen werden konnte.
Beiden Kabeln war jeweils ein eigenes Signalkabel zugeordnet, das die Bedeutung des Bytes auf dem Datenkabel anzeigte. Auf diese Weise wurde beispielsweise ein bestimmtes Bitmuster auf dem Sendekabel als Adresse definiert. In der Gegenrichtung konnte ein Bitmuster auf dem Empfangskabel beispielsweise als Datenbyte oder als Statusinformation definiert werden.
Den Ablauf einer Datenübertragung regelte ein von der Architektur präzise vorgegebenes Protokoll, das veröffentlicht wurde.

Übertragungsprotokoll

Der Kanal selbst hatte keinerlei Kenntnis über die Anzahl oder die Funktion der an ihm angeschlossenen Geräte. Theoretisch konnten bis zu 256 Geräte angeschlossen werden.
Um Geräte unbekannter Art dennoch betreiben zu können, benutzte der Kanal ein Ermittlungsverfahren, das Aufschluss über die Merkmale des angeschlossenen Geräts gab. Dieses Ermittlungsverfahren benutzte die Schnittstelle immer nur für kurze Zeit und gab sie dann sofort wieder frei.

Eine Datenübertragung wurde immer mit der Instruktion "Start Ein-/Ausgabe" eingeleitet. Diese Instruktion wandte sich an das Kanal-Adresswort, in welchem die Adresse des Ein-Ausgabegeräts eingetragen war, das arbeiten sollte. Das Kanal-Adresswort war die zentrale Stelle für jeglichen Datentransfer und hatte eine ähnliche Bedeutung für den Transfer wie das PSW für den Programmablauf.

Die im Kanal-Adresswort enthaltene Adresse wurde auf das Sendekabel gesetzt, wobei gleichzeitig auf dem zugehörigen Signalkabel "Adresse" signalisiert wurde. Dabei musste der Urheber eines Signals das Signal immer so lange aktiv halten, bis er eine Quittung vom Empfänger erhielt. Sobald die Quittung eingetroffen wart, wurde die Schnittstelle wieder freigegeben. Durch diese gegenseitige Signalverriegelung wurde erreicht, dass Geräte mit ganz verschiedenen Übertragungsgeschwindigkeiten am Kanal arbeiten konnten, denn jeder Übertragungsvorgang synchronisierte sich selbst.

Das Gerät, welches seine Adresse erkannt hatte, wartete nun auf das Suchsignal, welches der Kanal nach der Platzierung der Adresse aussandte. Sobald das Suchsignal bei dem gesuchten Gerät eingetroffen war, sandte dieses seine Adresse zum Kanal zurück. Der Kanal prüfte auf ÜÜbereinstimmung und sandte sodann einen Befehl an das Gerät. Das Gerät hatte nun zu prüfen, ob es den erhaltenen Befehl ausführen kann oder nicht, und musste das dem Kanal durch ein Statusbyte mitteilen.
Durch die gegenseitige Überprüfung der Gültigkeit der jeweiligen Angaben konnten Programmierfehler oder Funktionsstörungen erkannt werden. Danach wurde die Schnittselle wieder freigegeben.

Sollte der Befehl beispielsweise "Lesen" gewesen sein, hatte das Gerät Zeit, das Medium (Lochkarte , Magnetband, etc.) in die Lesestation zu transportieren, um ein Byte abzugeben.
Dazu muss das Gerät aber die Verbindung zum Kanal wieder herstellen. Deswegen signalisiert das Gerät eine Anforderung nach "Service". Der Kanal verlangte daraufhin die Adresse des Geräts, um die Übertragung zu identifizieren. Sobald sich das Gerät zu erkennen gegeben hatte, nahm der Kanal das angebotene Byte an und trennte danach wieder die Verbindung.

Dieses Spiel wiederholt sich auf dem Bytemultiplexer-Kanal für jedes einzelne Byte, und zwar so lange bis entweder der Kanal oder das Gerät das Ende der Übertragung erkannte. In umgekehrter Richtung, das heißt zum Schreiben von Daten, wurde genauso verfahren.
Das Übertragungsprotokoll wurde veröffentlicht, so dass jeder Hersteller eines Ein-Ausgabegeräts am Kanal anschließen konnte. Zur Umsetzung des Kanalprotokolls in die für seine Maschine spezifischen Befehle, musste der Entwickler eines Geräts allerdings eine entsprechende Steuereinheit schaffen.

Ein-Ausgabebefehle

Zur Datenübertragung wurden nur folgende vier Befehle definiert:

Diese vier Befehle wurden durch zwei Bits im Befehlsbyte definiert, so dass für den Hersteller eines Geräts genügend Spielraum für spezifische Anweisungen an sein Gerät zur Verfügung standen. Dieser Spielraum wurde bei IBM-Geräten dazu benutzt, um beispielsweise Druckern die Anweisung zum "Drucken mit Vorschub auf Zeile 5" zu geben. Oder einer Magnetbandeinheit konnte so eine bestimmte Schreibdichte verordnet werden.
Das Befehlsbyte war die einzige Information, die dem Ein-Ausgabegerät zur Verfügung gestellt wurde, alle anderen Details wurden im Kanal gespeichert und während der Übertragung abgearbeitet. Das betraf sowohl die Speicheradresse wie auch die Anzahl der Bytes, die zu Übertragen waren und die Übertragungsrichtung. Diese konnte mit aufsteigender oder absteigender Adressierung bestimmt werden, so dass auch Geräte mit umgekehrter Übertragungsrichtung am Kanal arbeiten konnten.

Befehlsverkettungen

Die Ein-/Ausgabebefehle konnten entweder einzeln gegeben, oder so miteinander verkettet werden, dass sie eine durchgehende Operation darstellten. Wurde ein Befehl einzeln verarbeitet, war die Operation immer dann beendet, wenn das letzte Byte des Längenfeldes übertragen war. Danach bekam das normale Programm wieder die Kontrolle über den Rechner, und zwar durch Zurücktauschen des alten Programmstatuswortes.

Waren mehrere Befehle verkettet, so wurde nach Übertragung es letzten Bytes eines Befehls unmittelbar der nächste Befehl aufgerufen, ohne dass das normale Programm dazwischen wieder die die Kontrolle bekommen hätte. Auf diese Weise konnte eine durchgehende Reihe von unterschiedlichen Befehlen kontinuierlich ausgeführt werden.

Außer der Befehlsverkettung wurde noch die Datenverkettung definiert. Sie sah vor, dass nach der Übertragung des letzten Bytes des ersten Befehls einer Kette, dieser Befehl weiterhin galt, aber für die Fortsetzung die Speicheradresse und die Längenangabe des nächsten Befehls benutzt wurde.
Das Befehlsbyte des nächsten Befehls und das aller restlichen Befehle in der Kette wurde ignoriert. Auf diese Weise konnten Datenblöcke in verschiedene Speicherbereiche verteilt, oder aus verschiedenen Bereichen abgeholt werden.

Schlussbemerkung

Da man die neue Architektur für so umfassend hielt, dass man glaubte, die gesamten 360 Grad des Erdkreises abdecken zu können, nannte man sie das System/360.
Aus heutiger Sicht ist festzustellen, dass sich diese Architektur bewährt hat und auch heute noch die Grundlage zur Weiterentwicklung des Computerwesens bildet.


 
 

Rolf Ziegler, 16. April, 2009.