 |
Einführung in Betriebssyteme
von Prof. Jürgen Plate |
2 Prozesse
2.1 Programme, Prozeduren, Prozesse und Instanzen
Programm:
Die Lösung einer Programmieraufgabe (=Algorithmus) wird in
Form eines Programms realisiert. Teillösungen werden
dabei als Prozeduren (Unterprogramme) formuliert, welche
nach Beendigung ihrer Arbeit zum aufrufenden
übergeordneten Programm zurückkehren. Damit die Leistungen des
Betriebssystemkerns problemlos in Anwenderlösungen eingebunden
werden können, sind sie ebenfalls als Prozeduren realisiert.
Ein Programm (Prozedur, Unterprogramm) besteht aus:
- Befehlen (Codebereich, Textbereich)
- Programmdaten (Datenbereich)
Beide Komponenten sind problemorientiert.
Prozeß:
Wird ein Programm (Prozedur) unter der Kontrolle eines Betriebssystems (genauer
gesagt unter der Kontrolle eines Betriebssystemkerns) ausgeführt, so wird dieser
Ablauf als Prozeß (engl. Task) bezeichnet.
Diese Betrachtungsweise macht es möglich, daß mehrere Programme gleichzeitig als
Prozesse parallel auf einem sequentiell arbeitenden Rechnersystem
(unabhängig von der realen Anzahl Prozessoren) ablaufen können.
Als Sonderfall gilt die Ausführung mehrerer Prozesse auf einem Prozessor.
Bei der Ausführung von Prozessen entstehen Daten, die durch den Betriebssystemkern
verwaltet werden. Diese werden Statusinformationen genannt und sind systemabhängig,
z. B. Registerinhalte.
Die Funktionalität des Betriebssystemkerns bezüglich der Verwaltung von Prozessen ist
bei der Ausführung von n Prozessen auf einem Prozessor äquivalent der Verwaltung
auf m > 1 Prozessoren. Dabei kann das Verhältnis m : n sowohl statisch
als auch dynamisch änderbar sein.
Als weitere Komponente wird beim Ablauf eines Programms ein Kellerspeicher (Stack)
aufgebaut. Somit läßt sich ein Prozeß modellhaft folgendermaßen darstellen.
Alle vier Komponenten, die bei der Ausführung eines Programms (einer Prozedur) beteiligt
sind, werden als Instanz zusammengefaßt.
Instanz:
Eine Instanz umfaßt das Tupel (C, D, S, I):
| C: | Codesegment | --> | problemorientiert |
| D: | Datensegment | --> | problemorientiert |
| S: | Stacksegment | --> | system-/problemorientiert |
| I: | Statusinformation | --> | systemorientiert |
Die physische Anordnung dieser Komponenten im Arbeitsspeichers eines Rechners kann in
unterschiedlichen Betriebssystemen verschieden sein.
Wir halten also fest:
Prozeßmodell
- Prozeß = Programm während der Ausführung
(Für uns gleichbedeutend mit "Task". Es gibt jedoch BS, bei denen
ein Programm mehrere Prozesse startet, einen solchen Prozeß nennt man dann
"Thread".)
- es können sich mehrere Prozesse gleichzeitig im Speicher befinden, es
ist jedoch immer nur ein Prozeß aktiv, d.h. er wird von der Hardware bearbeitet
(außer es gibt mehrere CPUs) --> parallel falls die Zahl der
Prozessoren größ oder gleich der Zahl der Prozesse ist, quasiparallel
im anderen Fall.
- Ein Teil des BS, der Scheduler, wählt einen Prozeß aus, teilt ihm
die CPU zu und läßt ihn eine gewisse Zeit rechnen.
Moderne Rechner können mehrere Dinge gleichzeitig ausführen. Unterstützt
durch die Hardware lassen sich einzelne Aufgaben des BS parallelisieren. z. B.
das Ausgeben einer Datei auf dem Drucker, während das Programm weiterläuft
(auch im Einprogrammbetrieb!) --> parallele Arbeit von CPU und E/A-Geräten.
Im Mehrprogrammbetrieb wird jedem Programm einen kurzen Zeitabschnitt (Zeitscheibe)
lang die CPU zugeteilt, wodurch die Benutzer die Illusion erhalten, alle Programme
würden gleichzeitig bearbeitet --> Pseudoparallelität.
- Jeder Prozeß besitzt seine eigene Prozeßumgebung (Instanz).
- Jeder Prozeß kann seinerseits andere Prozesse erzeugen und - mit Hilfe
der BS-Kerns - mit anderen Prozessen kommunizieren.
- Prozesse können voneinander abhängen --> kooperierende Prozesse.
Deranrtige Prozesse müssen sich untereinander synchronisieren.
- Prozessen kan eine Priorität zugeordnet werden, aus der sich die
Reihenfolge ergibt, mit der die Prozesse der CPU zugeteilt werden.
- Speicherung der Prozeßzustände in einer vom BS geführten
Prozeßtabelle.
2.2 Prozeßzustände
Während seiner Abarbeitung kann ein Prozeß verschiedene Zustände
einnehmen:
- aktiv (running): Prozeß wird von der CPU bearbeitet
- bereit (ready): Prozeß kann die CPU benutzen, ist aber durch einen anderen
Prozeß verdrängt worden
- blockiert: Prozeß wartet auf das Eintreten eines bestimmten Ereignisses
(z. B. Drucker bereit, Benutzereingabe, etc.)
Der Einfachheit halber wird hier ein Rechnersystem mit nur einer CPU angenommen,
d. h. ein Prozeß ist aktiv, alle anderen sind bereit oder blockiert.
- Für bereite und blockierte Prozesse wird jeweils eine separate Warteliste
geführt.
- Ein neu gestartetes Programm wird am Ende der Bereit-Liste eingetragen.
- Ein spezieller Teil des Betriebssystems, der Scheduler, teilt den Prozessen
die CPU zu. Für die Zuteilung existieren unterschiedliche Algorithmen, die
alle das Ziel haben, die CPU möglichst gerecht unter allen Prozessen aufzuteilen.
Für die Steuerung der Zeitscheiben ist ein in regelmäßigen Zeitabständen
auftretender Harwareinterrupt notwendig --> Scheduler wird regelmäßig
aufgerufen.
Die Situation in der Hardware stellt sich etwa folgendermaßen dar. Im Speicher liegen
die einzelnen Instanzen der Prozesse. Jeweils ein Prozeß wird der CPU zugeteilt.
Zustandswechsel eines Prozesses:
- Dispatch: bereit --> aktiv
Zuteilung der CPU an einen Prozeß.
- Timerrunout: aktiv --> bereit
Nach Ablauf einer Zeitscheibe wird dem Prozeß die CPU wieder entzogen.
- Block: aktiv --> blockiert
Aktiver Prozeß hat eine E/A-Operation angefordert (oder sich selbst für
eine bestimmte Zeit verdrängt), bevor seine Zeitscheibe abgelaufen war.
Dies ist der einzige Zustandswechsel, den ein Prozeß selbst auslösen kann.
- Wakeup: blockiert --> bereit
Das Ereignis, auf das der Prozeß gewartet hat ist eingetreten.
Signal an den Prozeß
Zu jedem Prozeß legt das BS einen Prozeßsteuerblock (process control
block = PCB) in der Prozeßtabelle ab, der alle notwendigen Informationen
über einen Prozeß enthält, z. B.:
- Prozeßzustand
- eindeutige Prozeßkennung (process identification = PID)
- Prozeßpriorität
- Programmstatus (Registerwerte)
- Speicherbelegung (und weitere Info zur Speicherverwaltung)
- vom Prozeß verwendete Resourcen (Dateien, Drucker, etc.)
- weitere Verwaltungsinformationen
2.3 Prozeßhierarchie
Ein Prozeß kann einen neuen Prozeß starten (fork, spawn); ein solcher
Prozeß heißt "Kindprozeß" oder "Sohnprozeß"
(child process) und der Erzeuger-Prozeß wird "Elternprozeß"
oder "Vaterprozeß" (parent process) genannt.
- Jeder Kindprozeß hat genau einen Elternprozeß
- Ein Elternprozeß kann mehrere Kindprozesse besitzen
2.4 Prozeß-Operationen des BS
| Create | Erzeugen eines Prozesses (z.B. Laden eines Programms)
- Vergabe einer PID, Anlegen eines PCB in der Prozeßtabelle
- Allokieren des benötigten Speichers
- Reservieren der benötigten Resourcen
- Vergabe einer Priorität
|
| Kill | Löschen eines Prozesses
- Löschen aller Einträge aus den Systemtabellen
- Freigabe von Speicher und Resourcen (z.B. Dateien schließen)
- Löschen aller Abkömmlinge (Kindp., Enkelp., usw.)
|
| Suspend | Suspendieren eines Prozesses
- Suspendierung normalerweise nur bei Systemüberlastung durch Prozesse
höherer Priorität, Wiederaufnahme erfolgt sobald möglich.
|
| Resume | Wiederaufnehmen eines suspendierten Prozesses
- Suspendierung normalerweise nur bei Systemüberlastung durch Prozesse
höherer Priorität, Wiederaufnahme erfolgt sobald möglich.
|
| Block | Blockieren eines Prozesses |
| Wakeup | Aufwecken eines blockierten Prozesses |
| Dispatch | CPU an einen Prozeß zuteilen |
| Change | Priorität eines Prozesses ändern |
Durch die Suspendierungsmöglichkeit erweitert sich das Diagramm der
Prozeßzustände:
2.5 Prozeß-Synchronisation
In einigen Multitasking-Betriebssystemen teilen sich verschiedene Prozesse
gemeinsame Betriebsmittel. Bei gleichzeitigem Zugriff zweier Prozesse auf diese
Betriebsmittel kann es zu Inkonsistenzen der Daten kommen, die u. U. selten auftreten
und sehr schwer aufzuspüren sind.
Kooperierende nebenläufige Prozesse müssen daher wegen der zwischen ihnen vorhandenen
Abhängigkeiten miteinander synchronisiert (koordiniert) werden.
Prinzipiell lassen sich zwei Klassen von Abhängigkeiten unterscheiden:
- Die Prozesse konkurieren um die Nutzung gemeinsamer, exklusiv nutzbarer Betriebsmittel
Beispiel : Zwei Prozesse greifen verändernd zu gemeinsamen Daten zu
Der Zugriff zu den gemeinsamen Daten muß koordiniert werden, um eine Inkonsistenz der Daten zu
vermeiden --> Sperrsynchronisation (gegenseitiger Ausschluß, mutual exclusion)
- Die Prozesse sind voneinander datenabhängig.
Beispiel : Ein Prozeß erzeugt Daten, die von einem anderen Prozeß weiter bearbeitet werden sollen.
Es muß eine bestimmteAbarbeitungsreibenfolge entsprechender Verarbeitungsschritte eingehalten
werden --> Zustands- oder Ereignissynchronisation
(z. B. Produzenten-Konsumenten-Synchronisation)
Zur Realisierung einer Synchronisation bei beiden o. a. Abhängigkeitsklassen werden
häufig Semaphore eingesetzt. Ein Semaphor (Sperrvariable, Steuervariable) signalisiert
einen Zustand (Belegungszustand, Eintritt eines Ereignisses) und gibt in Abhängigkeit
von diesem Zustand den weiteren Prozeßablauf frei oder versetzt den betreffenden Prozeß
in den Wartezustand. Semaphore für den gegenseitigen Ausschluß sind dem jeweiligen
exklusiv nutzbaren Betriebsmittel zugeordnet und verwalten eine Warteliste für dieses
Betriebsmittel. Sie sind allen Prozessen zugänglich. Semaphore für die
Ereignissynchronisation zweier voneinander datenabhängiger Prozesse sind diesen
Prozessen direkt zugeordnet. Sie dienen zur Übergabe einer Meldung über das Ereignis
zwischen den Prozessen.
Zur Manipulation und Abfrage von Semaphoren existieren zwei unteilbare, d. h. nicht
unterbrechbare Operationen (Semaphor S):
- P-Operation : Anfrage-Operation
if (s > 0)
s = s - l; /* Prozeß kann weiterlaufen,
Zugriff für andere Prozesse wird gesperrt */
else
/* der die P-Operation ausführende Prozeß wird "wartend";
Eintrag des Prozesses in die vom Semaphor
verwaltete Warteliste; */
- V-Operation : Freigabe Operation
if (Warteliste leer)
s = s + l; /* Zugriff für andere, noch nicht wartende
Prozesse wird freigegeben */
else
/* nächster Prozeß in Warteliste wird "bereit";
Zugriff für wartenden Prozeß wird freigegeben */
Eine zweite Methode ist der sogenannte gegenseitige Ausschluß. Der
Programmabschnitt, in dem ein Zugriff zu dem nur exklusiv nutzbaren Betriebsmittel
(z. B. die gemeinsamen Daten) erfolgt, wird kritischer Abschnitt genannt.
Es muß verhindert werden, daß sich zwei Prozesse gleichzeitig in ihren kritischen
Abschnitten befinden. Lösungsmöglichkeit mittels Semaphor (Vorbesetzung Semaphor s=l):
unkritischer Abschnitt;
request(s); /* Anfrage-Operation (P-Operation) */
kritischer Abschnitt;
release(s); /* Freigabe-Operation (V-Operation) */
unkritischer Abschnitt;
Die dritte Methode ist die Ereignissynchronisation:
Annahme: Es gibt einen Semaphor mit Namen "event". Dazu zwei BS-Funktionen:
- BS-Funktion signal(event): Meldung über Eintritt des Ereignisses -->
event = 1; (V-Operation)
- BS-Funktion wait(event): Warten auf Meldung; nach Empfang der Meldung -->
event = 0; (P-Operation)
Lösungsmöglichkeit für Produzenten-Konsumenten-Synchronisation
(Vorbesetzung Semaphore: start = 0; finish = 0):
| Produzent: | | Konsument: |
while (TRUE)
{
while (!buffer-full)
write_into_buffer();
signal(start); /* V-Operation */
wait(finish); /* P-Operation */
}
|
|
while (TRUE)
{
wait(start); /* P-Operation */
while(!buffer-empty)
read_from_buffer();
signal(finish); /* V-Operation */
}
|
2.6 Prozeß-Kommunikation
Einige Möglichkeiten der Interprocess Communication (IPC):
- Kommunikation über gemeinsame Speicherbereiche
Prozesse können gemeinsame Datenbereiche, Variablen etc. anlegen und
gemeinsam nutzen.
- Kommunikation über gemeinsame Dateien
Prozesse schreiben in Dateien, die von anderen Prozessen gelesen werden.
- Kommunikation über Pipes
Dies sind unidirektionale Datenkanäle zwischen zwei Prozessen.
Ein Prozeß schreibt Daten in den Kanal (nfügen am Ende)
und ein anderer Prozeß liest die Daten in der gleichen Reihenfolge
wieder aus (Entnahme am Anfang). Realisierung im Speicher oder
als Dateien. Lebensdauer in der Regel solange beide Prozesse existieren.
- Kommunikation über Signale
Signale sind asynchron auftretende Ereignisse, die eine Unterbrechung bewirken
(--> Software Interrupt). In der Regel zur Kommunikation zwischen BS und
Benutzerprozeß.
- Auslösung vom Benutzer (z.B. Tastendruck)
- Auslösung durch Programmfehler (z.B. Division durch 0)
- Auslösung durch andere Prozesse (z.B. Plattenzugriff
durch BS-Dienstroutine, "Daten sind bereit")
- ...
- Kommunikation über Nachrichten (Botschaften, Messages)
Nachrichten werden vom BS verwaltet. Dieses stellt eine für die beteiligten
Prozesse gemeinsam nutzbare Transportinstanz (z. B. "Mailbox") zur Verfügung.
Auf diese greifen die Prozesse über bestimmte Transport-Funktionen des BS
(Systemaufrufe) zu. Prozeß A sendet z. B. eine Botschaft
an Prozeß B, indem er sie in der Mailbox ablegt (send(message);).
Der Prozeß B holt die Nachricht dann von der Mailbox ab (receive(message);).
- Kommunikation über Streams
Streams ermöglichen die Kommunikation über Rechnernetze.
Logisch gesehen haben Streams dieselbe Aufgabe wie die lokalen Pipes.
- Kommunikation über Prozedurfernaufrufe (remote procedure call)
Ein Prozeß ruft eine in einem anderen Prozeß angesiedelte Prozedur auf
(also über seine Adreßgrenzen hinweg). Besonders für Client-Server-Beziehungen
geeignet.
Selbst bei sehr einfachen Betriebssystemen ist eine IPC notwendig, da zumindest
eine Kommunikation zwischen einem Prozeß und dem Scheduler möglich sein
muß.
2.7 Prozeß-Scheduling
In Multitasking-Betriebssystemen ist ein spezieller Prozeß notwendig, der
aus den bereiten Prozessen den nächsten aktiven Prozeß auswählt.
Sobald mehr als ein Prozeß den Zustand "bereit" besitzt, muß
der Scheduler des Betriebssystems entscheiden, welcher Prozeß die CPU
erhält (wir gehen zur Vereinfachung von einem System mit nur einem Prozessor aus).
Kriterien für einen guten Scheduler sind:
- Gerechtigkeit: Jeder Prozeß erhält einen "gerechten" CPU-Anteil
- Effizienz: Die CPU sollte immer zu 100% ausgelastet sein
- Antwortzeit: Minimale Antwortzeit für interaktive Benutzer
- Verweilzeit: Angemessen kurze Verweilzeit für Batch-Aufträge
- Durchsatz: Möglichst viele Aufträge/Zeitraum abarbeiten
- Terminerfüllung: Bereitstellung bestimmter Ergebnisse zu festgelegten Zeitpunkten
Bei Multitasking-Betriebssystemen werden zwei Grundsysteme für das Sceduling
unterschieden:
- kooperatives Multitasking (non preemptive)
Der aktive Prozeß gibt von sich aus die CPU zu einem geeigneten Zeitpunkt
frei. Es ist nur ein geringer Verwaltungsaufwand nötig. Es besteht jedoch
die Gefahr, daß ein "unkooperativer" oder fehlerhafter Prozeß
alle anderen Prozesse blokiert.
- verdrängendes Multitasking (preemptive)
Der Scheduler kann einem Prozeß die CPU entziehen (z. B. ausgelöst durch
einen Timer-Interrupt). Dadurch kann die Bearbeitung dringlicherer Aufgaben jederzeit
begonnen werden (z. B. bei Echtzeit-BS). Ein fehlerhafter Prozeß kann das
System nicht blockieren).
Anstoß für den Prozeßwechsel durch Verdrängung:
- Zeitgesteuerte Strategien
Jeder Prozeß erhält die CPU für eine bestimmte Zeitspanne (Zeitscheibe).
Danach wird die CPU dem nächsten Prozeß zugeteilt (Zeitscheibenverfahren,
round robin).
- Ereignisgesteuerte Strategien
Ein Prozeßwechsel findet statt, wenn ein Ereignis (z. B. ein Hardwareinterrupt)
einen anderen Prozeß benötigt. Hier werden allgemein den einzelnen Prozessen
Prioritäten zugeordnet, die sich dynamisch ändern. Ein bestimmtes Ereignis
verleiht "seinem" Prozeß eine höhere Priorität.
Scheduling-Strategien
Bei kooperativem Multitasking oder ereignisgesteuerten Scedulern wird die Zuteilungsstrategie
über Prioritäten gesteuert, wobei man beim kooperativen System von relativem
Vorrang spricht (der erst durch nach Freigabe der CPU durch den aktiven Prozeß
wirksam wird) und beim ereignisgesteuerten System vom absoluten Vorrang (der sofort
zum Prozeßwechsel führt).
Die Zeitscheibensteuerung kann als Sonderfall der Ereignissteuerung betrachtet
werden, das Ereignis ist in diesem Fall der Ablauf der zugeteilten Zeitscheibe.
Einige Strategien, die in der Praxis verwendet werden, sind:
- Wer zuerst kommt, wird zuerst bedient (first come, first served):
Verteilung der Prioritäten nach Ankunftszeit, ohne Vorrechte. Kommmen
zwei Prozesse genau gleichzeitig, wird eine zufällige Auswahl getroffen.
Gute Systemauslastung, aber schlechtes Antwortzeitverhalten (lang laufende Prozesse
behindern Kurzläfer). EInfach zu implementieren.
- Zeitscheibenverfahren (round robin):
Jeder Prozeß erhält eine feste Zeitspanne (time slice) zugeordnet.
Nach Ablauf dieser Zeitspanne wird er verdrängt und der nächste Prozeß
erhält die CPU --> zyklische Zuteilung. Alle Prozesse haben immer die gleiche
Priorität. Die Zeitspanne kann konstant sein oder abhängig von der
Prozessorbelastung variieren. Kurze Antwortzeiten bei kleinen Zeitscheiben,
aber dann höhere Verluste durch die häfigen Prozeßwechsel.
- Prioritätssteuerung:
Jedem bereiten Prozeß wird eine Priorität zugeordnet. Vergabe der CPU in absteigender
Priorität. Ein Prozeß niedrigerer Priorität kann die CPU erst erhalten, wenn alle
Prozesse höherer Priorität abgearbeitet sind. Ein bereit werdender Prozeß höherer
Priorität verdrängt einen aktiven Prozeß niedrigerer Priorität. Alle Prozesse
gleicher Priorität werden i.a. in jeweils einer eigenen Warteschlange geführt
Realisierung mehrerer unterschiedlicher Verfahren, z. Teil gemischt mit anderen
Strategien , z. B.
- Reine Prioritätssteuerung: Prozesse gleicher Priorität werden nach der
Eingangsreihenfolge abgearbeitet (z. B. in Echtzeit-BS)
- Prioritätsgesteuerung mit unterlagertem Zeitscheibenverfahren:
Prozesse gleicher Priorität werden nach dem Zeitscheibenverfahren abgearbeitet
- Dynamische Prioritätsvergabe:
Die Priorität auf die CPU wartender Prozesse wird allmählich erhöht
- Mehrstufiges Herabsetzen (multilevel feedback):
Festlegung einer maximalen Rechenzeit für jede Prioritätsstufe. Hat ein Prozeß
die max. Rechenzeit seiner Priorität verbraucht, bekommt er die nächstniedrigere
Priorität, bis er die niedrigste Stufe erreicht hat.
- Es gibt noch zahlreiche weitere Scheduling-Strategien.
In Dialogsystemen wird normalerweise Round Robin verwendet, um den Benutzern akzeptable
Antwortzeiten zu bieten. Bei Batchbetrieb und gemischten Systemen kommen oft Kombinationen
der o. g. Strategien vor - z. B. getrenntes Sceduling für Dialog- und Batchbetrieb.
Jeder Prozeß (oder Thread) muß seinen lokalen Datenbereich besitzen,
da es durchaus vorkommen kann, das ein Prozeß oder Thread von mehreren anderen
aus gestartet werden kann (z. B. die Benutzershell bei einem Multiusersystem).
Insbesondere dürfen Betriebssystemdienste keine globalen Speicherbereiche
verwenden, da diese von allen laufenden Prozessen aufgerufen werden können
und sonst bei der Prozeßumschaltung Werte des verdrängten Prozesses durch
den BS-Aufruf des nun aktiven Prozesses überschrieben würden. Man nennt
diese Eigenschaft Wiedereintrittsfähigkeit (engl. "reentrance").
Manche Singletasking-BS (z. B. MS-DOS) sind nicht reentrant und daher nicht oder
nur schwer auf Multitaskingbetrieb erweiterbar.
2.8 Beispiele
- Windows bis Version 3.0
Jeder Prozeß erhält eine feste Zeitscheibe. Die Prozesse können untereinander
nicht kommunizieren (außer auf dem Umweg über das Betriebssystem). Ereignisse
(z. B. Mausbewegung) werden von Betriebssystem bearbeitet und den Prozessen gemeldet.
Eigentlich nur die Vorstufe eines Multitasking-BS --> Prozeß-Swapper.
- Windows ab Version 3.1
Kooperatives Multitasking. Ein Prozeß kann eine "öffentliche"
Nachrichten senden, die dann von einem anderen Prozeß aufgenommen und beantwortet
werden kann (Client-Server-Prinzip). Für Ereignisse (z. B. Mausbewegung) existieren
jeweils einzelne Prozesse. Der BS-Kern stellt nur eine Schnittstelle für Systemaufrufe
zur Verfügung.
- Windows NT
Prinzipielle Arbeitsweise wie bei Windows ab 3.1. Jedoch überwacht der BS-Kern
die Kommunikation der Prozesse und kann sie gegebenenfalls verhindern. Zur besseren
Kooperation können einzelne Programme in mehrere Prozesse aufgeteilt werden,,
die wieder untereinander kommunizieren ("Multithreading", das englische
Wort "Thread" bedeutet "Faden" - die Teilprozesse eines Programms
sind sozusagen über ihre Kommunikationsverbindung "aufgefädelt").
- IBM OS/2
Zeitscheibenverfahren für alle Prozesse. Zusätzlich können alle Prozesse
mit dem Betriebssystemkern kommunizieren. Ereignisse werden vom Betriebssystemkern
an die Prozesse weitergereicht.
- Unix
Zeitscheibenverfahren mit Prioritätssteuerung. Diverse Möglichkeiten der
IPC. Der BS-Kern verarbeitet alle Ereignisse und "weckt" den Prozeß
auf, dem das Ereignis zugeordnet ist. Zeitscheiben sind je nach Bedarf unterschiedlich
lang. Je nach Variante von Unix gibt es auch Multithreading. Zusätzlich ist
ein Multiuserbetrieb möglich.
Realzeitbetriebssysteme arbeiten in der Regel mit Zeitscheibenverfahren, wobei
zusätzliche Bedingungen hinzukommen. Ereignisse (in der Regel Hardware- oder
Software-Interrupts) müssen innerhalb einer bestimmten Sollzeit bearbeitet
werden (Echtzeitbedingung). Daher findet sich hier häufig eine Aufteilung
der Programme in einzelne Threads (bei Realzeitbetriebssystemen auch oft "Task"
genannt).
Copyright © FH München, FB 04, Prof. Jürgen Plate