#headandbottom("1","EUMEL-Benutzerhandbuch","TEIL 1 : Einleitung","1")# #pagenr("%",1)##setcount(1)##block##pageblock# #headeven# #center#EUMEL-Benutzerhandbuch #center#____________________________________________________________ #end# #headodd# #center#TEIL 1 : Einleitung #center#____________________________________________________________ #end# #bottomeven# #center#____________________________________________________________ 1 - % #right#GMD #end# #bottomodd# #center#____________________________________________________________ GMD #rigth#1 - % #end# TEIL 1 : Einleitung 1.1 Allgemeines über EUMEL Dieses Buch bietet eine Übersicht über die Standardprozeduren des Betriebssystem EUMEL. Es bietet damit sowohl Hilfestellung für die Benutzung der standardmäßig vorhandenen Kommandos als auch für die Programmierung, also die Erweiterung dieses Kommandovorrats. Es ist jedoch kein Lehrbuch der Programmierung! In den ersten drei Kapiteln dieses Programmierhandbuches werden einige Grund­ begriffe des Systems, die grundlegende Programmiersprache (ELAN) und der EUMEL-Editor erläutert. Das vierte Kapitel bietet eine Übersicht über diejenigen Prozeduren und Operatoren, die eher der 'Job-Control-Language' zugerechnet werden können, also häufig im Kommandodialog benutzt werden. Im fünften Teil sind diejenigen Operationen beschrieben, die meistenteils für die Programmierung benutzt werden. (Compiler, Operationen auf den elementaren Daten­ typen, Dateien, Ein- und Ausgabe usw.). Diese Trennung ist jedoch recht willkürlich, es ist ja gerade eine der wichtigen Eigen­ schaften dieses Betriebssystems, daß es keine Trennung zwischen der Kommando­ sprache des Betriebssystems und Programmmiersprache für das System gibt. Jedes Systemkommando ist Aufruf einer ELAN Prozedur, jede neue Prozedur stellt eine Erweiterung des Kommandovorrats des Systems dar. Aus Gründen der Übersichtlichkeit der Zusammenstellung ist dieses Buch nicht frei von Vorwärtsverweisen! #page# 1.2 Struktur des Betriebssystems EUMEL Grundlegend für das Verständnis des Betriebssystems EUMEL ist der Begriff der #on("b")#Task#off("b")#. Eine Task kann als theoretisch unendliche Wiederholung eines Systempro­ gramms der Form: 'nimm Kommando entgegen' 'verarbeite Kommando' aufgefaßt werden. Einige Tasks existieren bereits als Grundstock des Systems, weitere werden von Benutzern des Systems erschaffen und dienen als persönliche Arbeitsumgebung für den 'Eigentümer'. Eine Task kann als benutzereigener, unab­ hängiger Computer im Computer betrachtet werden, denn sie kann Kommandos entgegennehmen und ausführen und Daten verwalten und aufbewahren. Eine Task kann neu erzeugt werden, an einen Bildschirm gekoppelt werden und beendet werden. Das Tasksystem ist in einer baumartigen Struktur angeordnet. Außer der Wurzel 'UR' hat jede Task einen Vorgänger ('Vater-Task') und möglicherweise Nachfolger ('Sohn-Tasks'). #on("u")##ib#Task-Organisation#ie##off("u")# SUPERVISOR - SYSUR ARCHIVE configurator OPERATOR shutup UR PUBLIC Benutzertask1 Benutzertask2 Benutzertask3 ..... Jeder Benutzer arbeitet innerhalb eines EUMEL-Systems, indem er eine Task an sein Terminal koppelt und dort Programme aufruft. Dateien sind grundsätzlich Eigentum einer Task. Es ist grundlegend für das Verständ­ nis des Betriebssystems EUMEL, die Beziehung zwischen Tasks und Dateien zu erkennen. Eine Task ist ein Prozeß, der gegebenenfalls Dateien besitzt. Dateien können nur in einer Task existieren. Um eine Datei einer anderen Task zur Verfügung zu stellen, wird eine Kopie der Datei an die andere Task geschickt, die sendende Task ist da­ nach Eigentümer des 'Originals', die empfangende Task Eigentümer der 'Kopie'. Soll eine Hierarchie von Dateien aufgebaut werden, so ist sie über eine Hierarchie von Tasks zu realisieren, da in einer Task alle Dateien gleichberechtigt sind. Bis zu dieser Stelle war stets von Dateien die Rede. Dateien sind jedoch ein Spezial­ fall der grundlegenderen Struktur des Datenraumes. Ein #ib#Datenraum#ie# ist ein allgemeiner Datenbehälter. Ein Datenraum kann beliebige Daten aufnehmen und erlaubt direkten Zugriff auf diese Daten. Die Struktur der Daten im Datenraum unterscheidet sich nicht von der Struktur der Programmdaten. Der 'innere Datentyp' eines Datenraums wird vom Programmierer festgelegt. Vorgeprägt vom System gibt es Textdateien, jeder andere Datentyp muß vom Pro­ grammierer geprägt werden, um so Dateien erzeugen zu können, die Objekte eben dieses neuen Typs enthalten. #page# 1.3 Eigenschaften des Betriebssystems Der erste Entwurf des Mikroprozessor-Betriebssystems EUMEL (#on("b")#E#off("b")#xtendable multi #on("b")#U#off("b")#ser #on("b")#M#off("b")#icroprozessor #on("b")#EL#off("b")#AN system) entstand 1979 mit dem Anspruch, auf Mikrocom­ putern den Anwendern Hilfsmittel und Unterstützungen zu bieten, wie sie sonst nur auf Großrechnern zur Verfügung gestellt werden. Aspekte, die EUMEL von anderen Betriebssystemen für Mikrocomputer unterscheiden, sind: - Hardwareunabhängigkeit - Multitaskingkonzept - Multiuserbetrieb - Erweiterbarkeit - virtuelle Speicherverwaltung - Datensicherheit #on("u")##on("b")#Das EUMEL-Schichtenmodell#off("b")##off("u")# Die Hardwareunabhängigkeit des Betriebssystems EUMEL begründet sich in seinem Aufbau aus Schichten (sogenannten virtuellen Maschinen), die einen klar definierten Leistungsumfang haben. #center#beliebige Anwendungen #center#Textverarbeitung, Datenbanken etc. #center#Systemdienste: Monitor, Dateiverwaltung, Editor #center#Task-System #center#Standardpakete (BOOL, INT, REAL, TEXT) #center#ELAN-Compiler #center#EUMEL0 #center#(virtueller Prozessor mit eigenem Befehlssatz) #center#SHard (Gerätetreiber) #center#Hardware Jede Schicht erwartet und erhält von ihren Nachbarn wohldefinierte Eingaben und gibt wohldefinierte Ausgaben weiter. Änderungen in einer Schicht müssen also in den angrenzenden Schichten beachtet werden, aber nicht in allen Teilen des Systems. Um EUMEL auf Rechner mit einem neuen Prozessortyp zu portieren, wird zunächst eine auf die Eigenheiten des Prozessors abgestimmte EUMEL0-Maschine entworfen und eine Hardwareanpassung (#ib#SHard#ie# : Software/Hardware-Interface) für einen Rechner mit diesem Prozessor hergestellt. Alle höheren Schichten des Systems bleiben unberührt. Weitere mit diesem Prozessortyp ausgestattete Rechner können mit EUMEL betrieben werden, indem ein SHard für dieses Rechnermodell geschrieben wird. Aus Benutzersicht ist wichtig, daß dadurch jegliche Software, die auf irgendeinem Rechner unter EUMEL verfügbar ist, auf jedem anderen Rechner, für den eine EUMEL Portierung existiert, lauffähig ist und gleiches Verhalten zeigt. Eine Vernet­ zung beliebiger Rechner, auf die EUMEL portiert ist, ist problemlos möglich. Desweiteren ist für den Benutzer des Systems von Bedeutung, daß er von der hard­ warenahen Schicht entfernt ist. Weder die Programmiersprache noch irgendwelche speziellen Systemfunktionen gewähren direkten Zugriff auf den Speicher oder Regi­ sterinhalte. Diese Tatsache hat weitreichende Folgen in Hinsicht auf Datenschutz und Systemsicherheit. Multi-Tasking-/Multi-User-Betrieb Wie einleitend dargestellt, besteht ein EUMEL-System aus diversen Tasks. Durch eine Aufteilung der Prozessorzeit in Zeitscheiben ist eine (quasi) parallele Bedienung mehrerer Tasks möglich. Die multi-user-Fähigkeit des Betriebssystems wird durch den Anschluß mehrerer Bildschirmarbeitsplätze (Terminals) an V.24 Schnittstellen des Rechners erreicht. Dabei wird jeder Schnittstelle eine sogenannte Kanalnummer zugeordnet. Jeder Benutzer kann seine Task dann an einen Kanal (=Terminal) koppeln und an diesem Terminal gleichzeitig mit anderen Benutzern arbeiten. Prozeßkommunikation und Netzwerkfähigkeit Grundlage der Kommunikation ist die 'Manager-Eigenschaft' von Tasks. Eine Task ist 'Manager', wenn sie Aufträge anderer Tasks annehmen und ausführen kann. Insbesondere kann ein Manager veranlaßt werden, eine an ihn geschickte Datei anzu­ nehmen, bzw. eine ihm gehörende Datei an die fordernde Task zu schicken. Derartige Kommunikationslinien verlaufen normalerweise in der Baumstruktur des Systems: z.B. ist die Task 'PUBLIC' (vergl. Seite 2) grundsätzlich Manager-Task. Eine unterhalb von PUBLIC liegende Task kann eine Datei an PUBLIC senden, bzw. von PUBLIC holen. Es ist auch möglich, eine Task für den Zugriff beliebiger anderer Tasks zu öffnen und somit beliebige Kommunikationspfade aufzubauen. Prinzipiell ist damit auch schon der Aufbau eines Netzwerkes beschrieben, denn sendende und empfangende Tasks können sich auf verschiedenen Rechnern befinden. Durch selbst erstellte Programme kann der Eigentümer einer 'Manager-Task' die Reaktion dieser Task auf einen Auftrag von außen bestimmen. Beispielsweise kann ein Manager derart programmiert werden, daß er nur Dateien empfängt und ausdruckt, aber niemals Dateien verschickt (Spool-Task). Erweiterbarkeit Die Programmiersprache ELAN ist im EUMEL-System gleichzeitig Programmier- und System-Kommandosprache (JCL), denn jedes Kommando ist Aufruf einer ELAN-Prozedur und jede vom Benutzer geschriebene ELAN-Prozedur erweitert den Kommandovorrat des Systems. Da alle EUMEL-Werkzeuge (einschließlich Editor) selbst ELAN-Programme sind, kann das System vom Benutzer selbst durch Hinzufügen eigener ELAN-Programme oder Programmpakete beliebig erweitert werden. Dabei können die bereits implemen­ tierten Systemteile (z.B. die Fenstertechnik des Editors) genutzt werden. Ein Benutzer muß, um alle Möglichkeiten vom EUMEL zu nutzen, nur eine Sprache lernen und nicht - wie bei anderen Betriebssystemen - zwei unterschiedliche, eine Kommando- und eine Programmiersprache. ELAN selbst ist eine PASCAL-ähnliche Programmiersprache, die mit Hilfe der schrittweisen Verfeinerung (Refinement-Konzept) die Top-Down-Programmierung unterstützt. Das Paketkonzept, das der Modularisierung dient, und die freie Wahl von Bezeichnernamen sind Voraussetzung für übersichtliche und effiziente Programmie­ rung. Virtuelle Speicherverwaltung Im EUMEL-System wird der Hauptspeicherplatz nach dem #on("b")#Demand-Paging-Prinzip#off("b")# verwaltet. Daten und Programme werden dazu in Seiten von 512 Byte aufgeteilt. Nur diejenigen Seiten, die wirklich benötigt werden, werden vom Hintergrundspeicher (Platte) in den Hauptspeicher geholt. Damit ist für den Benutzer bezüglich seiner Programm- bzw. Dateigrößen nicht mehr der Hauptspeicher, sondern die Hinter­ grundkapazität von Bedeutung. Die Durchsatzgeschwindigkeit (Performance) ist abhängig von der Größe des RAM-Speichers und der Zugriffsgeschwindigkeit des Hintergrundmediums. Das Demand-Paging-Verfahren ist Grundlage für den Multi-User-Betrieb, wobei der Hauptspeicherplatz möglichst effizient zu nutzen und kein Benutzer zu benachteiligen ist. Beim Duplizieren eines Datenraumes wird im EUMEL-System lediglich eine logische, keine physische Kopie erzeugt. Zwei Seiten (zweier Datenräume) heißen dann gekop­ pelt (geshared), wenn beide Seiten physisch demselben Block zugeordnet sind. Erst bei einem Schreibzugriff werden die Seiten entkoppelt (entshared) und tatsächlich physisch kopiert. Daher der Name "#on("b")#copy-on-write#off("b")#". Dieses Prinzip wird natürlich auch systemintern angewandt. Beispielsweise erbt eine Sohn-Task den Kommandovorrat der Vater-Task, indem der Standard-Datenraum, der die vorübersetzten ELAN-Prozeduren enthält, in der beschriebenen Weise kopiert wird. Prozeduren, die später hinzugefügt werden, werden natürlich nicht vererbt, da die Standard-Datenräume dann entkoppelt werden. Datensicherheit Störungen (inklusive Stromausfall) werden systemseitig durch eine automatische #on("b")#Fixpoint-Rerun-Logik#off("b")# aufgefangen, indem zum Zeitpunkt eines Fixpunkts der Inhalt des RAM Speichers, der seit dem letzten #ib#Fixpunkt#ie# verändert wurde auf den permanenten Speicher (Festplatte) geschrieben wird. Somit kann nach einer Störung immer auf den Systemzustand des letzten Fixpunktes aufgesetzt werden und die Datenverluste halten sich in erträglichen Grenzen. Der Zeitraum zwischen zwei Fixpunkten beträgt standardmäßig 15 Minuten, kann aber vom Benutzer anders eingestellt werden. Auch bei dieser Sicherung wird das Copy-on-write-Prinzip angewendet, so daß Platz- und Zeitaufwand gering sind und den normalen Ablauf nicht stören. #page# 1.4 Wichtige Begriffe - #on("b")##ib#archive#ie##off("b")#. Spezielle Task zur Verwaltung des Diskettenlaufwerks. Da für die längerfristige Datenhaltung und zur zusätzlichen Datensicherung Dateien auf Disketten geschrieben werden, besitzt das EUMEL-System für diese Aufgabe eine besondere Task, die die Bedienung vereinfacht und exklusiven Zugriff auf das Laufwerk garantiert. - #on("b")##ib#configurator#ie##off("b")#. Besondere Task im Systemzweig des EUMEL-Systems. In dieser Task ist die #ib#Konfiguration#ie# von Kanälen möglich, d.h. Kanal und angeschlossenenes Gerät werden aufeinander abgestimmt. - #on("b")##ib#editor#ie##off("b")#. Programm zur Dateibearbeitung am Bildschirm. Das Programm wird durch das ( Monitor- ) Kommando 'edit' und die Eingabe des Namens der ge­ wünschten Datei als Parameter gestartet. Da ein Bildschirm normalerweise auf 80 Zeichen Zeilenbreite und 24 Zeilen be­ schränkt ist, kann der Editor als Fenster betrachtet werden, das über die mögli­ cherweise weitaus größere Datei bewegt wird und durch das der betrachtete Aus­ schnitt der Datei bearbeitet werden kann. - #on("b")##ib#manager task#ie##off("b")#. Task, die Aufträge von anderen Tasks entgegennehmen und ausführen #on("u")#kann#off("u")#. Beispielsweise ist die Verwaltung von Dateien, die mehreren Benutzern (= anderen Tasks) zugänglich sein sollen, eine typische Aufgabe für einen Manager. - #on("b")##ib#Monitor#ie##off("b")#. Der Empfänger von Kommandos innerhalb einer Task ist der Monitor. Der Monitor ist sichtbar durch eine Zeile, in der 'gib kommando' steht. In diese Zeile werden #ib#Kommando#ie#s und erforderliche Parameter eingegeben. - #on("b")##ib#Supervisor#ie##off("b")#. Spezielle Task zur Überwachung eines EUMEL-Systems. Ein Benutzer kann durch die Supervisor-Kommandos Leistungen von dieser Task fordern: neue Task einrichten, Task wiederaufnehmen und diverse Informationen. - #on("b")##ib#Task#ie##off("b")#. Beliebig langlebiger Prozeß im EUMEL-System, der die Arbeits­ umgebung für Benutzer bildet. Jede Task besitzt einen #ib#Standard-Datenraum#ie#, der Code und Compilertabellen der Task enthält und kann weitere Datenräume (Dateien) besitzen. #page# 1.5 Die Notation in diesem Buch Beachten Sie bitte folgende Regeln der Aufschreibung: - Funktionstasten werden ebenso wie besondere Tastenkombinationen explizit als Tasten dargestellt: - Alles, was Sie am Bildschirm Ihres Rechners schreiben oder lesen sollen, ist in Textbereiche, die einen Bildschirm darstellen, eingefaßt. Beispiel: ____________________________________________________________________________ gib kommando: edit ("mein programm") ____________________________________________________________________________ - Innerhalb des Handbuchs sind in der Aufschreibung die Konventionen der Pro­ grammiersprache ELAN berücksichtigt. Dabei sind folgende Besonderheiten zu beachten: 1) Kommandos werden grundsätzlich klein geschrieben. 2) Dateinamen u.ä. sind Textdenoter und werden somit in Klammern und Anfüh­ rungsstriche gesetzt. In diesem Buch steht an den Stellen, wo ein Dateiname auftaucht #on("i")# 'dateiname' #off("i")#; den Namen, den Sie tatsächlich verwenden, können Sie frei wählen. 3) Falls besondere Begriffe oder Beispiele innerhalb eines normalen Textes auftreten, werden sie in einfache Anführungsstriche gesetzt. #page# 1.6 Die Funktionstasten des EUMEL-Systems Die Lage der EUMEL-Funktionstasten entnehmen Sie bitte der speziellen Installa­ tionsanleitung zu dem von Ihnen benutzten Gerät. #l pos (0.0)##l pos(4.0)# <^> <>> <<> Positionierungstasten #table# Umschalttaste Eingabe-/ Absatztaste Kommandotaste Supervisortaste Verstärkertaste Löschtaste Einfügetaste Tabulatortaste Markiertaste Stoptaste Weitertaste #tableend##clear pos# Weitere Informationen hierzu finden Sie in der Installationsanleitung zu dem von Ihnen benutzten Rechner oder Terminal. #page# 1.7 Eine Beispielsitzung Im Folgenden wird eine Beispielsitzung skizziert, in der ein ELAN-Programm erstellt und getestet wird. SUPERVISOR aufrufen ____________________________________________________________________________ Terminal 2 EUMEL Version 1.8/M gib supervisor kommando: begin("meine erste Task") ESC ? --> help ESC b --> begin("") ESC h --> halt ESC c --> continue("") ESC s --> storage info ESC q --> break ESC t --> task info ____________________________________________________________________________ Durch das Kommando 'begin ("meine erste Task")', welches durch abgeschlos­ sen werden muß, wird eine Task mit dem Namen 'meine erste Task' im Benutzer­ zweig, also unterhalb von 'PUBLIC' angelegt. Würde diese Task bereits existieren, so könnten Sie sie mit 'continue ("meine erste Task")' an das Terminal holen. ____________________________________________________________________________ gib kommando : edit ("mein erstes Programm") ____________________________________________________________________________ In der Task eröffnen Sie eine Datei mit dem Kommando 'edit ("dateiname")'. ____________________________________________________________________________ gib kommando : edit ("mein erstes Programm") "mein erstes Programm" neu einrichten (j/n) ? j ____________________________________________________________________________ Falls diese Datei neu ist, erfolgt eine Kontrollfrage (zur Kontrolle der gewünschten Schreibweise des Dateinamens), die Sie durch bejahen. ____________________________________________________________________________ ............ mein erstes Programm ............... Zeile 1 #markon# _ ____________________________________________________________________________ In die noch leere Datei tippen Sie nun den Programmtext ein. ____________________________________________________________________________ ............ mein erstes Programm ............... Zeile 1 _INT PROC ggt (INT CONST a, b): INT VAR b kopie :: abs (b), a kopie :: abs (a); WHILE b kopie <> 0 REPEAT INT VAR rest := a kopie MOD b kopie; a kopie := b kopie; b kopie := rest END REPEAT; a kopie END PROC gt; REP lies 2 zahlen ein; gib groessten gemeinsamen teiler aus UNTIL no ("weitertesten") PER. lies 2 zahlen ein: line; put ("2 Zahlen eingeben:"); INT VAR a, b; get (a); get (b). gib groessten gemeinsamen teiler aus: put ("der größte gemeinsame Teiler von"); put (a); put ("und"); put (b); put ("ist"); put (ggt (a,b)); line. ____________________________________________________________________________ In dem Programmbeispiel wird ein Prozedur 'ggt' definiert, die den größten gemein­ samen Teiler zweier Zahlen bestimmt. Die Prozedur soll für verschiedene Beispiele getestet werden; dies geschieht in dem Hauptprogramm, das solange Zahlen einliest und den größten gemeinsamen Teiler ausgibt, bis der Benutzer auf die Frage 'weiter­ testen (j/n) ?' mit antwortet. Haben Sie das Programm eingegeben, so können Sie die Bearbeitung dieser Pro­ grammdatei durch Drücken der Tasten (nacheinander!) beenden. ____________________________________________________________________________ gib kommando : run ("mein erstes Programm") ____________________________________________________________________________ Um Ihr Programm zu übersetzen und auszuführen, geben Sie das Kommando 'run ("dateiname")'. Der Verlauf der Übersetzung, die zwei Läufe über das Programm erfordert, ist am Zähler, der an der linken Seite des Bildschirms ausgegeben wird, zu erkennen. Werden beim Übersetzen des Programms Fehler entdeckt, so werden diese im 'note­ book' parallel zur Programmdatei gezeigt. In dem Beispielprogramm wurde ein Schreibfehler in Zeile 9 gemacht. ____________________________________________________________________________ ............ mein erstes Programm ............... Zeile 1 _INT PROC ggt (INT CONST a, b): INT VAR b kopie :: abs (b), a kopie :: abs (a); WHILE b kopie <> 0 REPEAT INT VAR rest := a kopie MOD b kopie; a kopie := b kopie; b kopie := rest END REPEAT; a kopie END PROC gt; REP .................. notebook ..................... Zeile 1 #markon# Zeile 9 FEHLER bei >> gt << ist nicht der PROC Name ____________________________________________________________________________ Diesen Fehler müssen Sie nun verbessern. ____________________________________________________________________________ ............ mein erstes Programm ............... Zeile 9 INT PROC ggt (INT CONST a, b): INT VAR b kopie :: abs (b), a kopie :: abs (a); WHILE b kopie <> 0 REPEAT INT VAR rest := a kopie MOD b kopie; a kopie := b kopie; b kopie := rest END REPEAT; a kopie END PROC ggt;_ REP .................. notebook ..................... Zeile 1 Zeile 9 FEHLER bei >> gt << ist nicht der PROC Name ____________________________________________________________________________ Haben Sie das Programm korrigiert, so können Sie die Datei durch Drücken der Tasten (nacheinander!) wieder verlassen. ____________________________________________________________________________ gib kommando : run ("mein erstes Programm") ____________________________________________________________________________ Nach Eingabe von wird das Programm erneut übersetzt. ____________________________________________________________________________ Keine Fehler gefunden, 136 B Code, 82 B Paketdaten generiert ******* ENDE DER UEBERSETZUNG ******* 2 Zahlen eingeben: _ ____________________________________________________________________________ Das Programm war jetzt fehlerfrei. Nach der Übersetzung wurde die Ausführung gestartet. Nun können Beispiele getestet werden. ____________________________________________________________________________ 2 Zahlen eingeben: 125 250 der größte gemeinsame Teiler von 125 und 225 ist 25 weitertesten (j/n) ? ____________________________________________________________________________ Beantwortet man die Frage mit , so wird die Ausführung des Programms beendet. ____________________________________________________________________________ gib kommando : ____________________________________________________________________________ Um die Arbeit in der Task zu beenden, geben Sie auch an dieser Stelle (nacheinander!) ein. Nach Verlassen der Task ist wiederum die EUMEL-Tapete auf dem Bildschirm. Jede weitere Aktion wird wiederum von hier aus durch begonnen. Insbesondere vor dem #ib#Ausschalten des Geräts#ie# muß nach eine Task des priviliegierten System­ zweigs (oft: '#ib#shutup#ie#') mit an das Terminal gekoppelt werden, in der das Kommando 'shutup' gegeben wird.