Script-Programmierung

Das Linux-System


Zuerst ein paar Worte zum Grundverständnis des Systems.
Wenn man vor der Linux-Konsole sitzt, dann hat man das Gefühl, dass man irgendwelche Daten in den Linuxrechner per Tastatur eingibt, dieser sie verarbeitet und die Ergebnisse am Bildschirm wieder ausgibt. Das ist aber so nicht ganz richtig. Tastatur und Bildschirm sind genau genommen nicht Bestandteil des Linux-Systems.
Warum ist das so?
Unix/Linux ist ein Betriebssystem, das ursprünglich für Großrechner entwickelt wurde. Diese Geräte besitzen immense Rechenleistungen und Speicherkapazitäten und sind in der Anschaffung entsprechend teuer. Deshalb wäre es sehr ineffektiv, eine solche Rechenanlage mit einer einzigen Tastatur und einem Bildschirm auszustatten, sodass jeweils nur eine einzelne Person den Computer nutzen kann. Das Problem bei Einzelplatzrechnern besteht allgemein darin, das eine solche Maschine meist eigentlich nur Leerlauf hat, da sie z.B. zwischen den einzelnen Tastendrücken des Bedieners nichts zu tun hat. Noch schlimmer, wenn der Bediener auf den Bildschirm schaut und die Anzeige interpretiert, nachdenken muss, irgendwo Informationen nachschlägt, eine kurze Pause macht oder faulenzt, könnte der Rechner viele Millionen oder Milliarden von Rechenoperationen durchführen. Diese Rechenzeit und Energie wird dann einfach sinnlos verschwendet.

Deshalb hatte man die Idee, die Datenein- und ausgabe vom eigentichen Rechner abzukoppeln und auf sogenannte Terminals auszulagern. Diese Terminals waren in der Anfangszeit einfache Fernschreiber, die eigentlich benutzt wurden, um Texte über eine Telefonverbindung zu übertragen. Dazu stellte man eine Telefonverbindung zwischen zwei Geräten her. Diese Fernschreiber besaßen eine Tastatur und ein Druckwerk. Tastatureingaben wurden in Tonfrequenzen umgewandelt und an den anderen Fernschreiber über die Telefonleitung übertragen. Dort wurden die Töne wieder decodiert und die entsprechenden Zeichen auf dem Druckwerk auf Papier ausgedruckt. Dadurch konnte man sich gegenseitig Textnachrichten von der Tastatur des einen Fernschreibers auf das Druckwerk des anderen Fernschreibers ausgeben. Aus dieser Zeit stammt auch noch die Abkürzung tty für teletypewriter. Später wurden diese dann durch vollelektronische Terminals ersetzt, die wesentlich schneller und vor allem geräuschärmer arbeiteten. Bei diesen Terminals handelte es sich im Prinzip um sehr einfache Geräte, die kostengünstig und in großer Stückzahl gefertigt werden konnten.
Was tut nun so ein Terminal?

Das Terminal besitzt eine Tastatur, einen Bildschrim und eine serielle Schnittstelle mit der serielle Daten über eine Leitung vom Terminal abgesendet werden können. Über eine zweite Leitung kann das Terminal serielle Daten empfangen und stellt die Zeichen auf einem Bildschirm dar.
Im Normalfall läuft das so ab, dass die Tastatureingaben im Terminal gespeichert werden, bis der User die Enter-Taste drückt. Wenn der User also wie im Bild rechts dargestellt das Wort "Hallo" eintippt, dann werden diese Zeichen nicht sofort auf Line-OUT übertragen, sondern das Terminal wartet erst, bis die Enter-Taste gedrückt wird. In diesem Moment wird die gesamte Eingabe in einem Block über die serielle Leitung Line-Out abgeschickt. Dadurch hatte man die Möglichkeit, Eingaben vor dem Versenden noch korrigieren zu können und erst wenn man sich sicher war das alles korrekt ist, die Nachricht absendet. Außerdem ist der Empfänger (also bei uns der Rechner) nicht ständig mit der Interpretation unvollständiger Datensätze beschäftigt und muss nicht ständig über eventuelle Korrekturen informiert werden. Würde man also jedes eingegebene Zeichen sofort an den Rechner übertragen, müssten zusätzliche Tests erfolgen, ob ein eingegebener Befehl denn nun abgeschlossen ist oder nicht und das würde unnötig Rechenzeit kosten.

Empfängt das Terminal nun einen Datenstrom auf der Leitung Line-IN, z.B. von einem anderen Terminal, dann werden die Zeichen auf dem Bildschirm dargestellt. Je nach Typ können Terminals außer dem bloßen Text auch verschiedene Steuerzeichen und Attribute verstehen. Das ist aber von Typ zu Typ unterschiedlich. So ist es z.B. möglich, den Schreibcursor auf dem Bildschirm zu bewegen und bestimmte Positionen auf dem Bildschirm anzusteuern, auf die nächste Zeile zu wechseln, etc. Dazu werden bestimmte "nicht druckbare" Zeichen, wie LF, CR etc verwendet. Eine Steuerung von Attributen, wie Text- und Hintergrundfarbe, Fettschrift etc, erfolgt durch sogenannte ESCAPE-Sequenzen. Diese werden einfach in den Datenstrom zum Terminal eingefügt und von diesem dann entsprechend interpretiert oder auch nicht ......
Übrigens: Da die Anforderungen an Geschwindigkeit und Leistungsfähigkeit an die Terminals durch die Möglichkeiten einer Fehlerkorrektur, zusätzlicher Druckfunktionen (Bildschirmausdruck) und der Darstellung von Farben und grafischen Elementen immer weiter zugenommen hatte, setzte man ab Ende der 1970er Jahre immer häufiger Mikroprozessoren, also kleine Computerchips in den Terminals ein. Daraus entstand dann unser PC.

Das Terminal wird nun mit dem Computer verbunden, der dazu ebenfalls eine serielle Schnittstelle benötigt. Die Eingaben von der Tastatur erreichen nun den Computer, dieser verarbeitet sie (Kommndointerpreter Shell) und schickt die Ergebnisse über die serielle Schnittstelle wieder an das Terminal zurück. Der Trick bei der ganzen Sache ist nun, dass der Computer eine Vielzahl solcher Schnittstellen erhält, an denen nun hunderte Terminals angeschlossen werden können. Damit können viele User den Computer gleichzeitig nutzen.
Zu jeder IO-Schnittstelle wird im Speicher des Computers eine Arbeitsumgebung geschaffen, d.h. Arbeitsspeicher reserviert, in dem die Aufgaben des entsprechenden Terminals bearbeitet werden. Durch den Scheduler wird jeder dieser Arbeitsumgebungen ein Zeitfenster zugewiesen, in dem sich die CPU des Computers mit den Aufgaben beschäftigt. Wenn nichts zu tun ist, verlässt die CPU die Arbeitsumgebung wieder, ist etwas zu tun, dann wird eine gewisse Zeit an der Aufgabe gearbeitet und dann wieder gewechselt. Eine solche Vorgehensweise hat viele Vorteile:

  • Alle Terminals werden quasi gleichzeitig bedient (Multitasking).
  • Terminals ohne Arbeitsauftrag kosten keine Rechenzeit, Terminals mit Arbeitsauftrag steht dadurch mehr Rechenzeit zur Verfügung.
  • Wie viel Performance jeder User zur Verfügung hat, kann mit dem Scheduler gesteuert werden.
  • Das System ist leicht skalierbar (Mehrprozessorsysteme).

Genau genommen wird nicht nur für jedes aktive Terminal solch eine Arbeitsumgebung reserviert, sondern grundsätzlich für jedes laufende Programm (Prozess) auf dem Linux-Rechner.
Für jeden User an den Terminals scheint es damit so zu sein, als würde ihnen ein eigener Rechner zur Verfügung stehen. Damit kann der teure Computer wesentlich effizienter genutzt werden, da er viele User zugleich bedient. Durch die getrennten Arbeitsumgebungen können sich die Prozesse untereinander auch nicht stören.

Die Terminals müssen nun nicht unbedingt über die serielle RS232-Schnittstelle angeschlossen sein, im Prinzip geht das über alle möglichen Schnittstellen, wie z.B die Ethernetschnittstelle, die parallele Schnittstelle oder irgendeine andere Schnittstelle. Aufgabe der Kerneltreiber ist es dabei, die unterschiedliche Hardware anzusteuern und dem System die Datenströme über Pseudodevices (Verzeichnis /dev ) in Form von Pseudodateien zur Verfügung zu stellen. Damit können die Datenströme von jedem beliebigen Device stammen und an jedes beliebige Device ausgegeben werden. Prozesse müssen also nicht zwangsweise mit einem Terminal verbunden werden, sondern können auch andere Geräte/Schnittstellen zur Kommunikation nutzen (Daemonen).
Da es für den Linux-User nun etwas nervig wäre, sich zu seinem Rechner noch ein Terminal anzuschaffen, hat man ein paar virtuelle Terminals in das Linuxsystem integriert, sodass Tastatur und Bildschirm des PC gleich für den Terminalbetrieb genutzt werden können. Dabei handelt es sich genau genommen um eine Softwareemulation, ähnlich dem Hyperterminal unter Windows. Von diesen virtuellen Terminals stehen meist sechs Stück (erreichbar mit <Alt><1> ... <Alt><6>) zur Verfügung. Eingerichtet werden diese Terminals in der Datei /etc/inittab. Bei dem grafischen X11-System handelt es sich ebenfalls um eine Terminalemulation, die sich meist auf der siebten virtuellen Konsole befindet.

Fassen wir das Wichtigste noch einmal zusammen:

Weitere Informationen zum Datenstrommodell findest Du hier.