Betriebssystem

Aus besserwiki.de

Ein Betriebssystem (OS) ist eine Systemsoftware, die Computerhardware und Softwareressourcen verwaltet und allgemeine Dienste für Computerprogramme bereitstellt.

Time-Sharing-Betriebssysteme planen Aufgaben für eine effiziente Nutzung des Systems und können auch Buchhaltungssoftware für die Kostenzuweisung von Prozessorzeit, Massenspeicher, Drucken und anderen Ressourcen enthalten.

Bei Hardwarefunktionen wie Ein- und Ausgabe und Speicherzuweisung fungiert das Betriebssystem als Vermittler zwischen Programmen und der Computerhardware, obwohl der Anwendungscode in der Regel direkt von der Hardware ausgeführt wird und häufig Systemaufrufe an eine Betriebssystemfunktion vornimmt oder von ihr unterbrochen wird. Betriebssysteme sind auf vielen Geräten zu finden, die einen Computer enthalten - von Mobiltelefonen und Videospielkonsolen bis hin zu Webservern und Supercomputern.

Das vorherrschende Allzweck-Betriebssystem für Personalcomputer ist Microsoft Windows mit einem Marktanteil von rund 76,45 %. macOS von Apple Inc. liegt an zweiter Stelle (17,72 %), und die verschiedenen Linux-Varianten stehen zusammen an dritter Stelle (1,73 %). Im mobilen Bereich (einschließlich Smartphones und Tablets) wird der Anteil von Android im Jahr 2020 bei 72 % liegen. Nach den Daten für das dritte Quartal 2016 ist der Anteil von Android bei Smartphones mit 87,5 Prozent und einer Wachstumsrate von 10,3 Prozent pro Jahr dominant, gefolgt von Apples iOS mit 12,1 Prozent und einem jährlichen Rückgang des Marktanteils von 5,2 Prozent, während andere Betriebssysteme nur 0,3 Prozent ausmachen. Linux-Distributionen dominieren in den Bereichen Server und Supercomputing. Andere spezialisierte Klassen von Betriebssystemen (Spezialbetriebssysteme), wie z. B. eingebettete Systeme und Echtzeitsysteme, gibt es für viele Anwendungen. Es gibt auch Betriebssysteme, die auf Sicherheit ausgerichtet sind. Einige Betriebssysteme haben geringe Systemanforderungen (z. B. die leichtgewichtige Linux-Distribution). Andere können höhere Systemanforderungen haben.

Einige Betriebssysteme müssen installiert werden oder sind bei gekauften Computern vorinstalliert (OEM-Installation), während andere direkt von einem Datenträger (z. B. Live-CD) oder Flash-Speicher (z. B. USB-Stick) ausgeführt werden können.

Zusammenhang zwischen Betriebssystem, Hardware, Anwendungssoftware und dem Benutzer
PC Betriebssysteme Marktanteile in Deutschland

Ein Betriebssystem, auch OS (von englisch operating system) genannt, ist eine Zusammenstellung von Computerprogrammen, die die Systemressourcen eines Computers wie Arbeitsspeicher, Festplatten, Ein- und Ausgabegeräte verwaltet und diesen Anwendungsprogramme zur Verfügung stellt. Das Betriebssystem bildet dadurch die Schnittstelle zwischen den Hardware-Komponenten und der Anwendungssoftware des Benutzers. Betriebssysteme bestehen in der Regel aus einem Kernel (deutsch: Kern), der die Hardware des Computers verwaltet, sowie speziellen Programmen, die beim Start unterschiedliche Aufgaben übernehmen. Zu diesen Aufgaben gehört unter anderem das Laden von Gerätetreibern. Betriebssysteme finden sich in fast allen Arten von Computern: Als Echtzeitbetriebssysteme auf Prozessrechnern und eingebetteten Systemen, auf Personal Computern, Tabletcomputern, Smartphones und auf größeren Mehrprozessorsystemen wie z. B. Servern und Großrechnern.

Die Aufgaben eines Betriebssystems lassen sich wie folgt zusammenfassen: Benutzerkommunikation; Laden, Ausführen, Unterbrechen und Beenden von Programmen; Verwaltung und Zuteilung der Prozessorzeit; Verwaltung des internen Speicherplatzes für Anwendungen; Verwaltung und Betrieb der angeschlossenen Geräte; Schutzfunktionen z. B. durch Zugriffsbeschränkungen. Die Gewichtung zwischen diesen Aufgaben wandelte sich im Laufe der Zeit, insbesondere wird Schutzfunktionen wie dem Speicherschutz oder begrenzten Benutzerrechten heute eine höhere Bedeutung zugemessen als noch in den 1990er Jahren. Dies macht Systeme allgemein robuster, reduziert z. B. die Zahl der Programm- und Systemabstürze und macht das System auch stabiler gegen Angriffe von außen, etwa durch Computerviren.

Dieser Artikel behandelt den Begriff „Betriebssystem“ hauptsächlich im Kontext „allgemein zur Informationsverarbeitung verwendete Computersysteme“. Daneben sind Betriebssysteme (mit ggf. spezialisierter Funktionalität) grundsätzlich in nahezu allen Geräten im Einsatz, in denen Software betrieben wird (wie Spielecomputer, Mobiltelefone, Navigationssysteme, Maschinen der Maschinenbaubranchen u. v. a.). Auch viele Steuerungssysteme (eingebettetes System) die z. B. in Flugzeugen, Autos, Zügen, oder in Satelliten zu finden sind, besitzen spezialisierte Betriebssysteme.

Arten von Betriebssystemen

Single-Tasking und Multi-Tasking

Ein Single-Tasking-System kann nur ein Programm gleichzeitig ausführen, während ein Multi-Tasking-Betriebssystem die gleichzeitige Ausführung mehrerer Programme ermöglicht. Dies wird durch Time-Sharing erreicht, bei dem die verfügbare Prozessorzeit auf mehrere Prozesse aufgeteilt wird. Diese Prozesse werden von einem Task-Scheduling-Subsystem des Betriebssystems wiederholt in Zeitscheiben unterbrochen. Multitasking kann in präemptive und kooperative Typen unterteilt werden. Beim präemptiven Multitasking teilt das Betriebssystem die CPU-Zeit auf und widmet jedem der Programme einen Slot. Unix-ähnliche Betriebssysteme wie Linux - aber auch nicht-Unix-ähnliche wie AmigaOS - unterstützen präemptives Multitasking. Kooperatives Multitasking wird erreicht, indem sich jeder Prozess darauf verlässt, dass er den anderen Prozessen auf eine bestimmte Weise Zeit zur Verfügung stellt. 16-Bit-Versionen von Microsoft Windows verwenden kooperatives Multitasking; 32-Bit-Versionen von Windows NT und Win9x verwenden präemptives Multitasking.

Einzel- und Mehrbenutzer

Einzelbenutzer-Betriebssysteme haben keine Möglichkeiten zur Unterscheidung von Benutzern, können aber die gleichzeitige Ausführung mehrerer Programme ermöglichen. Ein Mehrbenutzer-Betriebssystem erweitert das Grundkonzept des Multitasking um Einrichtungen, die Prozesse und Ressourcen, wie z. B. Festplattenspeicher, identifizieren, die mehreren Benutzern gehören, und das System erlaubt mehreren Benutzern die gleichzeitige Interaktion mit dem System. Time-Sharing-Betriebssysteme planen Aufgaben für eine effiziente Nutzung des Systems und können auch Abrechnungssoftware für die Kostenzuweisung von Prozessorzeit, Massenspeicher, Druck und anderen Ressourcen für mehrere Benutzer enthalten.

Verteilt

Ein verteiltes Betriebssystem verwaltet eine Gruppe verschiedener, vernetzter Computer und lässt sie wie einen einzigen Computer erscheinen, da alle Berechnungen verteilt (auf die einzelnen Computer aufgeteilt) sind.

Schablone

Im Zusammenhang mit verteilten und Cloud-Computing-Betriebssystemen bezieht sich Templating auf die Erstellung eines einzigen Images einer virtuellen Maschine als Gastbetriebssystem, das dann als Tool für mehrere laufende virtuelle Maschinen gespeichert wird. Diese Technik wird sowohl bei der Virtualisierung als auch bei der Verwaltung von Cloud Computing eingesetzt und ist in großen Serverlagern üblich.

Eingebettet

Eingebettete Betriebssysteme sind für den Einsatz in eingebetteten Computersystemen vorgesehen. Sie sind für den Betrieb auf kleinen Geräten mit geringer Autonomie (z. B. PDAs) ausgelegt. Sie sind sehr kompakt und extrem effizient und können mit einer begrenzten Menge an Ressourcen arbeiten. Windows CE und Minix 3 sind einige Beispiele für eingebettete Betriebssysteme.

Echtzeit

Ein Echtzeitbetriebssystem ist ein Betriebssystem, das die Verarbeitung von Ereignissen oder Daten zu einem bestimmten Zeitpunkt garantiert. Ein Echtzeit-Betriebssystem kann Single- oder Multitasking betreiben, aber wenn es Multitasking betreibt, verwendet es spezielle Scheduling-Algorithmen, um ein deterministisches Verhalten zu erreichen. Ein solches ereignisgesteuertes System schaltet zwischen Tasks auf der Grundlage ihrer Prioritäten oder externer Ereignisse um, während Time-Sharing-Betriebssysteme Tasks auf der Grundlage von Taktunterbrechungen umschalten.

Bibliothek

Ein Bibliotheksbetriebssystem ist ein System, bei dem die Dienste, die ein typisches Betriebssystem bereitstellt, wie z. B. die Vernetzung, in Form von Bibliotheken bereitgestellt und mit dem Anwendungs- und Konfigurationscode zu einem Unikernel zusammengesetzt werden: ein spezialisiertes Maschinenabbild mit einem einzigen Adressraum, das in Cloud- oder eingebetteten Umgebungen eingesetzt werden kann.

Geschichte

Frühe Computer wurden gebaut, um eine Reihe von Einzelaufgaben auszuführen, wie zum Beispiel eine Rechenmaschine. Grundlegende Betriebssystemfunktionen wurden in den 1950er Jahren entwickelt, wie z. B. residente Überwachungsfunktionen, die automatisch verschiedene Programme nacheinander ausführen konnten, um die Verarbeitung zu beschleunigen. In ihrer modernen und komplexeren Form gab es Betriebssysteme erst in den frühen 1960er Jahren. Es kamen Hardwarefunktionen hinzu, die die Nutzung von Laufzeitbibliotheken, Unterbrechungen und Parallelverarbeitung ermöglichten. Als Personal Computer in den 1980er Jahren populär wurden, wurden für sie Betriebssysteme entwickelt, die dem Konzept der Betriebssysteme für größere Computer ähnelten.

In den 1940er Jahren hatten die ersten elektronischen Digitalsysteme noch keine Betriebssysteme. Elektronische Systeme dieser Zeit wurden über Reihen von mechanischen Schaltern oder durch Überbrückungsdrähte auf Steckplatten programmiert. Es handelte sich um Spezialsysteme, die beispielsweise ballistische Tabellen für das Militär erstellten oder den Druck von Gehaltsabrechnungen anhand von Daten auf Lochkarten steuerten. Nach der Erfindung programmierbarer Mehrzweckcomputer wurden Maschinensprachen (bestehend aus Zeichenketten mit den Binärziffern 0 und 1 auf Lochstreifen) eingeführt, die den Programmiervorgang beschleunigten (Stern, 1981).

OS/360 wurde ab 1966 auf den meisten IBM-Großrechnern eingesetzt, darunter auch auf Computern, die im Apollo-Programm verwendet wurden.

In den frühen 1950er Jahren konnte ein Computer immer nur ein Programm gleichzeitig ausführen. Jeder Benutzer hatte für einen begrenzten Zeitraum die alleinige Nutzung des Computers und kam zu einem festgelegten Zeitpunkt mit seinem Programm und den Daten auf Lochkarten oder Lochstreifen. Das Programm wurde in die Maschine geladen, und die Maschine arbeitete so lange, bis das Programm abgeschlossen war oder abstürzte. Die Programme konnten im Allgemeinen über eine Frontplatte mit Kippschaltern und Kontrollleuchten überprüft werden. Es heißt, dass Alan Turing dies auf der frühen Manchester Mark 1-Maschine meisterhaft beherrschte, und er leitete bereits das primitive Konzept eines Betriebssystems aus den Prinzipien der universellen Turing-Maschine ab.

Spätere Maschinen verfügten über Programmbibliotheken, die mit dem Programm des Benutzers verknüpft wurden, um Operationen wie Ein- und Ausgabe und Kompilierung (Erzeugung von Maschinencode aus menschenlesbarem symbolischem Code) zu unterstützen. Dies war die Geburtsstunde des modernen Betriebssystems. Allerdings führten die Maschinen immer noch jeweils einen einzelnen Job aus. An der Universität Cambridge in England war die Warteschlange eine Wäscheleine, an der Bänder mit verschiedenfarbigen Wäscheklammern aufgehängt wurden, um die Priorität eines Auftrags anzuzeigen.

In den späten 1950er Jahren tauchten erste Programme auf, die man als Betriebssysteme bezeichnen könnte. Als frühestes Beispiel wird oft GM-NAA I/O angeführt, das 1956 auf der IBM 704 veröffentlicht wurde. Das erste bekannte Beispiel, das sich tatsächlich auf sich selbst bezog, war das SHARE Operating System, eine Weiterentwicklung von GM-NAA I/O, das 1959 veröffentlicht wurde. In einem Papier vom Mai 1960, in dem das System beschrieben wurde, bemerkte George Ryckman:

Die Entwicklung von Computerbetriebssystemen hat das Problem, ein Programm oder eine Reihe von Programmen effizient auf den Computer zu bringen und wieder zu entfernen, wesentlich erleichtert.

Eines der berühmteren Beispiele, das oft in Diskussionen über frühe Systeme auftaucht, ist der Atlas Supervisor, der 1962 auf dem Atlas lief. In einem Artikel vom Dezember 1961, in dem das System beschrieben wird, wird es als solches bezeichnet, aber der Kontext "das Betriebssystem" geht eher in die Richtung "das System arbeitet auf diese Weise". Das Atlas-Team selbst verwendete den Begriff "Supervisor", der zusammen mit "Monitor" weit verbreitet war. Brinch Hansen bezeichnete es als "den bedeutendsten Durchbruch in der Geschichte der Betriebssysteme".

Mainframes

In den 1950er Jahren wurden viele wichtige Funktionen auf dem Gebiet der Betriebssysteme für Großrechner entwickelt, darunter Stapelverarbeitung, Unterbrechung der Eingabe/Ausgabe, Pufferung, Multitasking, Spooling, Laufzeitbibliotheken, Link-Loading und Programme zum Sortieren von Datensätzen in Dateien. Diese Funktionen wurden nach dem Ermessen der Anwendungsprogrammierer in die Anwendungssoftware aufgenommen oder nicht, anstatt in ein separates Betriebssystem, das von allen Anwendungen genutzt wurde.

In den 1960er Jahren führte IBM mit OS/360 das Konzept eines einzigen Betriebssystems für eine ganze Produktlinie ein, was für den Erfolg der System/360-Maschinen entscheidend war. Die aktuellen Mainframe-Betriebssysteme von IBM sind entfernte Nachfahren dieses ursprünglichen Systems, und moderne Maschinen sind mit Anwendungen, die für OS/360 geschrieben wurden, abwärtskompatibel.

OS/360 war auch der Vorreiter des Konzepts, dass das Betriebssystem alle genutzten Systemressourcen verfolgt, einschließlich der Zuweisung von Programm- und Datenspeicherplatz im Hauptspeicher und von Dateispeicherplatz im Sekundärspeicher sowie der Dateisperrung bei Aktualisierungen. Wenn ein Prozess aus irgendeinem Grund beendet wird, werden alle diese Ressourcen vom Betriebssystem zurückverlangt.

Mit dem alternativen CP-67-System für den S/360-67 begann eine ganze Reihe von IBM-Betriebssystemen, die sich auf das Konzept der virtuellen Maschinen konzentrierten. Andere Betriebssysteme, die auf IBM-Mainframes der S/360-Serie eingesetzt wurden, waren unter anderem von IBM entwickelte Systeme: DOS/360 (Disk Operating System), TSS/360 (Time Sharing System), TOS/360 (Tape Operating System), BOS/360 (Basic Operating System) und ACP (Airline Control Program), sowie einige Nicht-IBM-Systeme: MTS (Michigan Terminal System), MUSIC (Multi-User System for Interactive Computing) und ORVYL (Stanford Timesharing System).

Die Control Data Corporation entwickelte in den 1960er Jahren das Betriebssystem SCOPE für die Stapelverarbeitung. In Zusammenarbeit mit der Universität von Minnesota wurden in den 1970er Jahren die Betriebssysteme Kronos und später NOS entwickelt, die die gleichzeitige Nutzung von Stapelverarbeitung und Timesharing unterstützten. Wie bei vielen kommerziellen Timesharing-Systemen war die Schnittstelle eine Erweiterung der Dartmouth-BASIC-Betriebssysteme, die zu den Pionierleistungen im Bereich Timesharing und Programmiersprachen gehörten. In den späten 1970er Jahren entwickelten Control Data und die Universität von Illinois das Betriebssystem PLATO, das Plasma-Bildschirme und Timesharing-Netzwerke über große Entfernungen nutzte. PLATO war für die damalige Zeit bemerkenswert innovativ und bot Echtzeit-Chat und grafische Spiele für mehrere Benutzer.

1961 stellte die Burroughs Corporation den B5000 mit dem Betriebssystem MCP (Master Control Program) vor. Die B5000 war eine Stack-Maschine, die ausschließlich Hochsprachen ohne Assembler unterstützte. MCP war das erste Betriebssystem, das ausschließlich in einer Hochsprache (ESPOL, einem Dialekt von ALGOL) geschrieben war. MCP führte auch viele andere bahnbrechende Innovationen ein, wie zum Beispiel die erste kommerzielle Implementierung von virtuellem Speicher. Während der Entwicklung der AS/400 machte IBM Burroughs den Vorschlag, MCP für die AS/400-Hardware zu lizenzieren. Dieser Vorschlag wurde vom Burroughs-Management abgelehnt, um die bestehende Hardware-Produktion zu schützen. MCP wird auch heute noch in der MCP/ClearPath-Computerreihe der Firma Unisys verwendet.

UNIVAC, der erste kommerzielle Computerhersteller, produzierte eine Reihe von EXEC-Betriebssystemen. Wie alle frühen Großrechnersysteme verwaltete dieses stapelorientierte System Magnettrommeln, Disketten, Kartenleser und Zeilendrucker. In den 1970er Jahren produzierte UNIVAC das Real-Time Basic (RTB)-System zur Unterstützung von Time-Sharing in großem Maßstab, das ebenfalls dem Dartmouth BC-System nachempfunden war.

General Electric entwickelte General Electric Comprehensive Operating Supervisor (GECOS), das hauptsächlich die Stapelverarbeitung unterstützte. Nach seiner Übernahme durch Honeywell wurde es in General Comprehensive Operating System (GCOS) umbenannt.

Bell Labs, General Electric und das MIT entwickelten den Multiplexed Information and Computing Service (Multics), der das Konzept der ringförmigen Sicherheitsprivilegstufen einführte.

Die Digital Equipment Corporation entwickelte viele Betriebssysteme für ihre verschiedenen Computerlinien, darunter die Time-Sharing-Systeme TOPS-10 und TOPS-20 für die 36-Bit-Systeme der PDP-10-Klasse. Vor dem weitverbreiteten Einsatz von UNIX war TOPS-10 ein besonders beliebtes System an Universitäten und in der frühen ARPANET-Gemeinschaft. RT-11 war ein Einzelbenutzer-Echtzeitbetriebssystem für die Minicomputer der PDP-11-Klasse, und RSX-11 war das entsprechende Mehrbenutzer-Betriebssystem.

Von den späten 1960er bis zu den späten 1970er Jahren entwickelten sich mehrere Hardwarefunktionen, die es ermöglichten, ähnliche oder portierte Software auf mehr als einem System laufen zu lassen. Frühe Systeme nutzten die Mikroprogrammierung, um Funktionen auf ihren Systemen zu implementieren, die es ermöglichten, dass verschiedene zugrunde liegende Computerarchitekturen den Anschein erweckten, die gleichen zu sein wie andere in einer Serie. In der Tat waren die meisten 360er nach dem 360/40 (mit Ausnahme des 360/44, 360/75, 360/91, 360/95 und 360/195) mikroprogrammierte Implementierungen.

Die enormen Investitionen in Software für diese Systeme, die seit den 1960er Jahren getätigt wurden, veranlassten die meisten der ursprünglichen Computerhersteller, zusammen mit der Hardware auch kompatible Betriebssysteme zu entwickeln. Zu den wichtigsten unterstützten Mainframe-Betriebssystemen gehören:

  • Burroughs MCP - B5000, 1961 bis Unisys Clearpath/MCP, heute
  • IBM OS/360 - IBM System/360, 1966 bis IBM z/OS, heute
  • IBM CP-67 - IBM System/360, 1967 bis IBM z/VM
  • UNIVAC EXEC 8 - UNIVAC 1108, 1967, bis OS 2200 Unisys Clearpath Dorado, heute

Mikrocomputer

PC DOS war ein frühes Betriebssystem für Personal Computer, das eine Befehlszeilenschnittstelle besaß.
Mac OS von Apple Computer wurde das erste weit verbreitete Betriebssystem mit einer grafischen Benutzeroberfläche. Viele seiner Funktionen, wie Fenster und Symbole, wurden später in grafischen Benutzeroberflächen alltäglich.

Die ersten Mikrocomputer hatten weder die Kapazität noch den Bedarf für die ausgefeilten Betriebssysteme, die für Großrechner und Minis entwickelt worden waren; es wurden minimalistische Betriebssysteme entwickelt, die oft aus dem ROM geladen wurden und als Monitore bekannt waren. Ein bemerkenswertes frühes Festplatten-Betriebssystem war CP/M, das von vielen frühen Mikrocomputern unterstützt wurde und von Microsofts MS-DOS stark imitiert wurde, das sich als Betriebssystem für den IBM PC großer Beliebtheit erfreute (IBMs Version davon wurde IBM DOS oder PC DOS genannt). In den 1980er Jahren gab Apple Computer Inc. (heute Apple Inc.) seine beliebte Apple-II-Serie von Mikrocomputern auf, um den Apple Macintosh-Computer mit einer innovativen grafischen Benutzeroberfläche (GUI) für das Mac OS einzuführen.

Die Einführung des Intel 80386-CPU-Chips im Oktober 1985 mit 32-Bit-Architektur und Paging-Fähigkeiten ermöglichte es Personalcomputern, Multitasking-Betriebssysteme auszuführen, wie sie auf früheren Minicomputern und Großrechnern eingesetzt wurden. Microsoft reagierte auf diesen Fortschritt, indem es Dave Cutler einstellte, der das VMS-Betriebssystem für Digital Equipment Corporation entwickelt hatte. Er war federführend bei der Entwicklung des Betriebssystems Windows NT, das auch heute noch die Grundlage für die Betriebssysteme von Microsoft bildet. Steve Jobs, ein Mitbegründer von Apple Inc. gründete NeXT Computer Inc. und entwickelte das Betriebssystem NEXTSTEP. NEXTSTEP wurde später von Apple Inc. übernommen und zusammen mit Code von FreeBSD als Kern von Mac OS X (macOS nach der letzten Namensänderung) verwendet.

Das GNU-Projekt wurde von dem Aktivisten und Programmierer Richard Stallman mit dem Ziel ins Leben gerufen, einen vollständigen Ersatz für das proprietäre UNIX-Betriebssystem durch freie Software zu schaffen. Während das Projekt bei der Duplizierung der Funktionalität verschiedener Teile von UNIX sehr erfolgreich war, erwies sich die Entwicklung des GNU Hurd Kernels als unproduktiv. 1991 veröffentlichte der finnische Informatikstudent Linus Torvalds mit Hilfe von Freiwilligen, die über das Internet zusammenarbeiteten, die erste Version des Linux-Kernels. Er wurde bald mit den GNU-Benutzerraumkomponenten und der Systemsoftware zu einem vollständigen Betriebssystem zusammengeführt. Seitdem wird die Kombination der beiden Hauptkomponenten von der Softwareindustrie in der Regel einfach als "Linux" bezeichnet, eine Namenskonvention, die Stallman und die Free Software Foundation nach wie vor ablehnen und den Namen GNU/Linux vorziehen. Die Berkeley Software Distribution, bekannt als BSD, ist das UNIX-Derivat, das von der University of California, Berkeley, seit den 1970er Jahren vertrieben wird. Sie wurde frei verteilt und auf viele Minicomputer portiert und gewann schließlich auch eine Anhängerschaft für die Verwendung auf PCs, hauptsächlich als FreeBSD, NetBSD und OpenBSD.

Meilensteine

Der C64, ein Heimcomputer der 1980er Jahre

C64C-System mit VC1541-II-Diskettenlaufwerk und 1084S RGB-Monitor (1986)

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 64 KiB RAM, einer Tastatur und einem Monitor- bzw. HF-Ausgang. Einer der populärsten dieser Computer war der Commodore C64 mit dem Mikroprozessor 6510 (einer Variante des 6502). Dieser Computer verfügte über einen in einem eigenen 8 KiB-ROM-Baustein befindlichen Systemkern namens Kernal mitsamt einem BIOS (Basic Input/Output System), das die Geräte Bildschirm, Tastatur, serielle IEC-Schnittstelle für Diskettenlaufwerke bzw. Drucker, Kassetteninterface initialisierte und über ein Kanalkonzept teilweise abstrahierte. Über ein separates 8 KiB-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.

Basic-Programm Maschinensprachenprogramm
8k ROM BASIC PRINT#,FOR
8k ROM-BIOS (Gerätetreiber) / Kernal / JSR
Hardware (Prozessor(en), Speicher, Geräte)

Abstraktionsschichten im Betriebssystem des Heimcomputers C64

Disk Operating System (DOS)

Der Ursprung von DOS liegt in CP/M und wurde 1974 von Digital Research eingesetzt. Die Portierung auf den Motorola 68000, genannt CP/M-68k, selbst kein großer kommerzieller Erfolg, wurde zur Grundlage für TOS, dem Betriebssystem des Atari ST. MS-DOS Version 1.0 erschien 1981 als Nachbildung von CP/M und wurde für IBM-PCs eingesetzt. Es setzt auf das BIOS auf und stellt Dateisystemoperationen zur Verfügung.

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 Unternehmen verzichtet.

Der PC konnte mit seinem Intel-8088-Prozessor (16-Bit-Register) bis zu 1 MiB Speicher adressieren, die ersten Modelle waren jedoch nur mit 64 KiB ausgestattet. Diskettenlaufwerke lösten die alten Kassettenrekorder als Speichermedium ab. Sie erlauben vielfaches Schreiben und Lesen einzeln adressierbarer 512-Byte-Blöcke. Die Benutzung wird durch ein Disk Operating System (DOS) vereinfacht, das ein abstraktes Dateikonzept bereitstellt. Blöcke können zu beliebig großen Clustern (Zuordnungseinheit – kleinste für das Betriebssystem ansprechbare Einheit) zusammengefasst werden. Dateien (logische Informationseinheiten) belegen einen oder mehrere dieser (verketteten) Cluster. Eine Diskette kann viele Dateien enthalten, die über Namen erreichbar sind.

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 keine für alle Zwecke ausreichende Abstraktion 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 über das Betriebssystem hinweg und schrieben z. B. direkt in den Bildschirmspeicher. MS-DOS wurde mit einem Satz von Programmen (sogenannten Werkzeugen) und einem Kommandointerpreter (COMMAND.COM) ausgeliefert.

Anwenderprogramm (COMMAND.COM, WORDSTAR)
MSDOS (Dateisystem) INT
BIOS (Gerätetreiber) INT
Hardware (Prozessor(en), Speicher, Geräte)

Abstraktionsschichten eines PC unter DOS

Beispiele

Unix und Unix-ähnliche Betriebssysteme

Entwicklung der Unix-Systeme

Unix wurde ursprünglich in Assembler geschrieben. Ken Thompson schrieb B, das hauptsächlich auf BCPL basierte, basierend auf seinen Erfahrungen im MULTICS-Projekt. B wurde durch C ersetzt, und Unix, das in C neu geschrieben wurde, entwickelte sich zu einer großen, komplexen Familie von miteinander verbundenen Betriebssystemen, die jedes moderne Betriebssystem beeinflusst haben (siehe Geschichte).

Die Unix-ähnliche Familie ist eine vielfältige Gruppe von Betriebssystemen mit mehreren großen Unterkategorien, darunter System V, BSD und Linux. Der Name "UNIX" ist ein Warenzeichen von The Open Group, die ihn für die Verwendung mit jedem Betriebssystem lizenziert, das nachweislich ihren Definitionen entspricht. Der Begriff "UNIX-ähnlich" wird üblicherweise verwendet, um sich auf die große Anzahl von Betriebssystemen zu beziehen, die dem ursprünglichen UNIX ähneln.

Unix-ähnliche Systeme laufen auf einer Vielzahl von Computerarchitekturen. Sie werden häufig für Server in Unternehmen sowie für Workstations in akademischen und technischen Umgebungen verwendet. Freie UNIX-Varianten, wie Linux und BSD, sind in diesen Bereichen sehr beliebt.

Fünf Betriebssysteme sind von The Open Group (Inhaberin der Unix-Marke) als Unix zertifiziert. HP-UX von HP und AIX von IBM sind beide Abkömmlinge des ursprünglichen System V Unix und können nur auf der Hardware des jeweiligen Herstellers betrieben werden. Im Gegensatz dazu kann Solaris von Sun Microsystems auf einer Vielzahl von Hardwaretypen ausgeführt werden, darunter x86- und Sparc-Server sowie PCs. Apples macOS, ein Ersatz für Apples früheres (nicht-Unix) Mac OS, ist eine hybride, kernelbasierte BSD-Variante, die von NeXTSTEP, Mach und FreeBSD abgeleitet ist. Die z/OS UNIX System Services von IBM enthalten eine Shell und Dienstprogramme, die auf Mortice Kerns' InterOpen-Produkten basieren.

Die Interoperabilität von Unix wurde durch die Einführung des POSIX-Standards angestrebt. Der POSIX-Standard kann auf jedes Betriebssystem angewendet werden, obwohl er ursprünglich für verschiedene Unix-Varianten entwickelt wurde.

BSD und seine Abkömmlinge

Der erste Server für das World Wide Web lief auf NeXTSTEP, das auf BSD basierte.

Eine Untergruppe der Unix-Familie ist die Berkeley Software Distribution-Familie, zu der FreeBSD, NetBSD und OpenBSD gehören. Diese Betriebssysteme sind am häufigsten auf Webservern zu finden, obwohl sie auch als Betriebssystem für Personalcomputer eingesetzt werden können. Das Internet verdankt seine Existenz zu einem großen Teil BSD, da viele der Protokolle, die heute von Computern zum Verbinden, Senden und Empfangen von Daten über ein Netzwerk verwendet werden, in BSD weitgehend implementiert und verfeinert wurden. Auch das World Wide Web wurde erstmals auf einer Reihe von Computern demonstriert, auf denen ein auf BSD basierendes Betriebssystem namens NeXTSTEP lief.

1974 installierte die University of California, Berkeley, ihr erstes Unix-System. Im Laufe der Zeit fügten Studenten und Mitarbeiter der dortigen Informatikabteilung neue Programme hinzu, um die Arbeit zu erleichtern, z. B. Texteditoren. Als Berkeley 1978 neue VAX-Computer erhielt, auf denen Unix installiert war, modifizierten die Studenten der Schule Unix noch mehr, um die Möglichkeiten der Computerhardware zu nutzen. Die Defense Advanced Research Projects Agency des US-Verteidigungsministeriums zeigte sich interessiert und beschloss, das Projekt zu finanzieren. Viele Schulen, Unternehmen und Regierungsorganisationen wurden aufmerksam und begannen, die Berkeley-Version von Unix anstelle der offiziellen, von AT&T vertriebenen Version zu verwenden.

Als Steve Jobs 1985 Apple Inc. verließ, gründete er das Unternehmen NeXT Inc., das High-End-Computer herstellte, die mit einer BSD-Variante namens NeXTSTEP liefen. Einer dieser Computer wurde von Tim Berners-Lee als erster Webserver verwendet, um das World Wide Web zu schaffen.

Entwickler wie Keith Bostic ermutigten das Projekt, jeglichen unfreien Code, der von Bell Labs stammte, zu ersetzen. Sobald dies jedoch geschehen war, verklagte AT&T. Nach zwei Jahren Rechtsstreitigkeiten brachte das BSD-Projekt eine Reihe von freien Derivaten hervor, wie NetBSD und FreeBSD (beide 1993) und OpenBSD (1995 aus NetBSD hervorgegangen).

macOS

macOS (früher "Mac OS X" und später "OS X") ist eine Reihe von Open-Core-Grafikbetriebssystemen, die von Apple Inc. entwickelt, vermarktet und verkauft werden. macOS ist der Nachfolger des klassischen Mac OS, das seit 1984 das wichtigste Betriebssystem von Apple war. Im Gegensatz zu seinem Vorgänger ist macOS ein UNIX-Betriebssystem, das auf Technologien aufbaut, die in der zweiten Hälfte der 1980er Jahre und bis zum Kauf des Unternehmens durch Apple Anfang 1997 bei NeXT entwickelt wurden. Das Betriebssystem wurde erstmals 1999 als Mac OS X Server 1.0 veröffentlicht, gefolgt im März 2001 von einer Client-Version (Mac OS X v10.0 "Cheetah"). Seitdem wurden sechs weitere unterschiedliche "Client"- und "Server"-Editionen von macOS veröffentlicht, bis die beiden in OS X 10.7 "Lion" zusammengeführt wurden.

Vor der Verschmelzung mit macOS war die Server-Edition - macOS Server - architektonisch identisch mit dem Desktop-Pendant und lief in der Regel auf Apples Macintosh-Server-Hardware. macOS Server enthielt Software-Tools für das Management von Arbeitsgruppen und die Verwaltung, die einen vereinfachten Zugang zu wichtigen Netzwerkdiensten bieten, darunter ein Mail-Transfer-Agent, ein Samba-Server, ein LDAP-Server, ein Domain Name Server und andere. Mit Mac OS X 10.7 Lion wurden alle Serveraspekte von Mac OS X Server in die Client-Version integriert und das Produkt in "OS X" umbenannt (das Wort "Mac" wurde aus dem Namen entfernt). Die Server-Tools werden jetzt als Programm angeboten.

z/OS UNIX-Systemdienste

Erstmals eingeführt als OpenEdition-Upgrade für MVS/ESA System Product Version 4 Release 3, angekündigt im Februar 1993 mit Unterstützung für POSIX und andere Standards. z/OS UNIX System Services baut auf MVS-Diensten auf und kann nicht unabhängig davon laufen. Während IBM OpenEdition ursprünglich eingeführt hat, um die FIPS-Anforderungen zu erfüllen, erfordern mehrere z/OS-Komponenten jetzt UNIX-Dienste, z. B. TCP/IP.

Linux

Ubuntu, Desktop-Linux-Distribution
Linux, ein unixähnliches Betriebssystem, wurde erstmals am 17. September 1991 von Linus Torvalds veröffentlicht. Bild von Tux, dem Pinguin, dem Maskottchen von Linux.

Der Linux-Kernel entstand 1991 als ein Projekt von Linus Torvalds, als er noch Student in Finnland war. Er veröffentlichte Informationen über sein Projekt in einer Newsgroup für Computerstudenten und Programmierer und erhielt Unterstützung und Hilfe von Freiwilligen, denen es gelang, einen vollständigen und funktionsfähigen Kernel zu erstellen.

Linux ist Unix-ähnlich, wurde aber im Gegensatz zu BSD und seinen Varianten ohne jeglichen Unix-Code entwickelt. Aufgrund seines offenen Lizenzmodells steht der Linux-Kernel-Code für Studien und Änderungen zur Verfügung, was dazu führte, dass er auf einer Vielzahl von Computern - von Supercomputern bis zu Smartwatches - eingesetzt wird. Obwohl Schätzungen zufolge nur 1,82 % aller "Desktop"-PCs (oder Laptops) mit Linux ausgestattet sind, wurde es in großem Umfang in Servern und eingebetteten Systemen wie Mobiltelefonen eingesetzt. Linux hat Unix auf vielen Plattformen abgelöst und wird auf den meisten Supercomputern eingesetzt, auch auf den Top 385. Viele der gleichen Computer sind auch auf Green500 vertreten (allerdings in anderer Reihenfolge), und Linux läuft auf den Top 10. Linux wird auch häufig auf anderen kleinen energieeffizienten Computern wie Smartphones und Smartwatches eingesetzt. Der Linux-Kernel wird in einigen beliebten Distributionen verwendet, z. B. Red Hat, Debian, Ubuntu, Linux Mint und Googles Android, Chrome OS und Chromium OS.

Microsoft Windows

Microsoft Windows ist eine Familie proprietärer Betriebssysteme, die von der Microsoft Corporation entwickelt wurde und in erster Linie auf Computer mit Intel-Architektur abzielt, mit einem geschätzten Anteil von 88,9 Prozent an der Gesamtnutzung auf Computern mit Internetanschluss. Die neueste Version ist Windows 11.

Im Jahr 2011 überholte Windows 7 Windows XP als die am häufigsten genutzte Version.

Microsoft Windows wurde erstmals 1985 als Betriebssystem auf der Grundlage von MS-DOS veröffentlicht, dem Standardbetriebssystem, das damals auf den meisten Personal Computern mit Intel-Architektur installiert war. Im Jahr 1995 wurde Windows 95 veröffentlicht, das MS-DOS nur noch als Bootstrap verwendete. Aus Gründen der Abwärtskompatibilität konnte Win9x MS-DOS im Echtmodus und 16-Bit-Windows-3.x-Treiber ausführen. Windows ME, das im Jahr 2000 veröffentlicht wurde, war die letzte Version der Win9x-Familie. Alle späteren Versionen basieren auf dem Windows NT-Kernel. Die aktuellen Client-Versionen von Windows laufen auf IA-32-, x86-64- und ARM-Mikroprozessoren. Darüber hinaus wird Itanium in der älteren Serverversion Windows Server 2008 R2 weiterhin unterstützt. In der Vergangenheit unterstützte Windows NT weitere Architekturen.

Die Server-Editionen von Windows sind weit verbreitet, allerdings ist die Nutzung von Windows auf Servern nicht so weit verbreitet wie auf PCs, da Windows mit Linux und BSD um den Marktanteil auf Servern konkurriert.

ReactOS ist ein alternatives Windows-Betriebssystem, das auf der Grundlage von Windows entwickelt wird - ohne den Code von Microsoft zu verwenden.

Andere

Es gab viele Betriebssysteme, die zu ihrer Zeit von Bedeutung waren, es aber heute nicht mehr sind, wie z. B. AmigaOS; OS/2 von IBM und Microsoft; das klassische Mac OS, der Nicht-Unix-Vorläufer von Apples macOS; BeOS; XTS-300; RISC OS; MorphOS; Haiku; BareMetal und FreeMint. Einige davon werden noch immer in Nischenmärkten eingesetzt und als Minderheitsplattformen für Enthusiasten und Spezialanwendungen weiterentwickelt. OpenVMS, ehemals von DEC, wird immer noch aktiv von VMS Software Inc. entwickelt. Andere Betriebssysteme werden fast ausschließlich im akademischen Bereich für die Betriebssystemausbildung oder zur Erforschung von Betriebssystemkonzepten eingesetzt. Ein typisches Beispiel für ein System, das beide Aufgaben erfüllt, ist MINIX, während z.B. Singularity ausschließlich für die Forschung verwendet wird. Ein weiteres Beispiel ist das Oberon-System, das in den 1980er Jahren an der ETH Zürich von Niklaus Wirth, Jürg Gutknecht und einer Gruppe von Studenten am damaligen Institut für Computersysteme entwickelt wurde. Es wurde hauptsächlich für Forschung, Lehre und die tägliche Arbeit in Wirths Gruppe verwendet.

Andere Betriebssysteme konnten keine nennenswerten Marktanteile gewinnen, haben aber Innovationen eingeführt, die die gängigen Betriebssysteme beeinflusst haben, nicht zuletzt Plan 9 von Bell Labs.

Komponenten

Die Komponenten eines Betriebssystems sind alle dazu da, dass die verschiedenen Teile eines Computers zusammenarbeiten. Die gesamte Anwendersoftware muss das Betriebssystem durchlaufen, um die Hardware nutzen zu können, ganz gleich, ob es sich um eine einfache Maus oder Tastatur oder um eine komplexe Internetkomponente handelt.

Kernel

Ein Kernel ist das Bindeglied zwischen der Anwendungssoftware und der Hardware eines Computers.

Mit Hilfe von Firmware und Gerätetreibern bietet der Kernel die grundlegendste Kontrolle über alle Hardwaregeräte des Computers. Er verwaltet den Speicherzugriff für Programme im Arbeitsspeicher, legt fest, welche Programme auf welche Hardwareressourcen zugreifen dürfen, richtet die Betriebszustände der CPU ein oder setzt sie zurück, um jederzeit einen optimalen Betrieb zu gewährleisten, und organisiert die Daten für die langfristige nichtflüchtige Speicherung mit Dateisystemen auf Medien wie Festplatten, Bändern, Flash-Speicher usw.

Programmausführung

Das Betriebssystem stellt eine Schnittstelle zwischen einem Anwendungsprogramm und der Computerhardware dar, so dass ein Anwendungsprogramm nur dann mit der Hardware interagieren kann, wenn es den im Betriebssystem programmierten Regeln und Verfahren gehorcht. Das Betriebssystem ist auch eine Reihe von Diensten, die die Entwicklung und Ausführung von Anwendungsprogrammen vereinfachen. Die Ausführung eines Anwendungsprogramms umfasst in der Regel die Erstellung eines Prozesses durch den Betriebssystemkern, der Speicherplatz und andere Ressourcen zuweist, eine Priorität für den Prozess in Multitasking-Systemen festlegt, den binären Programmcode in den Speicher lädt und die Ausführung des Anwendungsprogramms einleitet, das dann mit dem Benutzer und den Hardwaregeräten interagiert. In einigen Systemen kann eine Anwendung jedoch das Betriebssystem auffordern, eine andere Anwendung innerhalb desselben Prozesses auszuführen, entweder als Unterprogramm oder in einem separaten Thread, z. B. die LINK- und ATTACH-Funktionen von OS/360 und Nachfolgern.

Unterbrechungen

Eine Unterbrechung (auch bekannt als Abbruch, Ausnahme, Fehler, Signal und Trap) stellt für die meisten Betriebssysteme eine effiziente Möglichkeit dar, auf die Umgebung zu reagieren. Interrupts veranlassen die Zentraleinheit (CPU), den Kontrollfluss vom laufenden Programm zu einem Interrupt-Handler, auch bekannt als Interrupt-Service-Routine (ISR), zu ändern. Eine Unterbrechungsroutine kann die Zentraleinheit (CPU) dazu veranlassen, einen Kontextwechsel vorzunehmen. Die Details, wie ein Computer eine Unterbrechung verarbeitet, variieren von Architektur zu Architektur, und die Details, wie sich Unterbrechungsdienstroutinen verhalten, variieren von Betriebssystem zu Betriebssystem. Einige Unterbrechungsfunktionen sind jedoch gleich. Die Architektur und das Betriebssystem müssen:

  1. die Kontrolle an eine Interrupt-Service-Routine übergeben.
  2. den Zustand des gerade laufenden Prozesses speichern.
  3. den Zustand wiederherstellen, nachdem die Unterbrechung bedient wurde.
Software-Unterbrechung

Ein Software-Interrupt ist eine Meldung an einen Prozess, dass ein Ereignis eingetreten ist. Ein Software-Interrupt ist eine Nachricht an einen Prozess, dass ein Ereignis eingetreten ist, im Gegensatz zu einem Hardware-Interrupt, der eine Nachricht an die Zentraleinheit (CPU) ist, dass ein Ereignis eingetreten ist. Software-Interrupts sind ähnlich wie Hardware-Interrupts - es findet ein Wechsel weg vom aktuell laufenden Prozess statt. Sowohl Hardware- als auch Software-Interrupts führen eine Interrupt-Service-Routine aus.

Bei Software-Interrupts kann es sich um normal auftretende Ereignisse handeln. Es wird erwartet, dass eine Zeitscheibe auftritt, so dass der Kernel einen Kontextwechsel durchführen muss. Ein Computerprogramm kann einen Timer so einstellen, dass er nach einigen Sekunden auslöst, wenn ein Algorithmus wegen zu vieler Daten zu lange braucht.

Bei Software-Unterbrechungen kann es sich um Fehlerzustände handeln, z. B. um einen fehlerhaften Maschinenbefehl. Die häufigsten Fehlerbedingungen sind jedoch Division durch Null und Zugriff auf eine ungültige Speicheradresse.

Benutzer können Nachrichten an den Kernel senden, um das Verhalten eines laufenden Prozesses zu ändern. In der Befehlszeilenumgebung kann zum Beispiel das Drücken des Interrupt-Zeichens (normalerweise Control-C) den laufenden Prozess beenden.

Um Software-Interrupts für x86-CPUs zu erzeugen, gibt es die INT-Assembleranweisung. Die Syntax lautet INT X, wobei X die Offset-Nummer (im Hexadezimalformat) für die Interrupt-Vektortabelle ist.

Signal

Um Software-Interrupts in Unix-ähnlichen Betriebssystemen zu erzeugen, sendet der Systemaufruf kill(pid,signum) ein Signal an einen anderen Prozess. pid ist die Prozesskennung des empfangenden Prozesses. signum ist die Signalnummer (im mnemonischen Format), die gesendet werden soll. (Der schroffe Name kill wurde gewählt, weil frühe Implementierungen den Prozess nur beendeten).

In Unix-ähnlichen Betriebssystemen informieren Signale Prozesse über das Eintreten von asynchronen Ereignissen. Um asynchron zu kommunizieren, sind Unterbrechungen erforderlich. Ein Grund, warum ein Prozess asynchron mit einem anderen Prozess kommunizieren muss, ist die Lösung einer Variante des klassischen Leser/Schreiber-Problems. Der Writer erhält von der Shell eine Pipe, über die seine Ausgabe an den Eingabestrom des Readers gesendet wird. Die Befehlszeilensyntax lautet alpha | bravo. alpha schreibt in die Pipe, wenn seine Berechnung fertig ist, und schläft dann in der Warteschlange. bravo wird dann in die Ready-Warteschlange verschoben und liest bald aus seinem Eingabestrom. Der Kernel erzeugt Software-Interrupts, um die Pipe zu koordinieren.

Signale können in 7 Kategorien eingeteilt werden. Die Kategorien sind:

  1. wenn ein Prozess normal beendet wird.
  2. wenn ein Prozess eine Fehlerausnahme hat.
  3. wenn einem Prozess eine Systemressource ausgeht.
  4. wenn ein Prozess eine illegale Anweisung ausführt.
  5. wenn ein Prozess ein Alarmereignis auslöst.
  6. wenn ein Prozess über die Tastatur abgebrochen wird.
  7. wenn ein Prozess einen Tracing-Alarm zur Fehlersuche hat.
Hardware-Unterbrechung

Eingabe-/Ausgabegeräte (E/A) sind langsamer als das Taktsignal der CPU. Daher würde es den Computer verlangsamen, wenn die CPU auf die Beendigung jeder E/A warten müsste. Stattdessen kann ein Computer Interrupts für den E/A-Abschluss implementieren, wodurch die Notwendigkeit einer Abfrage oder des Wartens auf die Belegung entfällt.

Bei einigen Computern ist für jedes Zeichen oder Wort ein Interrupt erforderlich, was eine erhebliche Menge an CPU-Zeit kostet. Direkter Speicherzugriff (DMA) ist eine Architekturfunktion, die es Geräten ermöglicht, die CPU zu umgehen und direkt auf den Hauptspeicher zuzugreifen. (Unabhängig von der Architektur kann ein Gerät entweder direkt oder über einen Bus auf den Hauptspeicher zu- oder abgreifen).

Seit dem Intel 8008 (1972) erhalten die meisten CPUs Hardware-Interrupts über Interrupt-Pins. Bei kleinen Computern wird in der Regel ein Interrupt-Controller (APIC) auf der Hauptplatine installiert - zwischen den Pins der CPU und den Bus-Arbitrierungsleitungen. Wenn ein Gerät die CPU unterbrechen will, legt es eine Spannung (in der Regel 5 Volt) auf seine Busarbitrationsleitung und eine Nummer auf den Datenbus. Die Nummer ist ein Index für die Interrupt-Vektortabelle des Betriebssystems.

Unterbrechungsgesteuerte E/A

Wenn ein Computerbenutzer eine Taste auf der Tastatur drückt, erscheint das Zeichen normalerweise sofort auf dem Bildschirm. Wenn der Benutzer die Maus bewegt, bewegt sich der Cursor sofort über den Bildschirm. Jeder Tastendruck und jede Mausbewegung erzeugt eine Unterbrechung, die unterbrechungsgesteuerte E/A genannt wird. Eine unterbrechungsgesteuerte E/A liegt vor, wenn ein Prozess für jedes übertragene Zeichen oder Wort eine Unterbrechung auslöst.

Direkter Speicherzugriff

Ein Block-E/A-Interrupt tritt auf, wenn ein Prozess Datenblöcke senden oder empfangen will. Wenn ein Gerät als Blockgerät eingerichtet ist, wird nach jeder Datenblockübertragung ein Interrupt erzeugt. Um diesen Dienst zu erfüllen, ist auf der Hauptplatine ein DMA-Chip (Direct Memory Access) installiert. Dieser Chip ermöglicht es Geräten, die CPU zu umgehen und direkt auf den Speicherbus zuzugreifen. Wenn ein Computerprogramm einen Systemaufruf ausführt, um einen Block-E/A-Schreibvorgang durchzuführen, dann könnte der Systemaufruf die folgenden Anweisungen ausführen:

  • Setzen Sie den Inhalt der CPU-Register (einschließlich des Programmzählers) in den Prozesssteuerungsblock.
  • Erstellen eines Eintrags in der Gerätestatustabelle. Das Betriebssystem verwaltet diese Tabelle, um zu verfolgen, welche Prozesse auf welche Geräte warten. Ein Feld in der Tabelle ist die Speicheradresse des Prozesssteuerungsblocks.
  • Legen Sie alle Zeichen, die an das Gerät gesendet werden sollen, in einen Speicherpuffer.
  • Setzen Sie die Speicheradresse des Speicherpuffers auf ein vorgegebenes Geräteregister.
  • Setzen Sie die Puffergröße (eine ganze Zahl) auf ein anderes vorgegebenes Register.
  • Führen Sie den Maschinenbefehl aus, um den Schreibvorgang zu beginnen.
  • Führen Sie einen Kontextwechsel zum nächsten Prozess in der Bereitschaftswarteschlange durch.

Während des Schreibvorgangs schaltet das Betriebssystem wie üblich auf andere Prozesse um. Wenn das Gerät den Schreibvorgang beendet hat, unterbricht es den laufenden Prozess, indem es eine Unterbrechungsanforderung stellt. Außerdem legt das Gerät eine ganze Zahl auf den Datenbus. Nach der Annahme der Unterbrechungsanforderung wird das Betriebssystem:

  • den Inhalt des Programmzählers (ein Register), gefolgt vom Statusregister, auf den Aufrufstapel schieben.
  • Den Inhalt der anderen Register auf den Aufrufstapel schieben. (Alternativ kann der Inhalt der Register auch in einer Systemtabelle abgelegt werden.)
  • Lesen Sie die Ganzzahl aus dem Datenbus. Die Ganzzahl ist ein Offset für die Unterbrechungsvektortabelle. Die Anweisungen der Vektortabelle werden dann:
  • Zugriff auf die Gerätestatustabelle.
  • Extrahieren des Prozesssteuerungsblocks.
  • Einen Kontextwechsel zurück zum Schreibprozess durchführen.

Wenn die Zeitspanne des schreibenden Prozesses abgelaufen ist, wird das Betriebssystem:

  • Aus dem Aufrufstapel die Register mit Ausnahme des Statusregisters und des Programmzählers entfernen.
  • Das Statusregister wird aus dem Aufrufstapel geholt.
  • Die Adresse der nächsten Anweisung wird aus dem Aufrufstapel geholt und in den Programmzähler zurückgesetzt.

Da der Programmzähler nun zurückgesetzt ist, nimmt der unterbrochene Prozess sein Zeitfenster wieder auf.

DMA auf dem Gerät

Unabhängig von der Architektur kann in einem Gerät ein DMA-Chip installiert sein, um einen direkten Speicherzugriff durchzuführen. Die Aktionen zwischen Gerät und Speicher werden durch das SCSI-RDMA-Protokoll geregelt.

Modi

Privilegieringe für die x86-Mikroprozessorarchitektur, die im geschützten Modus verfügbar sind. Die Betriebssysteme legen fest, welche Prozesse in den einzelnen Modi ausgeführt werden.

Moderne Computer unterstützen mehrere Betriebsmodi. CPUs mit dieser Fähigkeit bieten mindestens zwei Modi: Benutzermodus und Supervisor-Modus. Im Allgemeinen erlaubt der Supervisor-Modus den uneingeschränkten Zugriff auf alle Maschinenressourcen, einschließlich aller MPU-Befehle. Im Benutzermodus werden der Verwendung von Befehlen Grenzen gesetzt, und der direkte Zugriff auf Maschinenressourcen ist in der Regel nicht möglich. CPUs können auch über andere Modi verfügen, die dem Benutzermodus ähnlich sind, wie z. B. die virtuellen Modi, um ältere Prozessortypen zu emulieren, wie z. B. 16-Bit-Prozessoren auf einem 32-Bit-Prozessor oder 32-Bit-Prozessoren auf einem 64-Bit-Prozessor.

Beim Einschalten oder Zurücksetzen beginnt das System im Supervisor-Modus. Sobald ein Betriebssystem-Kernel geladen und gestartet wurde, kann die Grenze zwischen Benutzermodus und Supervisor-Modus (auch als Kernel-Modus bezeichnet) festgelegt werden.

Der Supervisor-Modus wird vom Kernel für Aufgaben auf niedriger Ebene verwendet, für die ein uneingeschränkter Zugriff auf die Hardware erforderlich ist, z. B. für die Steuerung des Speicherzugriffs und die Kommunikation mit Geräten wie Festplattenlaufwerken und Videogeräten. Der Benutzermodus hingegen wird für fast alles andere verwendet. Anwendungsprogramme wie Textverarbeitungsprogramme und Datenbankmanager arbeiten im Benutzermodus und können nur dann auf die Ressourcen des Rechners zugreifen, wenn sie die Kontrolle an den Kernel übergeben, was einen Wechsel in den Supervisor-Modus bewirkt. Die Übergabe der Kontrolle an den Kernel erfolgt in der Regel durch die Ausführung eines Software-Interrupt-Befehls, z. B. des Motorola 68000 TRAP-Befehls. Die Softwareunterbrechung veranlasst den Prozessor, vom Benutzermodus in den Überwachungsmodus zu wechseln und mit der Ausführung von Code zu beginnen, der es dem Kernel ermöglicht, die Kontrolle zu übernehmen.

Im Benutzermodus haben Programme in der Regel Zugriff auf einen eingeschränkten Satz von Prozessorbefehlen und können im Allgemeinen keine Befehle ausführen, die den Betrieb des Systems stören könnten. Im Supervisor-Modus sind die Beschränkungen für die Ausführung von Befehlen in der Regel aufgehoben, so dass der Kernel uneingeschränkten Zugriff auf alle Maschinenressourcen hat.

Der Begriff "Benutzermodus-Ressource" bezieht sich im Allgemeinen auf ein oder mehrere CPU-Register, die Informationen enthalten, die das laufende Programm nicht verändern darf. Versuche, diese Ressourcen zu verändern, führen in der Regel zu einem Wechsel in den Supervisor-Modus, in dem das Betriebssystem die illegale Operation, die das Programm versucht hat, unterbinden kann, z. B. indem es das Programm zwangsweise beendet ("killing").

Speicherverwaltung

Ein Betriebssystem-Kernel mit mehreren Programmen muss unter anderem für die Verwaltung des gesamten Systemspeichers zuständig sein, der gerade von den Programmen verwendet wird. Dadurch wird sichergestellt, dass ein Programm nicht in den Speicher eingreift, der bereits von einem anderen Programm verwendet wird. Da sich die Programme die Zeit teilen, muss jedes Programm unabhängigen Zugriff auf den Speicher haben.

Die kooperative Speicherverwaltung, die von vielen frühen Betriebssystemen verwendet wurde, geht davon aus, dass alle Programme freiwillig den Speichermanager des Kernels nutzen und den ihnen zugewiesenen Speicher nicht überschreiten. Dieses System der Speicherverwaltung ist heute fast nicht mehr anzutreffen, da Programme oft Fehler enthalten, die dazu führen können, dass sie ihren zugewiesenen Speicherplatz überschreiten. Wenn ein Programm fehlschlägt, kann dies dazu führen, dass der von einem oder mehreren anderen Programmen verwendete Speicher betroffen ist oder überschrieben wird. Bösartige Programme oder Viren können den Speicher eines anderen Programms absichtlich verändern oder die Funktion des Betriebssystems selbst beeinträchtigen. Bei einer kooperativen Speicherverwaltung reicht ein einziges fehlerhaftes Programm aus, um das System zum Absturz zu bringen.

Der Speicherschutz ermöglicht es dem Kernel, den Zugriff eines Prozesses auf den Speicher des Computers zu beschränken. Es gibt verschiedene Methoden des Speicherschutzes, darunter Speichersegmentierung und Paging. Alle Methoden erfordern ein gewisses Maß an Hardware-Unterstützung (z. B. die 80286 MMU), die nicht in allen Computern vorhanden ist.

Sowohl bei der Segmentierung als auch beim Paging geben bestimmte Register des geschützten Modus der CPU vor, auf welche Speicheradresse ein laufendes Programm zugreifen darf. Versuche, auf andere Adressen zuzugreifen, lösen eine Unterbrechung aus, die die CPU veranlasst, wieder in den Überwachungsmodus zu wechseln und dem Kernel die Verantwortung zu übertragen. Da es schwierig ist, einem solchen Vorgang ein sinnvolles Ergebnis zuzuordnen, und da es sich in der Regel um ein Anzeichen für ein fehlerhaftes Programm handelt, beendet der Kernel in der Regel das betreffende Programm und meldet den Fehler.

Die Windows-Versionen 3.1 bis ME verfügten über ein gewisses Maß an Speicherschutz, aber Programme konnten die Notwendigkeit der Verwendung dieses Schutzes leicht umgehen. Es wurde ein allgemeiner Schutzfehler erzeugt, der anzeigte, dass eine Segmentierungsverletzung stattgefunden hatte; das System stürzte jedoch oft trotzdem ab.

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.

Virtueller Speicher

Viele Betriebssysteme können Programme so "austricksen", dass sie den auf der Festplatte und im Arbeitsspeicher verstreuten Speicher so nutzen, als handele es sich um einen einzigen zusammenhängenden Speicherbereich, den so genannten virtuellen Speicher.

Die Adressierung von virtuellem Speicher (z. B. Paging oder Segmentierung) bedeutet, dass der Kernel auswählen kann, welchen Speicher jedes Programm zu einem bestimmten Zeitpunkt verwenden darf, so dass das Betriebssystem denselben Speicherplatz für mehrere Aufgaben nutzen kann.

Wenn ein Programm versucht, auf Speicher zuzugreifen, der sich nicht in seinem aktuellen Zugriffsbereich befindet, ihm aber dennoch zugewiesen wurde, wird der Kernel auf die gleiche Weise unterbrochen, wie wenn das Programm seinen zugewiesenen Speicher überschreiten würde. (Siehe Abschnitt über Speicherverwaltung.) Unter UNIX wird diese Art von Unterbrechung als Seitenfehler bezeichnet.

Wenn der Kernel einen Seitenfehler feststellt, passt er im Allgemeinen den virtuellen Speicherbereich des Programms an, das ihn ausgelöst hat, und gewährt ihm Zugriff auf den angeforderten Speicher. Dies gibt dem Kernel die Entscheidungsgewalt darüber, wo der Speicher einer bestimmten Anwendung gespeichert wird, oder sogar darüber, ob er überhaupt schon zugewiesen wurde oder nicht.

In modernen Betriebssystemen kann Speicher, auf den weniger häufig zugegriffen wird, vorübergehend auf einer Festplatte oder einem anderen Medium gespeichert werden, um diesen Platz für andere Programme verfügbar zu machen. Dies wird als Swapping bezeichnet, da ein Speicherbereich von mehreren Programmen genutzt werden kann und der Inhalt dieses Speicherbereichs bei Bedarf ausgetauscht werden kann.

Der "virtuelle Speicher" vermittelt dem Programmierer oder dem Benutzer den Eindruck, dass der Computer über eine viel größere Menge an Arbeitsspeicher verfügt als tatsächlich vorhanden ist.

Multitasking

Unter Multitasking versteht man die Ausführung mehrerer unabhängiger Computerprogramme auf demselben Computer, wobei der Anschein erweckt wird, dass die Aufgaben gleichzeitig ausgeführt werden. Da die meisten Computer höchstens ein oder zwei Dinge gleichzeitig tun können, erfolgt dies in der Regel über Time-Sharing, d. h. jedes Programm nutzt einen Teil der Computerzeit zur Ausführung.

Der Kernel eines Betriebssystems enthält ein Scheduling-Programm, das festlegt, wie viel Zeit jeder Prozess mit der Ausführung verbringt und in welcher Reihenfolge die Ausführungskontrolle an die Programme weitergegeben werden soll. Die Kontrolle wird vom Kernel an einen Prozess übergeben, der dem Programm Zugriff auf die CPU und den Speicher gewährt. Später wird die Kontrolle über einen Mechanismus an den Kernel zurückgegeben, damit ein anderes Programm die CPU nutzen kann. Diese so genannte Weitergabe der Kontrolle zwischen dem Kernel und den Anwendungen wird als Kontextwechsel bezeichnet.

Ein frühes Modell, das die Zuweisung von Zeit an Programme regelte, wurde kooperatives Multitasking genannt. Bei diesem Modell kann ein Programm, dem der Kernel die Kontrolle übergibt, so lange ausgeführt werden, wie es will, bevor es die Kontrolle ausdrücklich an den Kernel zurückgibt. Das bedeutet, dass ein bösartiges oder schlecht funktionierendes Programm nicht nur andere Programme daran hindern kann, die CPU zu nutzen, sondern auch das gesamte System zum Stillstand bringen kann, wenn es in eine Endlosschleife gerät.

Moderne Betriebssysteme weiten die Konzepte der Anwendungspräemption auf Gerätetreiber und Kernelcode aus, so dass das Betriebssystem auch die internen Laufzeiten präemptiv kontrolliert.

Die Philosophie des präemptiven Multitasking besteht darin, sicherzustellen, dass alle Programme eine regelmäßige Zeit auf der CPU erhalten. Dies bedeutet, dass alle Programme in der Zeit, die sie auf der CPU verbringen dürfen, ohne unterbrochen zu werden, begrenzt werden müssen. Um dies zu erreichen, verwenden moderne Betriebssystem-Kernel eine zeitgesteuerte Unterbrechung. Der Kernel setzt einen Zeitgeber für den geschützten Modus, der nach Ablauf der angegebenen Zeit eine Rückkehr in den Überwachungsmodus auslöst. (Siehe oben die Abschnitte über Interrupts und Dual-Mode-Betrieb.)

Auf vielen Einbenutzer-Betriebssystemen ist kooperatives Multitasking vollkommen ausreichend, da auf Heimcomputern im Allgemeinen eine kleine Anzahl gut getesteter Programme läuft. AmigaOS ist eine Ausnahme, da es von seiner ersten Version an präemptives Multitasking hatte. Windows NT war die erste Version von Microsoft Windows, die präemptives Multitasking durchsetzte, aber es erreichte den Markt der Heimanwender erst mit Windows XP (da Windows NT auf professionelle Anwender ausgerichtet war).

Festplattenzugriff und Dateisysteme

Dateisysteme ermöglichen es Benutzern und Programmen, Dateien auf einem Computer zu organisieren und zu sortieren, oft durch die Verwendung von Verzeichnissen (oder "Ordnern").

Der Zugriff auf Daten, die auf Festplatten gespeichert sind, ist ein zentrales Merkmal aller Betriebssysteme. Computer speichern Daten auf Festplatten in Form von Dateien, die auf bestimmte Weise strukturiert sind, um einen schnelleren Zugriff, eine höhere Zuverlässigkeit und eine bessere Nutzung des verfügbaren Speicherplatzes zu ermöglichen. Die spezielle Art und Weise, in der Dateien auf einer Festplatte gespeichert werden, wird als Dateisystem bezeichnet und ermöglicht es, Dateien mit Namen und Attributen zu versehen. Außerdem können sie in einer Hierarchie von Verzeichnissen oder Ordnern gespeichert werden, die in einem Verzeichnisbaum angeordnet sind.

Frühe Betriebssysteme unterstützten in der Regel nur einen einzigen Laufwerkstyp und nur eine Art von Dateisystem. Frühe Dateisysteme waren in ihrer Kapazität, Geschwindigkeit und in den Arten von Dateinamen und Verzeichnisstrukturen, die sie verwenden konnten, begrenzt. Diese Einschränkungen spiegelten oft die Einschränkungen der Betriebssysteme wider, für die sie entwickelt wurden, so dass es für ein Betriebssystem sehr schwierig war, mehr als ein Dateisystem zu unterstützen.

Während viele einfachere Betriebssysteme eine begrenzte Anzahl von Optionen für den Zugriff auf Speichersysteme unterstützen, unterstützen Betriebssysteme wie UNIX und Linux eine Technologie, die als virtuelles Dateisystem oder VFS bekannt ist. Ein Betriebssystem wie UNIX unterstützt eine breite Palette von Speichergeräten, unabhängig von ihrem Design oder Dateisystem, und ermöglicht den Zugriff auf sie über eine gemeinsame Anwendungsprogrammierschnittstelle (API). Dies macht es für Programme unnötig, Kenntnisse über das Gerät zu haben, auf das sie zugreifen. Ein VFS ermöglicht es dem Betriebssystem, Programmen durch die Verwendung spezifischer Gerätetreiber und Dateisystemtreiber den Zugriff auf eine unbegrenzte Anzahl von Geräten mit einer unendlichen Vielfalt von darauf installierten Dateisystemen zu ermöglichen.

Auf ein angeschlossenes Speichergerät, z. B. eine Festplatte, wird über einen Gerätetreiber zugegriffen. Der Gerätetreiber versteht die spezifische Sprache des Laufwerks und ist in der Lage, diese Sprache in eine Standardsprache zu übersetzen, die vom Betriebssystem für den Zugriff auf alle Laufwerke verwendet wird. Unter UNIX ist dies die Sprache der Blockgeräte.

Wenn der Kernel über einen geeigneten Gerätetreiber verfügt, kann er auf den Inhalt des Laufwerks im Rohformat zugreifen, das ein oder mehrere Dateisysteme enthalten kann. Ein Dateisystemtreiber wird verwendet, um die Befehle, die für den Zugriff auf ein bestimmtes Dateisystem verwendet werden, in einen Standardbefehlssatz zu übersetzen, den das Betriebssystem verwenden kann, um mit allen Dateisystemen zu kommunizieren. Programme können dann mit diesen Dateisystemen auf der Grundlage von Dateinamen und Verzeichnissen/Ordnern innerhalb einer hierarchischen Struktur arbeiten. Sie können Dateien erstellen, löschen, öffnen und schließen sowie verschiedene Informationen über sie sammeln, darunter Zugriffsberechtigungen, Größe, freier Speicherplatz sowie Erstellungs- und Änderungsdaten.

Verschiedene Unterschiede zwischen den Dateisystemen machen die Unterstützung aller Dateisysteme schwierig. Erlaubte Zeichen in Dateinamen, Groß- und Kleinschreibung und das Vorhandensein verschiedener Arten von Dateiattributen machen die Implementierung einer einzigen Schnittstelle für jedes Dateisystem zu einer gewaltigen Aufgabe. Betriebssysteme empfehlen in der Regel die Verwendung von Dateisystemen, die speziell für sie entwickelt wurden (und unterstützen sie daher von Haus aus), z. B. NTFS in Windows und ReiserFS, Reiser4, ext3, ext4 und Btrfs in Linux. In der Praxis sind jedoch in der Regel Treiber von Drittanbietern verfügbar, die die am weitesten verbreiteten Dateisysteme in den meisten Allzweck-Betriebssystemen unterstützen (z. B. ist NTFS in Linux über NTFS-3g verfügbar, und ext2/3 und ReiserFS sind in Windows über Software von Drittanbietern verfügbar).

Die Unterstützung für Dateisysteme ist unter den modernen Betriebssystemen sehr unterschiedlich, obwohl es einige gängige Dateisysteme gibt, für die fast alle Betriebssysteme Unterstützung und Treiber enthalten. Die Betriebssysteme unterscheiden sich in der Unterstützung von Dateisystemen und in den Festplattenformaten, auf denen sie installiert werden können. Unter Windows ist jedes Dateisystem in der Regel auf bestimmte Medien beschränkt; CDs müssen beispielsweise ISO 9660 oder UDF verwenden, und ab Windows Vista ist NTFS das einzige Dateisystem, auf dem das Betriebssystem installiert werden kann. Es ist möglich, Linux auf vielen Arten von Dateisystemen zu installieren. Im Gegensatz zu anderen Betriebssystemen kann unter Linux und UNIX jedes Dateisystem verwendet werden, unabhängig davon, auf welchem Medium es gespeichert ist, ob es sich um eine Festplatte, einen Datenträger (CD, DVD...), einen USB-Stick oder sogar um eine Datei auf einem anderen Dateisystem handelt.

Ü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.

Gerätetreiber

Ein Gerätetreiber ist eine spezielle Art von Computersoftware, die entwickelt wurde, um die Interaktion mit Hardware-Geräten zu ermöglichen. In der Regel handelt es sich dabei um eine Schnittstelle für die Kommunikation mit dem Gerät über den spezifischen Computerbus oder das Kommunikationssubsystem, an das die Hardware angeschlossen ist, um Befehle an das Gerät zu übermitteln und/oder Daten von dem Gerät zu empfangen, und auf der anderen Seite um die erforderlichen Schnittstellen zum Betriebssystem und zu Softwareanwendungen. Es handelt sich um ein spezialisiertes, hardwareabhängiges und betriebssystemspezifisches Computerprogramm, das es einem anderen Programm, in der Regel einem Betriebssystem- oder Anwendungssoftwarepaket oder einem Computerprogramm, das unter dem Betriebssystemkern läuft, ermöglicht, transparent mit einem Hardwaregerät zu interagieren, und das in der Regel die erforderliche Interrupt-Behandlung bereitstellt, die für alle notwendigen asynchronen, zeitabhängigen Hardware-Schnittstellen benötigt wird.

Das wichtigste Entwicklungsziel von Gerätetreibern ist die Abstraktion. Jedes Hardwaremodell (selbst innerhalb derselben Geräteklasse) ist anders. Die Hersteller bringen auch neuere Modelle auf den Markt, die zuverlässiger oder leistungsfähiger sind, und diese neueren Modelle werden oft anders gesteuert. Von Computern und ihren Betriebssystemen kann nicht erwartet werden, dass sie wissen, wie sie jedes Gerät steuern können, weder jetzt noch in Zukunft. Um dieses Problem zu lösen, geben die Betriebssysteme im Wesentlichen vor, wie jede Art von Gerät gesteuert werden sollte. Die Aufgabe des Gerätetreibers besteht dann darin, diese vom Betriebssystem vorgeschriebenen Funktionsaufrufe in gerätespezifische Aufrufe zu übersetzen. Theoretisch sollte ein neues Gerät, das auf eine neue Art und Weise gesteuert wird, korrekt funktionieren, wenn ein geeigneter Treiber vorhanden ist. Dieser neue Treiber sorgt dafür, dass das Gerät aus Sicht des Betriebssystems wie gewohnt funktioniert.

Unter Windows-Versionen vor Vista und Linux-Versionen vor 2.6 war die gesamte Treiberausführung kooperativ, d. h. wenn ein Treiber in eine Endlosschleife geriet, fror das System ein. In neueren Versionen dieser Betriebssysteme ist die Kernel-Preemption integriert, bei der der Kernel den Treiber unterbricht, um ihm Aufgaben zu erteilen, und sich dann von dem Prozess trennt, bis er eine Antwort vom Gerätetreiber erhält oder ihm weitere Aufgaben erteilt.

Vernetzung

Gegenwärtig unterstützen die meisten Betriebssysteme eine Vielzahl von Netzwerkprotokollen, Hardware und Anwendungen, die diese nutzen. Das bedeutet, dass Computer, auf denen unterschiedliche Betriebssysteme laufen, an einem gemeinsamen Netzwerk teilnehmen können, um Ressourcen wie Computer, Dateien, Drucker und Scanner über kabelgebundene oder drahtlose Verbindungen gemeinsam zu nutzen. Netzwerke ermöglichen es dem Betriebssystem eines Computers, auf die Ressourcen eines entfernten Computers zuzugreifen, um die gleichen Funktionen zu unterstützen, wie wenn diese Ressourcen direkt mit dem lokalen Computer verbunden wären. Dies reicht von der einfachen Kommunikation über die Nutzung vernetzter Dateisysteme bis hin zur gemeinsamen Nutzung der Grafik- oder Soundhardware eines anderen Computers. Einige Netzwerkdienste ermöglichen einen transparenten Zugriff auf die Ressourcen eines Computers, wie z. B. SSH, das Netzwerkbenutzern direkten Zugriff auf die Befehlszeilenschnittstelle eines Computers ermöglicht.

Bei Client/Server-Netzwerken kann ein Programm auf einem Computer, Client genannt, über ein Netzwerk eine Verbindung zu einem anderen Computer, Server genannt, herstellen. Server bieten anderen Netzwerkcomputern und -benutzern verschiedene Dienste an (oder hosten sie). Diese Dienste werden normalerweise über Ports oder nummerierte Zugangspunkte hinter der IP-Adresse des Servers bereitgestellt. Jede Portnummer ist in der Regel mit maximal einem laufenden Programm verbunden, das für die Bearbeitung von Anfragen an diesen Port zuständig ist. Ein Daemon, der ein Benutzerprogramm ist, kann seinerseits auf die lokalen Hardwareressourcen des Computers zugreifen, indem er Anfragen an den Betriebssystemkern weiterleitet.

Viele Betriebssysteme unterstützen auch ein oder mehrere herstellerspezifische oder offene Netzwerkprotokolle, z. B. SNA auf IBM-Systemen, DECnet auf Systemen von Digital Equipment Corporation und Microsoft-spezifische Protokolle (SMB) unter Windows. Es können auch spezifische Protokolle für bestimmte Aufgaben unterstützt werden, wie z. B. NFS für den Dateizugriff. Protokolle wie ESound oder esd können leicht über das Netz erweitert werden, um Sound aus lokalen Anwendungen auf der Sound-Hardware eines entfernten Systems bereitzustellen.

Sicherheit

Die Sicherheit eines Computers hängt vom ordnungsgemäßen Funktionieren einer Reihe von Technologien ab. Ein modernes Betriebssystem ermöglicht den Zugriff auf eine Reihe von Ressourcen, die für die auf dem System laufende Software und für externe Geräte wie Netzwerke über den Kernel verfügbar sind.

Das Betriebssystem muss in der Lage sein, zwischen Anfragen zu unterscheiden, die bearbeitet werden dürfen, und anderen, die nicht bearbeitet werden sollen. Während einige Systeme einfach zwischen "privilegiert" und "nicht privilegiert" unterscheiden, verfügen Systeme üblicherweise über eine Form der Identität des Anfragenden, etwa einen Benutzernamen. Um die Identität festzustellen, kann es einen Authentifizierungsprozess geben. Oft muss ein Benutzername angegeben werden, und jeder Benutzername kann ein Passwort haben. Stattdessen können auch andere Authentifizierungsmethoden, wie Magnetkarten oder biometrische Daten, verwendet werden. In einigen Fällen, insbesondere bei Verbindungen über das Netz, kann der Zugriff auf Ressourcen ohne jegliche Authentifizierung erfolgen (z. B. beim Lesen von Dateien über eine Netzfreigabe). Die besonderen Dienste und Ressourcen, auf die der Anfragende zugreifen kann, sobald er in einem System angemeldet ist, sind entweder an das Benutzerkonto des Anfragenden oder an die unterschiedlich konfigurierten Benutzergruppen gebunden, denen der Anfragende angehört.

Zusätzlich zu dem Modell des Erlaubens oder Verweigerns von Sicherheit bietet ein System mit einem hohen Maß an Sicherheit auch Überprüfungsoptionen. Diese ermöglichen die Nachverfolgung von Anfragen für den Zugriff auf Ressourcen (z. B. "Wer hat diese Datei gelesen?"). Interne Sicherheit oder Sicherheit vor einem bereits laufenden Programm ist nur möglich, wenn alle möglicherweise schädlichen Anfragen über Unterbrechungen des Betriebssystemkerns ausgeführt werden müssen. Wenn Programme direkt auf Hardware und Ressourcen zugreifen können, können sie nicht gesichert werden.

Externe Sicherheit erfordert eine Anfrage von außerhalb des Computers, z. B. eine Anmeldung an einer angeschlossenen Konsole oder eine Art von Netzwerkverbindung. Externe Anfragen werden oft über Gerätetreiber an den Kernel des Betriebssystems weitergeleitet, wo sie an Anwendungen weitergegeben oder direkt ausgeführt werden können. Die Sicherheit von Betriebssystemen ist seit langem ein Anliegen, da auf Computern hochsensible Daten gespeichert sind, sowohl im kommerziellen als auch im militärischen Bereich. Das Verteidigungsministerium der Vereinigten Staaten von Amerika (DoD) hat mit den Trusted Computer System Evaluation Criteria (TCSEC) einen Standard geschaffen, der grundlegende Anforderungen für die Bewertung der Wirksamkeit der Sicherheit festlegt. Dies war für die Hersteller von Betriebssystemen von entscheidender Bedeutung, da die TCSEC zur Bewertung, Klassifizierung und Auswahl vertrauenswürdiger Betriebssysteme verwendet wurden, die für die Verarbeitung, Speicherung und den Abruf sensibler oder klassifizierter Informationen in Frage kommen.

Zu den Netzwerkdiensten gehören Angebote wie Dateifreigabe, Druckdienste, E-Mail, Websites und Dateiübertragungsprotokolle (FTP), von denen die meisten Sicherheitslücken aufweisen können. An der vordersten Front der Sicherheit stehen Hardware-Geräte, die als Firewalls oder Intrusion Detection/Prevention Systems bekannt sind. Auf der Ebene des Betriebssystems gibt es eine Reihe von Software-Firewalls sowie Intrusion Detection/Prevention-Systeme. Die meisten modernen Betriebssysteme enthalten eine Software-Firewall, die standardmäßig aktiviert ist. Eine Software-Firewall kann so konfiguriert werden, dass der Netzwerkverkehr zu oder von einem Dienst oder einer Anwendung, die auf dem Betriebssystem läuft, zugelassen oder abgelehnt wird. Daher kann man einen unsicheren Dienst wie Telnet oder FTP installieren und ausführen und muss nicht von einem Sicherheitsverstoß bedroht sein, da die Firewall jeglichen Datenverkehr abweist, der versucht, eine Verbindung zu dem Dienst an diesem Anschluss herzustellen.

Eine alternative Strategie und die einzige Sandbox-Strategie, die in Systemen zur Verfügung steht, die die Popek- und Goldberg-Virtualisierungsanforderungen nicht erfüllen, besteht darin, dass das Betriebssystem Benutzerprogramme nicht als nativen Code ausführt, sondern entweder einen Prozessor emuliert oder einen Host für ein p-Code-basiertes System wie Java bereitstellt.

Interne Sicherheit ist besonders wichtig für Mehrbenutzersysteme; sie ermöglicht es jedem Benutzer des Systems, über private Dateien zu verfügen, die von den anderen Benutzern nicht manipuliert oder gelesen werden können. Interne Sicherheit ist auch wichtig, wenn Auditing von Nutzen sein soll, da ein Programm potenziell das Betriebssystem umgehen kann, einschließlich der Umgehung von Auditing.

Benutzeroberfläche

Ein Bildschirmfoto der Bash-Befehlszeile. Jeder Befehl wird nach der "Eingabeaufforderung" eingegeben, und seine Ausgabe erscheint dann unten und arbeitet sich über den Bildschirm nach unten. Die aktuelle Eingabeaufforderung befindet sich am unteren Rand.

Jeder Computer, der von einer Person bedient werden soll, benötigt eine Benutzeroberfläche. Die Benutzeroberfläche wird in der Regel als Shell bezeichnet und ist unerlässlich, wenn die menschliche Interaktion unterstützt werden soll. Die Benutzerschnittstelle zeigt die Verzeichnisstruktur an und fordert Dienste vom Betriebssystem an, die Daten von Eingabegeräten wie Tastatur, Maus oder Kreditkartenleser erfassen und Dienste des Betriebssystems anfordern, um Eingabeaufforderungen, Statusmeldungen usw. auf Ausgabegeräten wie einem Videomonitor oder Drucker anzuzeigen. Die beiden gängigsten Formen einer Benutzerschnittstelle waren in der Vergangenheit die Befehlszeilenschnittstelle, bei der Computerbefehle Zeile für Zeile eingegeben werden, und die grafische Benutzerschnittstelle, bei der eine visuelle Umgebung (meist ein WIMP) vorhanden ist.

Grafische Benutzeroberflächen

Ein Bildschirmfoto der grafischen Benutzeroberfläche von KDE Plasma 5. Programme werden in Form von Bildern auf dem Bildschirm dargestellt, und die Dateien, Ordner (Verzeichnisse) und Anwendungen werden in Form von Symbolen dargestellt. Die Navigation auf dem Computer erfolgt mit der Maus.

Die meisten modernen Computersysteme unterstützen grafische Benutzeroberflächen (GUI) und enthalten sie häufig. Bei einigen Computersystemen, wie z. B. bei der ursprünglichen Implementierung des klassischen Mac OS, ist die grafische Benutzeroberfläche in den Kernel integriert.

Obwohl eine grafische Benutzeroberfläche technisch gesehen kein Dienst des Betriebssystems ist, kann die Integration der Unterstützung für eine grafische Benutzeroberfläche in den Kernel des Betriebssystems dazu führen, dass die grafische Benutzeroberfläche schneller reagiert, indem die Anzahl der Kontextwechsel reduziert wird, die erforderlich sind, damit die grafische Benutzeroberfläche ihre Ausgabefunktionen ausführen kann. Andere Betriebssysteme sind modular aufgebaut und trennen das Grafiksubsystem vom Kernel und dem Betriebssystem. In den 1980er Jahren waren UNIX, VMS und viele andere Betriebssysteme auf diese Weise aufgebaut. Linux und macOS sind ebenfalls auf diese Weise aufgebaut. Moderne Versionen von Microsoft Windows, wie z. B. Windows Vista, implementieren ein Grafiksubsystem, das sich größtenteils im Userspace befindet; die Grafikzeichnungsroutinen der Versionen zwischen Windows NT 4.0 und Windows Server 2003 befinden sich jedoch größtenteils im Kernelspace. Bei Windows 9x gab es kaum eine Unterscheidung zwischen der Benutzeroberfläche und dem Kernel.

Viele Computerbetriebssysteme erlauben es dem Benutzer, jede beliebige Benutzeroberfläche zu installieren oder zu erstellen. Das X Window System in Verbindung mit GNOME oder KDE Plasma 5 ist eine häufig anzutreffende Konfiguration auf den meisten Unix- und Unix-ähnlichen Systemen (BSD, Linux, Solaris). Für Microsoft Windows wurde eine Reihe von Windows-Shell-Ersatzprogrammen veröffentlicht, die Alternativen zur mitgelieferten Windows-Shell bieten, aber die Shell selbst kann nicht von Windows getrennt werden.

Im Laufe der Zeit sind zahlreiche Unix-basierte grafische Benutzeroberflächen entstanden, die meisten davon abgeleitet von X11. Der Wettbewerb zwischen den verschiedenen Unix-Anbietern (HP, IBM, Sun) führte zu einer starken Fragmentierung, obwohl die Bemühungen um eine Standardisierung in den 1990er Jahren mit COSE und CDE aus verschiedenen Gründen scheiterten und schließlich von der weit verbreiteten Einführung von GNOME und K Desktop Environment verdrängt wurden. Vor den auf freier Software basierenden Toolkits und Desktop-Umgebungen war Motif die vorherrschende Toolkit/Desktop-Kombination (und war die Grundlage, auf der CDE entwickelt wurde).

Grafische Benutzeroberflächen entwickeln sich mit der Zeit weiter. Beispielsweise hat Windows seine Benutzeroberfläche fast jedes Mal geändert, wenn eine neue Hauptversion von Windows veröffentlicht wurde, und die grafische Benutzeroberfläche von Mac OS hat sich mit der Einführung von Mac OS X im Jahr 1999 drastisch verändert.

Als Grafische Benutzeroberfläche (GUI, Abk. für engl. Graphical User Interface) wird generell eine Bildschirmausgabe beschrieben, wenn sie über eine Eingabeaufforderung 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, Benutzeroberflächen etc. zum einfachen Steuern von Programmen erstellen lassen.

Die Grafikkarte als Hardware ist für den Programmierer und Anwender vollkommen verborgen.

Echtzeit-Betriebssysteme

Ein Echtzeit-Betriebssystem (RTOS) ist ein Betriebssystem, das für Anwendungen mit festen Fristen (Echtzeit-Computing) gedacht ist. Zu diesen Anwendungen gehören einige kleine eingebettete Systeme, Motorsteuerungen für Kraftfahrzeuge, Industrieroboter, Raumfahrzeuge, industrielle Steuerungen und einige groß angelegte Computersysteme.

Ein frühes Beispiel für ein groß angelegtes Echtzeitbetriebssystem war die Transaction Processing Facility, die von American Airlines und IBM für das Sabre Airline Reservations System entwickelt wurde.

Eingebettete Systeme mit festen Zeitvorgaben verwenden ein Echtzeitbetriebssystem wie VxWorks, PikeOS, eCos, QNX, MontaVista Linux und RTLinux. Windows CE ist ein Echtzeit-Betriebssystem, das ähnliche APIs wie Desktop-Windows nutzt, aber nichts von der Codebasis von Desktop-Windows verwendet. Symbian OS verfügt ab Version 8.0b ebenfalls über einen RTOS-Kernel (EKA2).

Einige eingebettete Systeme verwenden Betriebssysteme wie Palm OS, BSD und Linux, obwohl diese Betriebssysteme keine Echtzeitberechnungen unterstützen.

Betriebssystementwicklung als Hobby

Ein Hobby-Betriebssystem kann als eines klassifiziert werden, dessen Code nicht direkt von einem bestehenden Betriebssystem abgeleitet wurde und das nur wenige Benutzer und aktive Entwickler hat.

In manchen Fällen dient die Hobby-Entwicklung der Unterstützung eines "selbstgebauten" Rechners, z. B. eines einfachen Einplatinencomputers mit einem 6502-Mikroprozessor. Oder die Entwicklung erfolgt für eine Architektur, die bereits weit verbreitet ist. Die Entwicklung von Betriebssystemen kann auf völlig neuen Konzepten beruhen oder mit der Modellierung eines bestehenden Betriebssystems beginnen. In beiden Fällen ist der Bastler sein eigener Entwickler oder er arbeitet mit einer kleinen und manchmal unstrukturierten Gruppe von Personen zusammen, die ähnliche Interessen haben.

Beispiele für ein Hobby-Betriebssystem sind Syllable und TempleOS.

Vielfalt der Betriebssysteme und Portabilität

Anwendungssoftware wird im Allgemeinen für ein bestimmtes Betriebssystem und manchmal sogar für eine bestimmte Hardware geschrieben. Bei der Portierung der Anwendung auf ein anderes Betriebssystem kann es vorkommen, dass die von der Anwendung benötigte Funktionalität von diesem Betriebssystem anders implementiert wird (Namen von Funktionen, Bedeutung von Argumenten usw.), so dass die Anwendung angepasst, geändert oder anderweitig gepflegt werden muss.

Unix war das erste Betriebssystem, das nicht in Assemblersprache geschrieben war, was es sehr portabel für andere Systeme als die ursprüngliche PDP-11 machte.

Diese Kosten für die Unterstützung unterschiedlicher Betriebssysteme können vermieden werden, indem man stattdessen Anwendungen für Softwareplattformen wie Java oder Qt schreibt. Diese Abstraktionen haben bereits die Kosten für die Anpassung an bestimmte Betriebssysteme und deren Systembibliotheken getragen.

Ein anderer Ansatz ist die Übernahme von Standards durch die Hersteller von Betriebssystemen. Beispielsweise bieten POSIX und Betriebssystemabstraktionsschichten Gemeinsamkeiten, die die Portierungskosten senken.

Definitionen und Abgrenzung

Ein Betriebssystem übernimmt zwei wesentliche Aufgaben, die im Grunde in keinem direkten Zusammenhang zueinander stehen:

  • Die eine Aufgabe besteht darin, dem Anwendungsprogrammierer saubere Abstraktionen der Betriebsmittel zur Verfügung zu stellen (anstelle der unschönen Hardware). Das Betriebssystem bietet somit eine leichter verständliche und besser handhabbare Schnittstelle zur eigentlichen Maschine an und „versteckt“ die Komplexität der darunterliegenden Maschine: „Der Ansprechpartner für den Programmierer ist also nicht mehr die wirkliche Maschine, sondern eine virtuelle Maschine (Betriebssystem), welche wesentlich einfacher zu verstehen und zu programmieren ist.“ Das Betriebssystem erzeugt abstrakte Objekte, um die Komplexität beherrschbar zu machen. Ein Beispiel für eine solche Abstraktion ist die Datei. Diese kann beispielsweise in Form eines Digitalfoto, einer gespeicherten E-Mail-Nachricht oder einer Website vorliegen. Es ist auf jeden Fall einfacher, sich damit zu beschäftigen, als mit den Details von Festplattenspeichern.
  • Die andere Aufgabe besteht darin, die Hardwareressourcen zu verwalten: „Ein Betriebssystem muss eine geordnete und kontrollierte Zuteilung von Prozessoren, Speichereinheiten und Peripheriegeräten unter den verschiedenen Programmen, welche darum konkurrieren, sicherstellen.“ Das Betriebssystem ordnet und kontrolliert die Allokation der Prozessoren, Speicher und Ein-/Ausgabegeräte und überwacht, welches Programm gerade welches Betriebsmittel nutzt. Liegen beispielsweise mehrere Aufträge für einen Drucker vor, so muss festgelegt werden, wie diese abgearbeitet werden. Auf einem modernen Betriebssystem können dadurch auch mehrere Programme gleichzeitig ausgeführt werden. Benutzen mehrere Anwender einen Computer oder ein Netzwerk, dann gewinnen Maßnahmen zur Verwaltung und zum Schutz von Speicher, Ein-/Ausgabegeräten und anderen Betriebsmitteln noch an Bedeutung. Die Benutzer würden sich sonst gegenseitig stören.

Die Gesamtheit aller Programme und Dateien, die sämtliche Abläufe bei Betrieb eines Rechners steuern, wird Systemsoftware genannt. Dazu gehören Betriebssysteme, aber auch systemnahe Software wie Compiler, Interpreter und Editoren. Anwendungssoftware wie beispielsweise Browser oder Buchhaltungssoftware benutzen die Systemsoftware für einen ordnungsgemäßen Ablauf. In der Literatur wird der Begriff „Betriebssystem“ innerhalb der Systemsoftware unterschiedlich breit interpretiert.

In der DIN-Sammlung 44300 (veraltet, ersetzt durch ISO/IEC 2382:2015 siehe: Liste der DIN-Normen/DIN 1–49999 unter DIN 44300) geht die Definition von seiner Aufgabe und Stellung in einer Programmhierarchie aus:

„Das Betriebssystem wird gebildet durch die Programme eines digitalen Rechensystems, die zusammen mit den Eigenschaften der Rechenanlage die Grundlage der möglichen Betriebsarten des digitalen Rechensystems bilden und insbesondere die Ausführung von Programmen steuern und überwachen.“

DIN 44300

Für Andrew S. Tanenbaum beschränkt sich der Begriff Betriebssystem im Wesentlichen auf den Kernel: „Editoren, Compiler, Assembler, Binder und Kommandointerpreter sind definitiv nicht Teil des Betriebssystems, auch wenn sie bedeutsam und nützlich sind.“ Viele Lehrbücher folgen dieser engeren Sichtweise. Andere Autoren zählen unter anderem auch eine Kommandosprache zum Betriebssystem: „Außer die Hardware zu verwalten […], bieten moderne Betriebssysteme zahlreiche Dienste an, etwa zur Verständigung der Prozesse untereinander, Datei- und Verzeichnissysteme, Datenübertragung über Netzwerke und eine Befehlssprache.“ Eine noch weitere Fassung des Begriffes, die beispielsweise auch Editoren und Compiler umfasst, geht zum Teil auf ältere Werke des deutschen Sprachraums zurück, lässt sich aber auch in aktueller Literatur noch finden. So zählen die Autoren des Informatik-Dudens auch Übersetzungsprogramme und Dienstprogramme zu den wesentlichen Komponenten eines Betriebssystems. In jüngerer Zeit kann der GNU/Linux-Namensstreit als Beispiel für die Abgrenzungsprobleme angesehen werden.

Der Begriff des Betriebssystems ist in Artikel 3 der Richtlinie (EU) 2019/882 legal definiert.

Ungeachtet dessen, wie weit oder wie eng man den Begriff „Betriebssystem“ fasst, enthalten die Installationsmedien für Betriebssysteme für gewöhnlich zusätzliche Dienst- und Anwendungsprogramme.

Aufgaben

Zu den Aufgaben eines Betriebssystems gehören meist:

  • Speicherverwaltung
    • Verwaltung der Systemressource Hauptspeicher.
    • Protokollierung der Speichernutzung.
    • Reservierung und Freigabe von Speicher.
  • (Prozess)-Verwaltung
    • Überwachung der Speicherzugriffe und gegebenenfalls Beenden von Prozessen bei einer Schutzverletzung.
    • Erzeugung neuer Prozesse (entweder auf Anforderung des Betriebssystems oder auf Aufforderung anderer schon existierender Prozesse) und Reservierung des von den Prozessen benötigten Speichers.
    • Kommunikation und Synchronisation von Prozessen untereinander (Interprozesskommunikation)
  • Geräte- und Dateiverwaltung
    • Effiziente Zuweisung von Ein-/Ausgabegeräten und Vermittlungseinheiten (Datenkanäle, Steuereinheiten), Vermeidung von Konflikten
    • Initiierung, Überwachung der Ausführung, Terminierung von Ein-/Ausgabevorgängen.
    • Verwaltung des Dateisystems. Erzeugung eines Namensraums mit zugehörigen Speicherobjekten und gegebenenfalls weiteren Objekten.
  • Rechteverwaltung
    • Voneinander unabhängige Benutzer/Programme dürfen sich gegenseitig nicht stören.
  • Abstraktion
    • Verbergen der Komplexität der Maschine vor dem Anwender
    • Abstraktion des Maschinenbegriffes (nach Coy):
      • Reale Maschine = Zentraleinheit + Geräte (Hardware)
      • Abstrakte Maschine = Reale Maschine + Betriebssystem
      • Benutzermaschine = Abstrakte Maschine + Anwendungsprogramm

Als Gerät aus der Sicht eines Betriebssystems bezeichnet man aus historischen Gründen alles, was über Ein-/Ausgabekanäle angesprochen wird. Dies sind nicht nur Geräte im herkömmlichen Sinn, sondern mittlerweile auch interne Erweiterungen wie Grafikkarten, Netzwerkkarten und anderes. Die (Unter-)Programme zur Initialisierung und Ansteuerung dieser „Geräte“ bezeichnet man zusammenfassend als Gerätetreiber.

Betriebsmittelverwaltung und Abstraktion

Als Betriebsmittel oder Ressourcen bezeichnet man alle von der Hardware eines Computers zur Verfügung gestellten Komponenten, also den Prozessor (bei Mehrprozessorsystemen die Prozessoren), den physischen Speicher und alle Geräte wie Festplatten-, Disketten- und CD-ROM-Laufwerke, Netzwerk- und Schnittstellenadapter und andere. Die Hardware Compatibility List enthält alle Hardware-Produkte, die im Zusammenhang mit einem bestimmten Betriebssystem auf ihre Funktionalität hin getestet wurden.

Einführendes Beispiel: Zeitgeberbausteine

Moderne Rechnersysteme besitzen Zeitgeberbausteine (Timer). In frühen PCs wurde z. B. der Baustein 8284 des Unternehmens 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.

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.

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.

Verbreitung

Das Unternehmen StatCounter analysiert die Verbreitung von Endanwender-Betriebssystemen anhand von Zugriffsstatistiken diverser Websites. Sehr viele Jahre war Windows an der Spitze, bis es laut StatCounter 2017 von Android überholt wurde.

Die laut StatCounter am weitesten verbreiteten Endanwender-Betriebssysteme sind:

2017 2018
1. Android 31,76 % Pfeil rechts oben.svg 38,97 %
2. Windows 43,82 % Pfeil rechts unten.svg 37,07 %
3. iOS 11,71 % Pfeil rechts oben.svg 13,18 %
4. macOS 5,09 % Pfeil rechts oben.svg 5,24 %
5. Linux 0,94 % Pfeil rechts unten.svg 0,76 %
nicht identifizierte B. 3,64 % Pfeil rechts unten.svg 2,72 %
andere Betriebssysteme 3,03 % Pfeil rechts unten.svg 2,06 %