Kapitel 6
Multiprogrammierte Betriebssysteme (1960-1970)
Als die Leistung und Komplexität der Computerhardware in den 1960er Jahren zunahm, wurde der Bedarf an ausgefeilterer Systemsoftware zur Verwaltung von Maschinenressourcen und zur Vereinfachung der Programmausführung immer offensichtlicher. Obwohl einfache Batch-Verarbeitungssysteme einen ersten Schritt in Richtung Automatisierung darstellten, wiesen sie hinsichtlich Effizienz und Interaktivität an ihre Grenzen. In dieser Zeit entstanden multiprogrammierte und Time-Sharing-Betriebssysteme , die die Art und Weise, wie Benutzer mit Computern interagierten, revolutionieren und den Grundstein für moderne Betriebssysteme legen würden.
6.1 Die Grenzen der Stapelverarbeitung:
Sequentielle und ineffiziente Ausführung
Wie in Kapitel 3 erläutert, umfasste die Stapelverarbeitung die sequentielle Ausführung einer Reihe von Aufgaben mit begrenztem Bedienereingriff. Obwohl dieser Ansatz die Computernutzung im Vergleich zur manuellen Ausführung jeder einzelnen Anweisung verbesserte, hatte er mehrere erhebliche Einschränkungen:
- Geringe CPU-Auslastung: Während Ein-/Ausgabevorgängen (I/O) blieb die CPU oft im Leerlauf und wartete darauf, dass das externe Gerät seine Aufgabe abschloss. Dies führte zu einer Unterauslastung der teuren CPU-Ressource.
- Langes Warten auf Ergebnisse: Benutzer mussten warten, bis der gesamte Stapel abgeschlossen war, um die Ergebnisse ihres Jobs zu erhalten, obwohl dies nur einen Bruchteil der gesamten Ausführungszeit in Anspruch nahm.
- Mangelnde Interaktivität: Es war nicht möglich, während der Ausführung mit dem Programm zu interagieren, was das Debuggen und Ausführen von Anwendungen erschwerte, die sofortiges Feedback erforderten.
- Begrenzte Prioritäten: Alle Jobs im Stapel wurden im Allgemeinen mit der gleichen Priorität ausgeführt, ohne die Möglichkeit, dringendere oder wichtigere Jobs zu bevorzugen.
Diese Einschränkungen veranlassten Forscher und Entwickler, neue Wege zur Verwaltung von Computerressourcen zu erkunden, die die Ineffizienzen der Stapelverarbeitung überwinden könnten.
6.2 Die Entstehung von Multiprogramming:
Gemeinsame Nutzung der CPU zur Maximierung der Auslastung
Multiprogramming ist eine Technik, die es mehreren Programmen (oder Prozessen) ermöglicht, gleichzeitig im Hauptspeicher zu liegen und sich die CPU zu teilen. Die Grundidee besteht darin, dass die CPU auf die Ausführung eines anderen Programms umschalten kann, das zur Ausführung bereit ist, wenn ein Programm auf den Abschluss eines langsamen Vorgangs (z. B. eines E/A-Vorgangs) warten muss. Auf diese Weise versuchen wir, die CPU so stark wie möglich auszulasten und so die Gesamteffizienz des Systems zu verbessern.
Um Multiprogramming zu implementieren, waren mehrere Mechanismen erforderlich:
- Speicherverwaltung: Das Betriebssystem musste in der Lage sein, Speicherplatz zuzuweisen und zu verwalten, um mehrere Programme gleichzeitig unterzubringen und sicherzustellen, dass ein Programm den Speicher eines anderen nicht beeinträchtigt.
- CPU-Scheduling: Das Betriebssystem musste Algorithmen implementieren, um zu entscheiden, welche der laufbereiten Programme wie lange Zugriff auf die CPU erhalten sollten.
- Schutz: Es war von entscheidender Bedeutung, dass das Betriebssystem Schutzmechanismen bereitstellt, um zu verhindern, dass ein Programm auf unbefugte Weise auf den Speicher oder die Ressourcen eines anderen Programms zugreift oder diese verändert.
Durch Multiprogrammierung konnte die Produktivität von Computersystemen deutlich gesteigert werden, da mehrere Aufgaben in der gleichen Zeit erledigt werden konnten.
6.3 Die ersten multiprogrammierten Betriebssysteme:
Pioniere im Ressourcenmanagement
Zu den ersten Betriebssystemen, die Multiprogramming implementierten, gehören:
- Atlas Supervisor: Dieses Betriebssystem wurde Anfang der 1960er Jahre für den Atlas-Computer an der Universität Manchester entwickelt und war eines der ersten, das Konzepte wie virtuellen Speicher und Multiprogrammierung einführte und die Machbarkeit dieser Techniken demonstrierte.
- IBM OS/360: OS/360 wurde 1964 eingeführt und war eines der ersten großen Betriebssysteme, das Multiprogramming auf einer Familie von IBM System/360-Computern mit unterschiedlichen Hardwarefunktionen unterstützen sollte.
- OS/360 war für seine Zeit ein äußerst komplexes Betriebssystem und stellte einen Meilenstein in der Entwicklung von Betriebssystemen dar, indem es Konzepte wie Job Control Languages (JCLs) für die Jobverwaltung und ausgefeilte Speicherverwaltungsmechanismen einführte. Allerdings erschwerte die Komplexität auch die Implementierung und Verwaltung.
- Andere Betriebssysteme wie das für die Burroughs-Computer entwickelte Master Control Program (MCP) implementierten ebenfalls Formen der Multiprogrammierung.
6.4 Die Einführung des Time-Sharing:
Die Illusion eines Personal Computers für viele Benutzer
Time-Sharing ist eine Erweiterung von Multiprogramming, die es mehreren Benutzern ermöglicht, gleichzeitig mit dem Computer zu interagieren. Die Idee besteht darin, die CPU-Zeit in kleine Intervalle (Zeitscheiben oder Zeitquanten) aufzuteilen und jedes Intervall einem anderen Benutzer zuzuweisen. Die CPU wechselt schnell von einem Benutzer zum anderen, wodurch die Illusion entsteht, dass jeder Benutzer über einen eigenen PC verfügt.
Time-Sharing wurde durch den Wunsch motiviert, mehreren Benutzern gleichzeitig ein interaktives Computererlebnis zu bieten und so die Einschränkungen der Stapelverarbeitung zu überwinden. Dies war besonders wichtig in Kontexten wie wissenschaftlicher Forschung und Bildung, wo viele Benutzer Zugriff auf den Computer benötigen, um kleine Programme auszuführen, Dateien zu bearbeiten oder in Echtzeit mit dem System zu interagieren.
Um Time-Sharing zu implementieren, waren Techniken wie:
erforderlich- Zeitscheiben: CPU wird jedem Prozess für einen kurzen Zeitraum zugewiesen.
- Austauschen: Wenn ein Prozess die CPU über einen längeren Zeitraum nicht nutzt (z. B. beim Warten auf Benutzereingaben), kann sein Speicherplatz vorübergehend auf die Festplatte verschoben (ausgelagert) werden, um Platz für andere aktive Prozesse zu schaffen. Wenn der Prozess wieder zur Ausführung bereit ist, wird er in den Speicher zurückgebracht (eingelagert).
- Benutzer- und Terminalverwaltung: Das Betriebssystem musste in der Lage sein, den Zugriff mehrerer Benutzer über Remote-Terminals zu verwalten.
6.5 Wegweisende Time-Sharing-Betriebssysteme:
Auf dem Weg zur Interaktivität
Zu den frühesten und einflussreichsten Time-Sharing-Betriebssystemen gehören:
- CTSS (Compatible Time-Sharing System): CTSS wurde Anfang der 1960er Jahre am MIT (Massachusetts Institute of Technology) entwickelt und war eines der ersten erfolgreichen Time-Sharing-Systeme. Es ermöglichte mehreren Benutzern den interaktiven Zugriff über Terminals auf einen Großrechner und eröffnete neue Möglichkeiten für Forschung und Lehre. CTSS hat die Entwicklung nachfolgender Betriebssysteme maßgeblich beeinflusst.
- Multics (Multiplexed Information and Computing Service): Ein ehrgeiziges Projekt, das 1965 als Zusammenarbeit zwischen MIT, General Electric und Bell Labs begann. Das Ziel bestand darin, ein leistungsstarkes, zuverlässiges und sicheres Time-Sharing-Betriebssystem mit erweiterten Funktionen wie einem hierarchischen Dateisystem zu schaffen. Obwohl das Multics-Projekt keinen unmittelbaren kommerziellen Erfolg hatte, hatten viele seiner Ideen und Konzepte großen Einfluss auf die Entwicklung zukünftiger Betriebssysteme.
- Unix: Unix wurde in den 1960er Jahren als „falsches“ Projekt innerhalb der Bell Labs hauptsächlich von Ken Thompson und Dennis Ritchie geboren und war zunächst von einigen Ideen von Multics inspiriert, hatte jedoch einen einfacheren und modulareren Ansatz. Eines der besonderen Merkmale von Unix war seine Portabilität, die durch die Implementierung in der Sprache C (ebenfalls von Ritchie bei Bell Labs entwickelt) ermöglicht wurde. Frühe Versionen von Unix unterstützten Time-Sharing und führten grundlegende Konzepte wie das hierarchische Dateisystem und die Befehlszeilenschnittstelle (Shell) ein, die einen nachhaltigen Einfluss auf die Computerwelt haben sollten.
6.6 Grundlegende Konzepte moderner Betriebssysteme, die in dieser Zeit eingeführt wurden
Das Jahrzehnt 1960-1970 war entscheidend für die Definition vieler grundlegender Konzepte, die auch heute noch die Grundlage moderner Betriebssysteme bilden:
-
- Speicherverwaltung: Die ersten Techniken zur Speicherzuweisung (z. B. feste und variable Partitionen) und zum Schutz des Speichers zwischen verschiedenen Prozessen wurden entwickelt. Die Einführung des virtuellen Speichers in Systemen wie Atlas und OS/360 stellte einen bedeutenden Fortschritt dar, der es Programmen ermöglichte, mehr Speicher zu nutzen, als physisch verfügbar war.
- CPU-Planung: Die ersten Planungsalgorithmen wurden eingeführt, um zu entscheiden, welcher Prozess von der CPU in einer mehrfach programmierten Time-Sharing-Umgebung ausgeführt werden sollte. Algorithmen wie Round-Robin (in vielen Time-Sharing-Systemen verwendet) und prioritätsbasierte Algorithmen wurden untersucht und implementiert.
- Geräteverwaltung: Betriebssysteme begannen, Mechanismen zur Verwaltung und Steuerung der verschiedenen an den Computer angeschlossenen Eingabe-/Ausgabegeräte zu integrieren und so eine einheitliche Schnittstelle zu Anwendungsprogrammen bereitzustellen.
- Dateisysteme: Betriebssysteme wie Multics und Unix führten das Konzept eines hierarchischen Dateisystems ein, das die Organisation von Daten in Verzeichnissen und Unterverzeichnissen ermöglichte und so die Dateiverwaltung und den Dateizugriff vereinfachte.
- Benutzeroberfläche: Während die Stapelverarbeitung oft keine direkte Benutzerinteraktion während der Ausführung beinhaltete, führten Time-Sharing-Systeme die Befehlszeilenschnittstelle (CLI) als primäres Mittel zur Interaktion mit dem Betriebssystem ein.
6.7 Herausforderungen und Innovationen bei der Entwicklung von Betriebssystemen
Die Entwicklung multiprogrammierter und Time-Sharing-Betriebssysteme in den 1960er Jahren war ein äußerst komplexes Unterfangen. Betriebssystemprogrammierer standen vor Herausforderungen wie der gleichzeitigen Verwaltung mehrerer Prozesse, der Synchronisierung und Kommunikation zwischen Prozessen, dem Schutz von Systemressourcen und der Fehlerbehandlung.
In dieser Zeit entstanden auch bedeutende Innovationen in den Softwareentwicklungstechniken und im Systemdesign. Modularität, Codestrukturierung und die Einführung höherer Programmiersprachen wie C für die Betriebssystementwicklung (wie im Fall von Unix) trugen dazu bei, die wachsende Komplexität der Systemsoftware zu bewältigen.
Die Entwicklung der Betriebssysteme in den 1960er Jahren mit der Verlagerung von Stapelverarbeitung zu Multiprogramming und Time-Sharing stellte eine grundlegende Veränderung in der Art und Weise dar, wie Benutzer mit Computern interagierten und in der Effizienz, mit der Hardwareressourcen genutzt wurden. Die Einführung von Schlüsselkonzepten wie Speicherverwaltung, CPU-Planung, Geräteverwaltung und Dateisystemen legte den Grundstein für die modernen Betriebssysteme, die wir heute verwenden. Bahnbrechende Systeme wie OS/360, CTSS, Multics und Unix hatten einen nachhaltigen Einfluss auf den Computerbereich und hatten einen tiefgreifenden Einfluss auf die Entwicklung von Systemsoftware für die kommenden Jahrzehnte.