Das Betriebssystem ist das
Hauptprogramm eines
Computers, das alle E/A-Ports, Interrupts und Timer
verwaltet, ein Dateisystem implementiert usw.
und
Unterprogramme ausführen kann.
Diese Unterprogramme verwenden von ihm
vorgegebene Kommunikations-
Protokolle,
um auf die Services des Betriebssystems zugreifen
zu können, etwa alle der oben genannten
(E/A, Interrupts, Dateisystem und so weiter)
und eine standardisierte
Nutzer-Schnittstelle
("Fenster", Nutzer-E/A usw.).
Sie erhalten jeweils ihren eigenen reservierten
RAM-Bereich und sind keine eigenständigen
Programme, die alle Hardware-Ports und Register
eigenständig verwenden, vielmehr sind sie
Erweiterungen für das Betriebssystem-
Hauptprogramm, die sich zur Laufzeit hinzufügen
(starten) und entfernen (beenden) lassen.
Manche dieser Unterprogramme verwenden eine
Nutzer-Schnittstelle und werden dann einfach
als "Programm", "Anwendung" oder "Applikation"
bezeichnet (engl. "executable" → *.
exe),
andernfalls laufen sie im
Hintergrund als
Hilfswerkzeuge entweder für das Betriebssystem
selbst oder für andere Programme und werden
dann beispielsweise "Hilfsprozess" genannt
(engl. "dynamically linked library" → *.
dll
= "dynamisch eingebundene Bibliothek"),
je nach dem Betriebssystem-Jargon.
Mehrere solcher Hilfsprozesse und Anwendungen
können in einem Betriebssystem "gleichzeitig"
laufen, was als
Multi-Tasking bezeichnet wird.
Natürlich macht der Programmzeiger einfach
immer nur bei jedem Takt einen Schritt und
nichts geschieht wirklich gleichzeitig, aber die
Prozesse kommen jeweils in kurzen
Abschnitten
jeder
der Reihe nach immer im Kreis herum
abwechselnd voran, so dass sie alle zur selben
Zeit gestartet sein können und dann scheinbar
parallel nebeneinander laufen.
Das Betriebssystem ruft entweder Module der
Prozesse wie Funktionen auf und muss warten,
bis diese fertig sind und den Programmzeiger
wieder freigeben, was als
kooperatives
Multi-Tasking bezeichnet wird,
oder es nutzt einen Timer, um zwischen den
Prozessen umzuschalten, wobei es jedesmal den
Programmzeiger speichert und wiederherstellt,
was
präemptives Multi-Tasking genannt wird
(von engl. "preemptive" = eigentlich "präventiv").
Vor allem beim präemptiven Multi-Tasking
teilt das Betriebssystem den Prozessen jeweils
unterschiedliche Zeiten für den nächsten
Ablaufs-Abschnitt zu, gewichtet nach ihrer
aktuellen
Priorität, da manche Prozesse
etwa gerade umfangreiche Berechnungen
anstellen, andere aber nur passiv auf
Nutzereingaben oder Ähnliches warten.
Für die rechenintensiven Zeiten kann jeder
Prozess aktiv eine in der Abwiegung mit
konkurrierenden Prozessen höhere Priorität
beantragen oder eine niedrigere erlauben
und/oder der Nutzer kann dies für jede
Anwendung im Betriebssystem
einstellen.
Hier eine Illustration des
kooperatien Multi-Taskings:
BS: Okay, Prozess A, du bist dran!
P-A: Dumdidumdidumdidum. Fertig!
BS: Danke. Prozess B, du bist dran!
P-B: Diddldididdlidi.Fertig!
BS: Danke. Nun wieder Prozess A!
P-A: Dudumdidumdidumdidumdumdum. Fertig!
BS: Danke. Und jetzt wieder Prozess B!
...
Zum Vergleich nun
präemptives Multi-Tasking:
BS: Prozess A, weitermachen!
P-A: Dumdidumd—
BS: STOPP! Das reicht erstmal. Prozess B!
P-B: Diddldididdli—
BS: STOPP! Das reicht. Prozess A!
P-A: —idumdi—
BS: STOPP! Das reicht. Prozess B!
...