IBM/370

Modell 125
Ankündigung: 1970

Das im Jahre 1970 angekündigte System /370 Modell 125 ist die kleinste Maschine einer neuen Generation von kompatiblen Rechnern, die der neuen System/370 Architektur folgen.
Diese neue Architektur ist die Erweiterung des Systems/360 und besteht im Wesentlichen aus der Beseitigung der physikalischen Grenze des Hauptspeichers. Konnte früher ein Programm nur dann ausgeführt werden, wenn es vollständig im Speicher geladen war, so kann in der System/370 Architektur ein Programm auch dann ausgeführt werden, wenn es nicht vollständig in den Speicher hinein passt.

Es können in der neuen Architektur Programme von bis zu 16-Megabyte Größe ausgeführt werden, und zwar unabhängig von der Größe des tatsächlich in der Maschine eingebauten Hauptspeichers.
Ein bis zu 16-Megabyte großes Programm wird in der neuen Architektur grundsätzlich auf einem Magnetplattenspeicher abgelegt und von dort stückweise in den realen Speicher des Prozessors nachgeladen. Dies geschieht automatisch sobald das vorangegangene Programmstück abgearbeitet worden ist.

Die logische Einbeziehung eines Plattenspeichers in den Hauptspeicher wirkt somit als Speichererweiterung. Man nennt den gesamten zur Verfügung stehenden Speicherraum den „virtuellen Speicher“.

Die System/370 Architektur beschreibt das Verfahren, mit dem die Programmteile auf die Platte gespeichert werden und die Methode, mit welcher sie bei Bedarf in den Hauptspeicher nachgeladen werden. Dieses Konzept ist einheitlich für alle System/370 Maschinen und so gestaltet, dass fortan ein oder mehrere virtuelle Speicher von jeweils 16 Millionen Bytes Größe angelegt werden können, unabhängig von der technischen Realisierung oder der Leistungsfähigkeit des einzelnen Maschinenmodells.

Passend zu diesem Konzept wurden mehrere neue Instruktionen eingeführt, mit denen bis zu 16 Megabyte große Datenfelder gehandhabt werden können. Auch die Kanäle wurden durch das Blockmultiplexverfahren leistungsfähiger gemacht.

Das Multi-Prozessorenkonzept

Um das System/370 Modell 125 möglichst kostengünstig zu gestalten, wurde ein modulares Konzept entworfen, das heißt, dass einem Hauptprozessor mehrere Unterprozessoren für die Daten-Ein/Ausgabe zugeordnet werden konnten, je nach den Anforderungen des Kunden.

Diese Ein/Ausgabeprozessoren bildeten jeweils eine kostengünstige Kombination aus Kanal und Steuereinheit für ein ganz bestimmtes Ein-Ausgabegerät.
So konnte beispielsweise ein Kommunikationsprozessor, der zehn Fernmeldeleitungen betreiben konnte, bestellt werden. Verzichtete der Kunde auf diese Ausrüstung, dann fehlte dieser Prozessor in der Maschine.

Solche Ein/Ausgabe Prozessoren wurden für die wichtigsten Geräte, wie die Magnetplatten, den Schnelldrucker, die Magnetbandeinheiten, oder die Multifunkstionskartenmaschine angeboten.
Auch ein Bytemultiplexerkanal wurde durch einen solchen Ein/Ausgabeprozessor zur Verfügung gestellt. Dieser konnte Daten auch im Blockmultiplexverfahren übertragen.
Die Hardware dieser Ein/Ausgabeprozessoren war für alle identisch. Individuell verschieden war jeweils nur das steuernde Mikroprogramm in seinem Speicher und die Schnittstelle zum Ein/Ausgabegerät.
Abbildung 1 zeigt, wie diese Ein/Ausgabeprozessoren über eine ringförmig verlaufende Sammelschiene mit dem Hauptspeicher verbunden sind. Der Datentransport über diese Sammelschiene verlief immer nur in einer Richtung, nämlich vom Speicher zu den Ein/Ausgabeprozessoren, oder von diesen zum Speicher zurück. Siehe „Generelles Arbeitsschema“ für weitere Details. Datenablauf 3125

Abbildung 1: Vereinfachter Datenfluß



Der Hauptprozessor

Der Hauptprozessor besteht aus einem eigenen Arbeitsspeicher, der erstmals aus Feldeffekttransistoren aufgebaut ist, und aus der Arithmetik/Logikeinheit mit den Operandenregistern, sowie aus mehreren Registersätzen.
Drunter ist auch ein Verschieberegister, sowie die 16 allgemeinen Register und die Gleitkommaregister.
Der Hauptprozessor führt die etwa 200 verschiedenen Makroinstruktionen aus, die in der System/370 Architektur definiert sind.
Die Ausführung dieser Instruktionen geschieht durch die Hardware des Prozessors, gesteuert durch ein Mikroprogramm, das in seinem Speicher enthalten ist. Ein Taktgeber, der Arbeitszyklen von 750 Nanosekunden Dauer zur Verfügung stellt, bestimmt das ganze Geschehen.
Der Hauptprozessor hat eine Datenflussbreite von zwei Bytes, das heißt, dass immer zwei Bytes in 750 Nanosekunden parallel vom Hauptspeicher geholt, und die Resultate ebenfalls als zwei Byte breite Datensätze in 750 Nanosekunden zurückgespeichert werden. Dies geschieht über eine eigene Datenverbindung zum Speichersteuergerät.

Die Ein/Ausgabeprozessoren

Die Ein/Ausgabeprozessoren bestehen aus dem eigentlichen Prozessorteil, das für alle Unterprozessoren identisch ist, und einem individuell gestalteten Schnittstellenteil, welches das spezifische Ein-Ausgabegerät bedient oder den Kanal darstellt.
Der Prozessorteil besteht aus einem Speicher, einer Arithmetik/Logikeinheit und einem Registersatz.
Jeder Ein/Ausgabeprozessor hat seinen eigenen Taktgeber und kann bis zu drei unabhängige Mikroprogramme mittels eines Zeitmultiplex Verfahrens quasi gleichzeitig ausführen.
Dazu wird jedem Programm turnusgemäß eine bestimmte Anzahl von Arbeitszyklen zugeteilt. Dieses Zeitschema konnte für bestimmte Sonderfälle durch ein Signal von außen geändert werden.
Jeder Ein/Ausgabeprozessor ist seriell in die ringförmig verlaufende Sammelschiene eingegliedert,so dass er an seinem Eingang Daten empfangen und an seinem Ausgang Daten senden kann.
Dazu hat jeder Ein/Ausgabeprozessor eine eigene Signalleitung zum Hauptspeichersteuergerät, um eine Zutrittsanforderung anmelden zu können.
Desgleichen hat jeder E/A-Prozessor eine eigene Signalleitung zum Hauptprozessor, um eine Programm Unterbrechung verlangen zu können.

Der Servicerechner

Erstmals in der Geschichte der Prozessorenentwicklung wurde im Modell S/370-125 ein eigener Prozessor für die Initialisierung und Wartung des gesamten Systems vorgesehen.
Dieser Prozessor hat im Wesentlichen vier Aufgaben, nämlich:

  • Das Laden aller Mikroprogramme,
  • Das Betreiben der Bedienerkonsole,
  • Die periodische Systemüberwachung,
  • Die Erstellung eines Logs im Fehlerfall
  • Der Servicerechner besteht aus einem kleinen Festspeicher, einem eigenen Arbeitsspeicher, einer Arithmetik/Logikeinheit sowie einem Registersatz und einem Taktgeber.
    Außerdem enthält er die Hardware zum betreiben des Diskettenlaufwerks und der neuartigen Bildschirmkonsole.
    Die Datenflussbreite beträgt 1 Byte.
    Der Festspeicher enthält ein kleines Starterprogramm, das die Voraussetzungen zum Laden des eigenen Mikrocodes schafft. Sobald das eigene Mikroprogramm in seinen Arbeitsspeicher geladen ist, wird es wirksam und lädt die Mikroprogramme für alle anderen Prozessoren im System. Dies geschieht über die eigene Sammelschiene des Servicerechners, die ihn ringförmig mit allen anderen Prozessoren verbindet.

    Sämtliche Mikroprogramme sind auf einer 8-Zoll Diskette gespeichert, von welcher sie Instruktion für Instruktion geholt werden.
    Nach dem Speichern einer Instruktion in den jeweiligen Zielprozessor, wird die selbe Instruktion wieder ausgelesen und auf Richtigkeit überprüft.
    Falls ein Paritätsfehler festgestellt wird, invertiert der Servicerechner die Instruktion, markiert sie mit einer Fehlerflagge und speichert sie so zurück.
    Wenn der Zielprozessor im Verlauf seiner Programmausführung eine als fehlerhaft gekennzeichnete Instruktion aus seinem Speicher holt, invertiert er sie erneut und korrigiert somit den Fehler.
    Die Grundidee dahinter ist die Ausnutzung des permanent fehlerhaften Zustandes einer Bitzelle als den guten Zustand. Sobald alle Prozessoren im System mit Mikrocode geladen sind, übernimmt der Servicerechner den Betrieb der Bedienerkonsole indem er auf dem Bildschirm die schriftliche Aufforderung zum Laden des Betriebssystems zeigt.
    Solche Aufforderungen sind Teil des Dialogs mit dem Bediener.
    Der Bildschirm stellte eine bedeutende Verbesserung der Bedienbarkeit des Systems dar.
    Die Dialoge wurden in allen Europäischen Sprachen angeboten.
    Während der Ausführung der Anwendungsprogramme im Hauptprozessor prüft der Servicerechner periodisch den Taktgeber eines jeden anderen Prozessors im System. Sobald irgend ein Fehler in einem Prozessor auftritt, stoppt dieser seinen Taktgeber und fixiert somit den Fehlerzustand. Außerdem signalisiert er diesen Vorfall dem Servicerechner über die eigene Signalleitung.
    Der Servicerechner holte daraufhin die relevanten Daten aus dem gestörten Prozessor, analysiert sie und schreibt einen Log auf die Diskette. Dies erleichtert eine spätere Reparatur.

    Das Speichersteuergerät

    Der bis zu 500 Kilobyte große Hauptspeicher des S/370-Model 125 besteht, wie alle anderen Speicher in der Maschine, erstmals aus Feldeffekt-Transistoren, die im deutschen IBM-Labor in Böblingen entwickelt wurden. Der Hauptspeicher wird von einem reinen Hardware-Steuergerät verwaltet.. Verwalten bedeutet hier die Speicherung oder Herausgabe von „Seiten“, das heißt, von zusammenhängenden Datensätzen von entweder 2 oder 4 Kilobytes Größe, je nach dem verwendeten Betriebssystem. Das DOS/VS verwendet das 2K-Format als Seitengröße, das OS/VS benutz das 4K-Format. Solche Seiten bilden die Grundlage des virtuellen Speicherkonzepts. Die Seiten sind nummeriert und können somit identifiziert und zwischen Plattenspeicher und Hauptspeicher ausgetauscht werden.

    Das Speichersteuergerät besteht im Wesentlichen aus mehreren Adressregistern, dem Schutzschlüsselspeicher, einer Prioritätslogik, einem Assoziativspeicher, und einer Arithmetik zum Fortschreiben von Adressen.

    Jeder im System eingebaute Prozessor hat zwei eigene Adressregister im Hauptspeichersteuergerät zugeordnet, eines zum Lesen, das andere zum Schreiben. Wenn beispielsweise der Hauptprozessor Zutritt zum Hauptspeicher verlangt, wird entweder die Lese- der die Schreibadresse, die zuvor ins entsprechende Register gesetzt wurde, verwendet.

    Diese Adresse ist prinzipiell eine logische , das heißt, eine Adresse innerhalb des 16-Megabyte großen virtuellen Speicherraums. Sie muss daher in eine reale Adresse übersetzt werden, die sich auf einen echten Speicherplatz bezieht. Das Betriebssystem, das in einem geschützten Teil des Speichers sitzt, hat den gesamten virtuellen Speicherraum in Segmente und Seiten aufgeteilt und deren Adressen in speziellen Tabellen festgehalten. In diesen Tabellen ist jeder Seite außer ihrer logischen auch eine reale Adresse zugeordnet. Die Tabellen sitzen ebenfalls im geschützten Teil des Speichers. Beim Programmladen holt das Betriebssystem so viele Seiten vom Plattenspeicher in den realen Speicher, wie hinein passen und kopiert deren logische und reale Adressen in den Assoziativspeicher des Steuergeräts. Dies geschieht, damit der Hauptprozessor nicht bei jedem Speicherzugriff zuvor auf die Tabellen referieren muss.

    Das Modell 125 hält bis zu 15 übersetzte Adressen in seinem Assoziativspeicher vorrätig. Jede dieser Adressen gilt für eine 2K oder 4K große Seite. Solange sich das Programm innerhalb des übersetzten Adressraumes aufhält, ist keine weitere Übersetzung nötig. Der Hauptprozessor kann daher eine zeitlang selbständig arbeiten, ohne sich an das Betriebssystem wenden zu müssen.

    Der Assoziativspeicher besteht aus 15 Registern für logische Adressen, denen jeweils 15 Register mit physikalischen (realen) Adressen zugeordnet sind, genau wie in den Tabellen des Betriebsystems. Man spricht daher auch von einer Schattentabelle. Bei jeder Zutrittsanforderung wird die Adresse, mit welcher der Zutritt begehrt wird, gleichzeitig mit den 15 logischen Adressen im Assoziativspeicher verglichen. Bei einem Treffer wird die mit dieser Adresse assoziierte physikalische Adresse aus dem Realregister ausgelesen und damit der Zutritt zum Hauptspeicher getätigt.

    Wird kein Treffer erzielt, weil die Seite und somit deren Adresseintrag fehlt, dann löst das Speichersteuergerät eine Unterbrechung im Hauptprozessor aus, der auf diese Weise aufgefordert wird, über das Betriebssystem die nächsten Seiten vom Plattenspeicher zu holen. Die neuen Seiten nehmen die Plätze früherer Seiten im Hauptspeicher ein. Dabei werden alle bisher unberührten Seitenplätze im Hauptspeicher mit neuen Daten überschrieben und sowohl ihre logischen, wie auch ihre realen Adressen in die Register des Assoziativspeichers eingetragen. Veränderte Seiten werden auf den Plattenspeicher zurück geschrieben, bevor deren Plätze ebenfalls eingenommen werden. Man nennt diesen Vorgang „dynamische Adressübersetzung“.

    Erst nach einem solchen Seitenaustausch wird der Zutritt zum Hauptspeicher mit der selben logischen Adresse wiederholt, mit welcher der Erstversuch gescheitert ist. Diesmal erfolgt der Zutritt, weil nun der logischen eine physikalische Adresse zugeordnet ist, die den Speicherplatz kennzeichnet, auf dem die hereingeholte Seite tatsächlich sitzt.

    Während der Ausführung des beantragten Schreib-oder Lesevorgangs wird vom Steuergerät die physikalische Adresse um die Anzahl der entnommenen oder eingespeicherten Bytes erhöht oder reduziert. Somit kann der Hauptprozessor kontinuierlich arbeiten, ohne sich um die Adressen kümmern zu müssen.. Für E/A-Prozessoren müssen sämtliche benötigten Seiten zuvor herein kopiert worden sein, da für sie eine dynamische Übersetzung aus Zeitgründen nicht infrage kommt. Bei jedem Zutritt prüft das Steuergerät die Zutrittsberechtigung, und zwar indem der Schutzschlüssel für diesen Bereich aus dem Schutzschlüsselspeicher ausgelesen und mit dem mitgelieferten verglichen wird. Zutritt erfolgt nur bei Übereinstimmung. Bei Nichtübereinstimmung veranlasst das Steuergerät im Hauptprozessor eine Programmunterbrechung, um diesen Regelverstoß anzuzeigen.

    Beim Schreiben in den Hauptspeicher generiert das Steuergerät gleichzeitig die Symptom-Bits, welche die Grundlage für die automatischen Fehlerkorrektur beim Auslesen bilden. Dies geschieht nach dem Hamming-Code Verfahren . Dazu wird das zu speichernde Halbwort (2 Bytes) einer Exklusiv-Oderung unterzogen und somit eine X/Y-Matrix erzeugt, die im Fehlerfall das falsche Bit identifiziert. Die Daten für diese Matrix (die Symptom-Bits)werden beim Schreiben in den Hauptspeicher mitgespeichert.

    Außerdem wird beim Schreiben ein Bit für die betreffende Seite gesetzt, das die neuen Daten als „geändert“ kennzeichnet. Diese Kennzeichnung sorgt dafür, dass bei einem späteren Seitenaustausch die geänderte Seite auf den Plattenspeicher zurück geschrieben wird, bevor deren Platz im Hauptspeicher neu belegt werden kann.

    Beim Lesen aus dem Hauptspeicher werden die Symptom-Bits mit ausgelesen, die beim Einspeichern erstellt worden sind. Sollte ein beliebiger Einzelbitfehler in dem ausgelesenen Halbwort entdeckt werden, so wird er ohne Zeitverlust durch die Symptom-Bits korrigiert.

    Wenn mehrere Prozessoren über ihre Signalleitungen gleichzeitig Zutritt zum Hauptspeicher anmelden, dann entscheidet ein Prioritätsnetzwerk, welcher Prozessor den Zutritt bekommt. Die Priorität richtet sich nach der Systemkonfiguration. Der E/A-Prozessor mit der höchsten Echtzeitanforderung (der höchsten Datenrate) hat die höchste Priorität. Der Hauptprozessor hat immer die niedrigste Priorität.

    Generelles Arbeitsschema

    Sämtliche Prozessoren arbeiten asynchron, das heißt, selbständig, aber unter der logischen Kontrolle des Hauptprozessors . Der Hauptprozessor holt kontinuierlich Instruktionen aus dem Hauptspeicher, beginnend mit der Adresse, die durch den Ladevorgang in das Programmstatuswort gesetzt worden ist. Das erste Byte einer Instruktion bestimmt , was genau gemacht werden soll . Abhängig davon werden die in der Instruktion angegebenen Operanden aus dem Speicher geholt, sie werden arithmetisch/logisch verarbeitet und das Resultat wird zurückgespeichert. Dabei wird ein Bedingungsschlüssel erstellt, der eine Verzweigung ermöglicht, wenn eine bestimmte Bedingung erfüllt ist. Sobald eine Instruktion verarbeitet worden ist, wird die nächste aus dem Hauptspeicher geholt. Während der Instruktionsverarbeitung ruhen alle Ein/Ausgabeprozessoren.

    Wenn der Hauptprozessor im Verlauf der Instruktionsverarbeitung auf eine nicht vorhandene Seite zugreifen will, signalisiert das Speichersteuergerät dem Hauptprozessor eine Programmunterbrechung, um neue Seiten in den Speicher zu holen. Diese Programmunterbrechung ist eine Verzweigung zu der Betriebssystemroutine, die die dynamische Adressübersetzung veranlasst, das heißt, neue Seiten vom Plattenspeicher holt. Nach dem dies geschehen ist, wird die Instruktionsverarbeitung fortgesetzt.

    Sobald im Strom der Instruktionen ein „Start Ein/Ausgabe“ Befehl entdeckt wird, stoppt der Hauptprozessor seine Tätigkeit und benachrichtigt über eine direkte Signalleitung den betreffenden E/A-Prozessor, der die Daten Ein-oder Ausgabeoperation ausführen soll. Dieser E/A-Prozessor wird durch die Kanaladresse definiert. Die Benachrichtigung durch den Hauptprozessor veranlasst den E/A-Prozessor dazu, sich den Ein/Ausgabe Befehl zu holen, der im Kanaladresswort angegeben ist..

    Der Ein/Ausgabebefehl enthält die zu verwendende Speicheradresse, bestimmt die Transferrichtung (Schreiben oder Lesen), die Menge der zu übertragenden Daten, und die Reihenfolge in welcher die Datenbytes aus dem Speicher gelesen oder in den Speicher geschrieben werden sollen. Dies kann in aufsteigender oder absteigender Adressfolge geschehen. Dazu stellt der E/A-Prozessor die Anfangsadresse in sein Schreib-oder Leseregister im Speichersteuergerät und verlangt über seine eigene Signalleitung Zutritt zum Hauptspeicher.

    Das Speichersteuergerät holt bei einem Lesevorgang die Daten aus dem Speicher (sofern der Schutzschlüssel das zulässt) und signalisiert dem E/A-Prozessor, wann er die Daten auf der Empfangsseite der Sammelschiene abholen kann.
    Bei einer Schreiboperation akzeptiert das Steuergerät die auf der Sendseite der Sammelschiene angebotenen Daten, speichert sie und signalisiert dem E/A-Prozessor wann er die nächsten Daten anbieten kann.. Auf diese Weise wird die Datenübertragung zwischen E/A-Prozessor und Hauptspeicher synchronisiert.
    Nach jeder Übertragung erhöht oder reduziert das Steuergerät die Adresse für den nächsten Übertragungsvorgang. Sobald alle Bytes einer Ein/Ausgabeoperation übertragen worden sind, holt sich der E/A-Prozessor bei Befehlsverkettung den nächsten Ein/Ausgabebefehl aus dem Hauptspeicher.
    Wenn keine Befehlsverkettung vorliegt, beantragt der E/A-Prozessor über seine Signalleitung beim Hauptprozessor eine Programmunterbrechung, um die Vollendung der Datenübertragung anzuzeigen. Dadurch wird die Instruktionsverarbeitung im Hauptprozessor, die während der Datenübertragung geruht hat, wieder fortgesetzt.

    Während all dieser Vorgänge überwacht der Servicerechner kontinuierlich das ganze System und fertigt im Fehlerfall einen Log, der die Beseitigung des Fehlers ermöglicht.


    ZURÜCK

    Rolf.Ziegler.