Als Betriebsmittel oder Ressourcen bezeichnet man alle von der
Hardware eines Computers zur Verfügung gestellten Komponenten,
also den Prozessor (bei Mehrprozessorsystemen natürlich die
Prozessoren), den physikalischen Speicher und alle Geräte
wie Festplatten-, Disketten- und CDROM-Laufwerke, Netzwerk- und
Schnittstellenadapter und andere.
Einführendes Beispiel: Zeitgeberbausteine
Moderne Rechnersysteme besitzen Zeitgeberbausteine (Timer). In
frühen PCs wurde z.B. der Baustein 8284 der Firma Intel eingesetzt.
Dieser Baustein muss zunächst initialisiert werden. Er kann
dann nach Ablauf einer Zeitspanne oder periodisch den Prozessor
unterbrechen und ihn zur Abarbeitung einer eigenen Routine veranlassen.
Neben der Initialisierung ist eine Unterbrechungsroutine zu erstellen,
deren Aufruf in einer dafür geeigneten Sprache (meist Assembler)
programmiert werden muss. Da Unterbrechungen asynchron auftreten,
sind komplexe Verhältnisse hinsichtlich der Datenstrukturen
zu berücksichtigen. Genaue Kenntnisse des Bausteins (Datenblatt),
der Computerhardware (Unterbrechungsbehandlung) und des Prozessors
sind erforderlich. Die einzelnen Komponenten, die an diesem Prozess
beteiligt sind, fasst man unter dem Begriff Rechnerarchitektur
zusammen.
Virtuelle Prozessoren
Ein modernes Mehrprogrammbetriebssystem verwendet einen solchen
Zeitgeberbaustein um den normalerweise einzigen Prozessor periodisch
(normalerweise im Millisekundenbereich) zu unterbrechen und eventuell
mit einem anderen Programm fortzufahren (so genanntes präemptives
Multitasking). Die Initialisierung und die Unterbrechungsroutine
werden dabei vom Betriebssystem implementiert. Auch wenn nur ein
einzelner Prozessor zur Verfügung steht, können mehrere
Programme ausgeführt werden, jedes Programm erhält einen
Teil der Prozessorzeit (Scheduling). Jedes Programm verhält
sich, bis auf die verlangsamte Ausführungszeit, so als hätte
es einen eigenen virtuellen Prozessor.
Virtuelle Zeitgeber
Über einen Systemruf, z.B. alarm, wird jedem Programm darüber
hinaus ein eigener virtueller Zeitgeber zur Verfügung gestellt.
Das Betriebssystem zählt die Unterbrechungen des Original-Zeitgebers
und informiert Programme, die den alarm-Systemruf verwendeten.
Die einzelnen Zeitpunkte werden über eine Warteschlange verwaltet.
Abstraktion
Die Hardware des Zeitgebers ist damit vor den Programmen verborgen.
Ein System mit Speicherschutz erlaubt den Zugriff auf den Zeitgeberbaustein
nur über den Kernel und nur über exakt definierte Schnittstellen
(meist Systemrufe genannt, die über spezielle Prozessorbefehle
wie TRAP, BRK, INT realisiert werden). Kein Programm kann somit
das System gefährden, die Verwendung des virtuellen Zeitgebers
ist einfach und portabel. Der Anwender oder Programmierer braucht
sich nicht um die (komplexen) Details zu kümmern.
Virtualisierung weiterer Betriebsmittel
So wie Prozessoren und Zeitgeber virtualisiert werden, ist dies
auch für alle anderen Betriebsmittel möglich. Dabei
werden einige Abstraktionen teilweise nur als Software implementiert,
andere erfordern spezielle Hardware.
Dateisysteme
Über Dateisysteme werden die Details der externen Speichersysteme
(Festplatten-, Disketten- oder CD-ROM-Laufwerke) verborgen. Dateinamen
und Verzeichnisse erlauben den bequemen Zugriff, die eigentlich
vorhandene Blockstruktur und die Geräteunterschiede sind
vollkommen unsichtbar.
Interner Speicher
Der interne Speicher (RAM) wird in Blöcke (Kacheln) aufgeteilt
und den entsprechenden Programmen zur Verfügung gestellt.
Über virtuellen Speicher wird bei vielen Systemen jedem Programm
ein kontinuierlicher Bereich zur Verfügung gestellt. Dieser
Speicher ist physikalisch nicht kontinuierlich, es können
sogar unbenutzte Teile auf den externen Speicher ausgelagert sein.
Der virtuelle Speicher eines Programms kann sogar größer
als der reale Speicher sein.
Netzwerk
Die Details der Netzwerkzugriffe werden verborgen, indem auf die
eigentliche Hardware (Netzwerkkarte) ein Protokollstapel aufgesetzt
wird. Die Netzwerksoftware erlaubt beliebig viele virtuelle Kanäle.
Auf der Ebene der Sockets (Programmierung) ist die Netzwerkkarte
vollkommen unsichtbar, das Netzwerk hat viele neue Fähigkeiten
(bidirektionale, zuverlässige Datenströme, Adressierung,
Routing) bekommen.
Bildschirm
Als Grafische Benutzeroberfläche (grafisches Benutzerinterface)
wird generell eine Bildschirmausgabe beschrieben, wenn sie über
einen Prompt hinausgeht. Mit den richtigen Grafikkarten und Bildschirmen
ist die Darstellung von geometrischen Objekten (Linien, Kreisen,
Ellipsen, aber auch Schriftattributen und Farben) auf dem Bildschirm
möglich, aus denen sich komplexere geometrische Elemente
wie Knöpfe, Menüs, etc. Benutzeroberflächen zum
einfachen Steuern von Programmen erstellen lassen.
Die Grafikkarte als Hardware ist für den Programmierer und
Anwender vollkommen verborgen.
Beispiele
Der C64, ein Heimcomputer der 1980er Jahre
In den 1980er Jahren wurden Heimcomputer populär. Diese konnten
neben nützlichen Aufgaben auch Spiele ausführen. Die
Hardware bestand aus einem 8-Bit-Prozessor mit bis zu 64KB RAM,
einer Tastatur und einem Monitor- bzw. HF-Ausgang. Einer der populärsten
dieser Computer war der Commodore C64 mit dem Mikroprozessor 6510.
Dieser Computer hatte ein 8KB-ROM-BIOS, das die Geräte Bildschirm,
Tastatur, serielle IEC-Schnittstelle für Diskettenlaufwerke
bzw. Drucker, Kassetteninterface initialisierte und über
ein Kanalkonzept teilweise abstrahierte. Über ein 8KB-ROM-BASIC,
das auf die Funktionen des BIOS aufsetzte, konnte das System bedient
und programmiert werden. Das Betriebssystem dieses Computers kann
auf der Ebene des BASIC-Interpreters als gute Hardwareabstraktion
angesehen werden. Natürlich sind weder Kernel, Speicher-
oder sonstiger Hardwareschutz vorhanden. Viele Programme, vor
allem auch Spiele, setzten sich über das BIOS hinweg und
griffen direkt auf entsprechende Hardware zu.
Abstraktionsschichten im Betriebssystem des Heimcomputers C64
DOS, ein Diskettenbetriebssystem
Die ersten IBM-PCs waren ganz ähnlich wie der C64 aufgebaut.
Auch sie verfügten über ein eingebautes BIOS zur Initialisierung
und Abstraktion der Hardware. Sogar ein BASIC-Interpreter war
vorhanden. Im Gegensatz zum BIOS wurde auf BASIC jedoch in den
kompatiblen Rechnern anderer Firmen verzichtet.
Der PC konnte mit seinem Intel 8088-Prozessor (16-Bit-Register)
bis zu 1MB Speicher adressieren, die ersten Modelle waren jedoch
nur mit 64KB ausgestattet. Diskettenlaufwerke lösten die
alten Kassettenrekorder als Speichermedium ab. Diese erlauben
vielfaches Schreiben und Lesen einzeln adressierbarer 512-Byte-Blöcke.
Die Benutzung wird durch ein ’’Diskettenbetriebssystem
(Disk Operating System, DOS)’’ vereinfacht, das ein
abstraktes Dateikonzept bereitstellt. Blöcke können
zu beliebig großen Clustern (Zuordnungseinheit, kleinste
für das BS ansprechbare Einheit) zusammengefasst werden.
Dateien (logische Informationseinheiten) belegen einen oder mehrere
(verkettete) dieser Cluster. Eine Diskette kann viele Dateien
enthalten, die über Namen erreichbar sind. Das DOS der Firma
Microsoft, auch MS-DOS (Microsoft Disk Operating System) genannt,
ist ein solches System. Es setzt auf das BIOS auf und stellt Dateisystemoperationen
zur Verfügung.
Auf den ersten PCs war kein Speicherschutz realisiert, die Programme
konnten daher an DOS vorbei direkt auf BIOS und sogar auf die
Hardware zugreifen. Erst spätere PCs wurden mit dem Intel
80286-Prozessor ausgestattet, der Speicherschutz ermöglichte.
MS-DOS stellte auch keinen für alle Zwecke ausreichenden
Abstraktionsgrad zur Verfügung. Es ließ sich nur ein
Programm gleichzeitig starten, die Speicherverwaltung war eher
rudimentär. Ein Teil der Hardware wurde nicht unterstützt
und musste von Programmen direkt angesprochen werden, was dazu
führte, dass beispielsweise für jedes Spiel die Soundkarte
neu konfiguriert werden musste. Die Performance einiger Routinen,
speziell zur Textausgabe, war verbesserungswürdig. Viele
Programme setzten sich daher zwangsläufig über das Betriebssystem
hinweg und schrieben z.B. direkt in den Bildschirmspeicher. MS-DOS
wurde mit einem Satz von Programmen (so genannten Werkzeugen)
und einem Kommandointerpreter (COMMAND.COM) ausgeliefert.
Abstraktionsschichten eines PC unter DOS
Linux (GNU/Linux), ein modernes Mehrprogrammsystem
Linux läuft als portables Betriebssystem auf verschiedenen
Rechnerarchitekturen, wurde aber zunächst für PCs mit
Intel-Architektur 80386-Prozessor entwickelt. Das in diesen Rechnern
eingebaute BIOS dient nur noch zum Initialisieren der Hardware
und zum Hochfahren des Betriebssystem-Kernels. Die Routinen des
BIOS sind jedoch für Mehrprogrammsysteme wie Linux ungeeignet,
insbesondere weil der Prozessor durch Warten belastet wird anstatt
durch eine – in der Hardware durchaus vorhandene –
geschickte Unterbrechungsverwaltung (interrupt handling) auf Ereignisse
(sog. events) zu reagieren.
Linux verwendet daher nach dem Starten des Systems eigene Gerätetreiber.
Es verteilt die Prozessorzeit auf verschiedene Programme (Prozesse).
Jeder dieser Prozesse erhält einen eigenen, geschützten
Speicherbereich und kann nur über Systemaufrufe auf die Gerätetreiber
und das Betriebssystem zugreifen. Die Programme laufen im Benutzermodus
(user mode), während der Kernel im Kernel-Modus (kernel mode)
arbeitet. Die Privilegien im Benutzermodus sind sehr eingeschränkt.
Abstraktion und Speicherschutz sind nahezu vollkommen, ein direkter
Zugriff wird nur sehr selten und unter genau kontrollierten Bedingungen
gestattet. Kein Programm kann so das Gesamtsystem gefährden.
Linux stellt wie sein Vorbild Unix eine vollständige Abstraktion
und Virtualisierung für nahezu alle Betriebsmittel bereit
(virtueller Speicher, Illusion eines eigenen Prozessors etc.).
Fast vollständige Abstraktion unter Linux
Viele Benutzer greifen zu den sogenannten Linux-Distributionen,
die von verschiedenen Firmen, die auch den Support übernehmen,
verkauft werden. Diese Distributionen beinhalten nicht nur das
Betriebssystem, sondern auch eine große Auswahl weiterer
Software zur vereinfachten Handhabung. Erwähnenswert ist
hier die grafische Benutzeroberfläche X11. Programmbibliotheken
und ein großer Satz von Werkzeugen (meist Kommandos des
Gnu-Projekts) sowie Entwicklungsumgebungen, unter anderem für
die Sprache C, runden das System ab.Windows (MS-DOS Erweiterung)
1983 begann die Firma Microsoft mit der Entwicklung eines grafikfähigen
Betriebssystemaufsatzes für MS-DOS namens Windows. Das Dateisystem
von DOS und die Gerätetreiber des BIOS wurden um Ansteuerung
und Elemente einer Benutzeroberfläche sowie weitere Treiber
unter anderem für eine Computermaus ergänzt. Eine Warteschlange
für die Ereignisse ermöglichte auch kooperatives Multitasking.
Die erste Version von Windows, die in größeren Mengen
verkauft werden konnte, war das 1990 erschienene Windows 3.0,
das überlappende Fenster und eine fast vollständige
Grafikkarten-unabhängige Programmumgebung bot, bei der schon
damals verfügbaren Anzahl unterschiedlicher Grafikkarten
eine nicht zu unterschätzende Leistung.
Aber erst Windows 3.1, das im April 1992 erschien, lief auch auf
den meisten PCs einigermaßen stabil und wurde nicht zuletzt
durch die Unterstützung vieler anderer Softwarehersteller
und Programmierer auch zum ersten kommerziellen Erfolg. Damit
setzte sich Windows auch gegen das Konkurrenzprodukt OS/2 aus
dem Hause IBM durch.
Das System wurde noch im Oktober 1992 um Netzwerkfähigkeiten
erweitert, die neue Version hieß Windows für Workgroups.
Im Jahre 1995 erschien das sehr erfolgreiche Windows 95, das die
alten 16-Bit Schnittstellen (jetzt Win16 benannt) um 32-Bit Schnittstellen
(Win32c) erweiterte und auch sonst Verbesserungen bot. Es setzte
immer noch auf MS-DOS auf und konnte sowohl DOS-Programme, ältere
Win16-Anwendungen als auch neue Win32c-Anwendungen ausführen.
Zugriffsschutz und Speicherverwaltung waren größtenteils
nicht vorhanden bzw. sehr rudimentär implementiert. Fehlerhafte
Anwendungen oder Gerätetreiber konnten so das System gefährden.
Die explosionsartige Verbreitung neuer Erweiterungskarten (Stichwort
Plug-and-Play) kombiniert mit dem recht einfachen Design sorgte
darüber hinaus für Inkompatibilitäten. Insgesamt
brachte dies dem System den Ruf der Instabilität ein.
Trotzdem war das System sehr erfolgreich. Insbesondere von der
Möglichkeit direkt auf die Hardware zuzugreifen machten Anwendungen
wie Spiele Gebrauch. Die Leistungsfähigkeit der verfügbaren
Grafikhardware wurde mit der Zeit beachtlich.
Windows NT
Das MS-DOS und BIOS-Design der PCs erlaubten keine Weiterentwicklung
in Richtung moderner Serverbetriebssysteme. Microsoft begann Anfang
der 1990er ein solches Betriebssystem zu entwickeln, das zunächst
als Weiterentwicklung von OS/2 geplant war. Letztendlich erschien
es aber unter dem Namen Windows NT (NT für New Technology).
Das System sollte portabel und zuverlässig und damit den
damaligen Serverbetriebssystemen mindestens ebenbürtig sein.
Über die Hardware wurde eine Abstraktionsschicht, der Hardware
Abstraction Layer (HAL) gelegt, auf den der Kernel aufsetzte.
Verschiedene Gerätetreiber waren als Kernmodule ausgeführt
und liefen wie der Kernel im privilegierten Kernel Mode. Sie stellten
Möglichkeiten der E/A-Verwaltung, Dateisystem, Netzwerk,
Sicherheitsmechanismen, virtuellen Speicher usw. zur Verfügung.
Systemdienste (System Services) ergänzten das Konzept; wie
ihre UNIX-Pendents, die daemons, waren sie in Form von Prozessen
im User-Mode ausgeführt.
Abstraktionsschichten unter Windows NT (etwas vereinfacht)
Über so genannte Personalities wurden dann die Schnittstellen
bestehender Systeme nachgebildet, zunächst für Microsofts
eigenes, neues Win32-System, aber auch für OS/2 (ohne Grafik)
und POSIX.1, also einer Norm, die eigentlich Unix-Systeme vereinheitlichen
sollte. Personalities liefen wie Anwenderprogramme im unprivilegierten
User-Mode. Das DOS-Subsystem war in Form von Prozessen implementiert,
die jeweils einen kompletten PC mit MS-DOS als virtuelle Maschine
darstellten; darauf konnte mit einer besonderen Version von Windows
3.1, dem Windows-on-Windows, auch Win16-Programme ausgeführt
werden. Windows-on-Windows blendete dazu die Fenster der Win16-Programme
in das Win32-Subsystem ein, das die Grafikausgabe verwaltete.
Das System erlaubte daher die Ausführung von Programmen sowohl
für MS-DOS wie für die älteren Windows-Betriebssysteme,
allerdings unter vollkommener Kontrolle des Betriebssystems. Dies
galt aber nur für die Implementierung für Intel 80386
Prozessoren und dessen Nachfolger.
Programme, die direkt auf die Hardware zugreifen, blieben aber
außen vor. Insbesondere viele Spiele konnten daher nicht
unter Windows NT ausgeführt werden, zumindest bis zur Vorstellung
von WinG, das später in DirectX umgetauft wurde. Ohne die
Möglichkeit eines direkten Zugriffs auf die Grafikhardware
bzw. -treiber war die Programmierung von leistungsfähigen
Actionspielen zunächst auf die älteren Windows-Versionen
beschränkt.
Windows NT erschien in den Versionen 3.1, 3.5, 3.51 und 4.0. Windows
2000 stellte eine Weiterentwicklung von Windows NT dar. Auch Windows
XP, Windows Server 2003 und Windows Codename Longhorn bauen auf
der Struktur von Windows NT auf.
|