#172 – Exploring the Mainframe – I

Vorwort: Uff – und ihr dachtet beim letzten Mal ging es technisch zur Sache! Eines ist mal klar – auch heute wird es erneut etwas „nerdy“. Schließlich tauchen wir in die grundsätzlichen Funktionen eines Großrechner-Betriebssystems ab! 😀

Bevor ihr jetzt den Browser-Tab sofort schließt – ich habe stets versucht Parallelen zu euch vielleicht bekannten Systemen und Konzepten zu ziehen. Vielleicht ist das Thema so für den ein oder anderen doch interessant und nicht völlig abgespaced! 😀

********

Beim letzten Mal haben wir uns ja erfolgreich einen eigenen kleinen (virtuellen) Großrechner auf einem USB-Stick gebaut. Echt cool! 😉

Hat sich der ganze Aufwand gelohnt? Was können wir denn jetzt eigentlich mit dem Mainframe machen? Um das zu erkunden müssen wir uns erst mal am System anmelden. Hierzu benötigen wir das „TSO“ (time sharing option) aus der zweiten wc3270-Session. Mit einem „logon ibmuser“ (so heißt der vordefinierter Benutzer) wird der Anmeldevorgang gestartet.

Fun Fact: Das TSO ist ein Kommandozeileninterpreter für IBM-Mainframe-Betriebssysteme. Ein „modernes“ Gegenstück hierzu ist z.B. die Eingabeaufforderung („CMD“) unter Windows. Ihr wisst schon, die schwarze Box in welche die ganzen IT-Spezialisten immer lustige Befehle eintippen! 😉

Anschließend muss noch das Passwort des Benutzers in einer weiteren Oberfläche eingegeben und die Eingabe bestätigt werden. Im Vergleich zu bekannten PC-Betriebssystemen muss als Eingabetaste auf dem Mainframe nicht „ENTER“, sondern die „Datenfreigabetaste“ gedrückt werden. In den meisten 3270-Emulatoren ist das die rechte Steuerungstaste – das muss man wissen! xD

Fun Fact: Dieser Umstand ist der Geschichte der 3270-Terminals, bzw. deren Tastaturen zu verdanken. Auf alten IBM-Terminal-Tastaturen ist die Eingabetaste noch mit DatFrGb oder DFG (für Datenfreigabetaste) beschriftet und unterhalb der rechten SHIFT-Taste (exakt dort, wo sich jetzt „STRG-Rechts“ befindet) angeordnet – am Ende ergibt alles einen Sinn…

Und siehe da – schon sind wir im „ISPF“ (Interactive System Productivity Facility) angekommen. Das ISPF ist eine Art grafische Oberfläche für TSO und quasi der „Desktop“ des Mainframes. Von hier aus lassen sich alle wichtigen Programme und Dateien ansteuern.

Fun Fact: Wow – fast so wie mit DOS und Windows! Ach ja, damals… 🙂

Die einzelnen Funktionen verstecken sich in einer Menüstruktur und können über Tastaturbefehle angesprungen werden. So kommt man z.B. über den Menüpunkt „6“ in eine Kommandozeile in welcher auch längere Befehle eingegeben werden können.

Fun Fact: Spätestens an dieser Stelle sollte jedem klar sein, dass der Großrechner kein „Multimedia-Betriebssystem“ ist, sondern eher ein professionelles Werkzeug zur Massendatenverarbeitung. Funktionen wie „MP3s abspielen“, „Videos ansehen“ oder gar einen „Internetbrowser“ sucht man hier vergebens! Was will man auch mit so modernem Schnickschnack? 😛

Unter der Auswahl „3“ findet man das „Utility-Menü“. Von hier aus lassen sich einige weitere Auswahlmöglichkeiten anspringen. Hauptsächlich wird dieser Bereich jedoch zur Dateiverwaltung verwendet. So können z.B. Dateien kopiert, miteinander verglichen, oder nach bestimmten Zeichenfolgen gesucht werden.

Fun Fact: Jeweils ein Menü zurück springt man übrigens mit einem Druck auf die „F3“-Taste. Völlig intuitiv oder? 😀

Apropos Dateien – über den Menüpunkt „2“ kommen wir in das dedizierte „Dateimenü“. Mit Hilfe dessen lässt sich eine Datei anlegen. Ebenso können bestehende Dateien umbenannt werden oder sich Informationen bzw. Dateiattribute (Größe, belegter Platz, Dateiformat, etc.) anzeigen lassen.

Fun Fact: Diese Menüstruktur lässt sich auch über mehrere Ebenen hinweg ansteuern. Erfahrene Benutzer können so direkt zu den entsprechenden Menüs und Funktionen navigieren. Über die Eingabe „3.2“ kommt man so z.B. vom Hauptmenü direkt in das Dateimenü!

Die Dateiorganisation an sich ist nur eines von zahlreichen kryptischen Themen des Mainframe. Diese funktioniert nämlich ganz anders (und meiner Meinung nach wesentlich sperriger) als man es von „modernen“ Betriebssystem gewohnt ist.

Grob kann man sich das so wie Ordner (Datasets) und Dateien (Member) unter Windows vorstellen. Ganz so einfach ist es aber dann doch nicht, denn es gibt z.B. auch sog. „sequentielle“ Datasets, welche ohne „Ordnerstruktur“ einfach in Dateiform vorliegen. Ich habe im Folgenden versucht eine Windows-Ordnerstruktur mit entsprechenden „Mainframe-Gegenstücken“ aufzuzeigen:

Mann, immer diese langweilige Theorie… Können wir nicht einfach mal was Praktisches machen? Also gut – möchte man nun eine Datei anlegen, müssen zahlreiche Parameter wie z.B. Dataset-Organisation, Record, Satzlänge, Größenangaben, etc. bedacht werden. Das alles zu erklären würde leider viel zu weit führen, nehmt es einfach so als gegeben hin! 😀

Der Dateiname selbst besteht aus mehreren Blöcken (genannt Qualifiern), welche durch einen Punkt getrennt werden. Unsere Beispieldatei heißt „IBMUSER.SEQDAT“:

Fun Fact: Es gibt auf dem Großrechner keine Dateisuffixe, also keine Dateiendungen wie z.B. „.txt“ (Textfile) oder „.docx“ (Word-Dokument) oder „.jpg“ (für ein Bild). Es ist dem Betriebssystem (und allen Anwendungen) völlig egal ob in der Datei Text, Binärdaten oder sonstige Informationen gespeichert sind. Somit ist der Typ, der vor dem Computer sitzt, selbst für die Dateizuordnung und deren Sinnhaftigkeit verantwortlich! 😉

Hat man die Datei erstellt, kann man mit Hilfe des ISPF-Editors (quasi das Frontend zum Editieren von Dateien) etwas Inhalt reinschreiben.

Fun Fact: Eins ist mal klar – das ist definitiv kein Notepad++ und erst recht kein Eclipse oder Visual Studio! 😀 Selbst für geübte Linux-Freaks, die mit dem (vor allem für Windows-User kryptisch wirkenden) „vi-Editor“ fit sind, ist der ISPF-Editor eine Herausforderung. Dessen Bedienung würde schon allein eine einwöchige Schulung gut füllen! 😉

Ok – nicht gerade geistreiche Worte, aber der Gedanke zählt! 😛 Nun wollen wir noch ein weiteres untergliedertes Dataset (über das Menü 3.2) samt zweier Member erstellen. Im Vergleich zu einer sequentiellen Datei müssen hier bei der Anlage der „Data set name type“ auf PDS und ein Wert (z.B. 10) bei „Directory blocks“ angegeben werden. Durch diese Angaben weiß das Betriebssystem, dass es sich um ein organisiertes (untergliedertes) Dataset mit mehreren Membern handelt.

Fun Fact: Ebenso ist jeder „Qualifier“ (also jedes Wort zwischen einem Punkt) auf acht Zeichen begrenzt, somit müssen wir uns mit dem Dateinamen „IBMUSER.RETROLOL“ begnügen!

In dem frisch angelegten Dataset…

habe ich zwei Member (Dateien) angelegt und eine davon (FILE1) mit etwas Inhalt befüllt. FILE2 habe ich absichtlich leer gelassen.

Nun ist der Großrechner ja nicht nur zum Verwalten von Dateien da. Ein Stichwort, welches immer im Zusammenhang mit Mainframes auftritt, ist die Massendaten- bzw. Stapelverarbeitung von Daten. Ein praktisches Beispiel wäre die Vielzahl an Kreditkartentransaktionen, welche es täglich auf der ganzen Welt zu verarbeiten gibt. Diese Verarbeitung klappt natürlich nur mit komplexen Programmen, welche sich irgendwelche schlauen Köpfe ausgedacht und programmiert haben. 🙂

Damit der Großrechner weiß, welche Dateien jetzt mit welchen Programmen verarbeitet werden sollen, werden „Steuerungsanweisungen“ benötigt. Diese werden in einer eigenen Sprache namens JCL (Job Control Language) formuliert. Na, das wollen wir doch gleich mal ausprobieren. Hierfür habe ich mir ein weiteres Dataset angelegt…

…und darin ein erstes JCL-Member namens SORT erstellt. Die genaue Syntax wie so etwas geht, welche Statements benötigt werden und wie man das Programm zur Sortierung korrekt parametrisiert ist in diversen Handbüchern beschrieben.

Fun Fact: Diese Ansammlung von Steuerungsanweisungen wird „Job“ genannt. Letztendlich ist in so einem Job exakt beschrieben, welche Aufgabe(n) der Großrechner bei diesem Job zu erledigen hat – fast so wie Jobs, bzw. Aufträgen in der „echten Welt“! 🙂

Damit der Job ausgeführt wird, muss in der Adresszeile ein einfaches „sub“ (steht für submit) eingegeben werden.

Fun Fact: In einer produktiven Umgebung (also in einem Unternehmen) gibt es natürlich eigene Software, welche das Starten und die Überwachung von Jobs übernehmen. Die Zeiten, in denen händisch jede Nacht einzelne Aufträge gestartet wurden, sind schon lange vorbei! 😉

Der Großrechner (bzw. das JES – steht für „Job Entry System“) quittiert die Auftragsannahme mit einer Meldung:

Und siehe da – wenige Sekundenbruchteile später erhalten wir eine Erfolgsmeldung (auch NOTIFY genannt) die besagt, dass der Job erfolgreich verarbeitet wurde. Würde hier als Rückgabecode etwas anderes als Null stehen (z.B. 4, 8 oder 12) wäre die Verarbeitung nicht erfolgreich und wir müssten den Job (oder das ausgeführte Programm) entsprechend korrigieren und erneut starten.

Fun Fact: Wie schnell so ein Auftrag abgearbeitet wird, hängt von den zur Verfügung stehenden Kapazitäten ab, so wie es eben auf einem „normalen“ Computer oder Smartphone auch ist. Wenn im Hintergrund Updates installiert werden, ihr auf YouTube unterwegs seid und gleichzeitig Spotify läuft, dann kann es schon mal etwas länger dauern, bis sich die TikTok-App öffnet! 😀

Hm, ok. Und was ist jetzt eigentlich genau passiert?! 😀 Um das zu verstehen sollten wir uns die Steueranweisungen nochmal ansehen. Wir haben letztendlich auf ein vorgefertigtes Programm namens „SORT“ zugegriffen und diesem als Parameter eine Eingabedatei (FILE1) und eine Ausgabedatei (FILE2) sowie ein paar Befehle, nach welcher Stelle sortiert werden soll, mitgegeben. Einfach gesagt – wir haben uns eine Datei sortieren lassen! 🙂

Da der Job (laut NOTIFY-Meldung) erfolgreich durchgelaufen ist, können wir uns gleich das Ergebnis in der Ausgabedatei ansehen. Öffnet man IBMUSER.RETROLOL(FILE2) wieder mit dem ISPF-Editor sehen wir, dass der Sortiervorgang tatsächlich erfolgreich war – geil!

Um das Bild rund zu machen, können wir noch einen Blick auf den abgearbeiteten Job werfen. Eigentlich macht man das typischerweise im Fehlerfall (z.B. um zu prüfen, ob Parameter falsch gesetzt waren), aber auch wenn alles funktioniert, lassen sich hier einige Infos über den verarbeiteten Job ablesen. Ihr wisst ja – Vertrauen ist gut, Kontrolle besser! 😉

Hierfür navigieren wir vom Hauptmenü aus in das Menü „m.5“ (SDSF).

Im „SDSF“ (Spool Search and Display Facility) werden alle gelaufenen (und aktuell noch laufenden) Jobs und Systemprozesse verwaltet. Über die Auswahl „st“ gelangen wir in die Statusübersicht. Hier findet sich (ganz unten) auch der soeben durchgeführte Job (SORTPGM).

Schaut man sich dessen Output an, sieht man sofort, dass der Job in weniger als einer Sekunde verarbeitet wurde:

Fun Fact: Mit der Angabe „9 CARDS READ“ wird die Anzahl der eingelesenen Zeilen der JCL-Datei ausgegeben. Warum „Cards“? Nun, das ganze System stammt aus einer Zeit, in der Daten (und somit auch Steuerungsanweisungen) auf Lochkarten (Artikel 1 und 131 lassen grüßen) gehalten (d.h. darauf ausgegeben bzw. davon eingelesen) wurden. Da mit jeder Karte 80 Byte an Daten repräsentiert werden konnten, wurde auch jede einzelne Zeile einer JCL von einer einzelnen Lochkarte eingelesen. 9 Zeilen – 9 Cards. Aus heutiger Sicht kaum vorstellbar, wie „IT“ in grauer Vorzeit mit einem Haufen Papierkarten funktioniert hat! 🙂

Auch die Parameter sowie die einzelnen Schritte, in welchen das SORT-Programm die Eingabedatei verarbeitet hat, lassen sich hier nachvollziehen. Hier findet man Informationen wie viele Sätze verarbeitet wurden und wie viele Bytes insgesamt sortiert wurden.

Ihr seht schon – genau für solche Stapelverarbeitungsvorgänge (auch „Batch“ genannt) ist der Mainframe wie geschaffen. So werden – auch heute noch – meist über Nacht Millionen von Datensätzen durch Rechnungsprogramme, Abbuchungssoftware oder Druckaufbereitungsprogramme geschoben und sequentiell verarbeitet. Echt abgefahren! 🙂

Und? Fühlt ihr euch bereits wie die absoluten Oberchecker, Hacker oder Mainframe-Geeks? Nun, das freut mich. Ich will euch auch gar nicht entmutigen, aber um ehrlich zu sein haben wir bisher nicht mal ein Prozent der Thematik beleuchtet! 😀

Fun Fact: Kein Wunder – zu glauben man wüsste was abgeht, nachdem man ein paar Zeilen auf einem albernen Internetblog gelesen hat wäre vermessen. Eine „Grundlagenausbildung“ im Mainframe-Bereich dauert meist mehrere Jahre – und selbst dann hat man realistisch betrachtet vermutlich erst zehn Prozent der Plattform erforscht. Alles in allem kein leichtes Unterfangen… 😉

Keine Angst – ich werde definitiv nicht eine Art „Grundkurs“ aus dem Thema machen, ich möchte euch nur in ein paar – hoffentlich – halbwegs verdaubaren Häppchen in die mystische Welt des Großrechners mit eintauchen lassen! 🙂

In diesem Sinne – bis die Tage, ciao!

Write a comment