Eigenschaften von Modernen Betriebssystemen
Last updated
Last updated
Multitasking wird von allen modernen Betriebssystemen unterstützt und bedeutet, dass
beispielsweise ein Anwender in einem Textverarbeitungsprogramm Dokumente bearbeiten, während eine Datenbank im Hintergrund Daten sortiert. Der Vorteil ist offensichtlich, stellt aber für den Computer ein Problem dar, da der Prozessor grundsätzlich nur ein einziges Programm auf einmal ausführen kann. Die Lösung besteht darin, dass der Prozessor in rascher Folge zwischen den Programmen hin und her schaltet, und für den Benutzer somit ein Eindruck der Gleichzeitigkeit entsteht. Es wird daher ein Mechanismus für eine gerechte Zeitzuteilung an die Prozesse benötigt, damit die Prozesse nach einem Unterbruch problemlos weiterlaufen können. Schliesslich soll eine Aufgabe genau an der Stelle fortgesetzt werden können, an der sie unterbrochen wurde. Diese Umschaltung kostet jedes Mal einige Zeit und ist ein beträchtlicher Verwaltungsaufwand für das Betriebssystem.
Ein Prozess oder Task besteht aus einem aktiven gerade laufenden Programm im Arbeitsspeicher und den zugehörigen Zustands- und Steuerinformationen. Diese Informationen müssen beim Multitasking gespeichert und danach wiederhergestellt werden, damit der Prozess weiterlaufen kann. Unter anderem müssen die folgenden Daten für jeden Prozess gespeichert werden:
Geöffnete Dateien
Status der Peripheriegeräte
Aktuelles Verzeichnis
Speicherbereich des Prozesses und seiner Daten
Die einzelnen Prozesse werden abwechslungsweise auf dem Prozessor ausgeführt. Die Prozessorzeit wird hierbei in mehrere Zeitabschnitte eingeteilt. Ist ein Zeitabschnitt abgelaufen, entzieht das Betriebssystem dem aktuellen Prozess den Zugriff auf den Prozessor und gibt ihn an den nächsten Prozess weiter. Dieses Verfahren wird präemptives Multitasking genannt und von allen modernen Betriebssystemen eingesetzt. Die Priorität eines Prozesses, die teilweise auch vom Benutzer definiert werden kann, legt fest, wie viel Zeit einem Prozess zur Verfügung gestellt wird. Die Anwendungen selbst haben darauf keinen Einfluss.
Beim kooperativen Multitasking bestimmt der Prozess selbst, wann er die Kontrolle abgibt. Dieses Verfahren kann allerdings dazu führen, dass ein schlecht programmiertes, «abgestürztes» oder «bösartiges» Programm alle anderen Prozesse blockiert, weil es die Kontrolle nie übergibt. Deshalb wird es heute kaum mehr eingesetzt.
Zur Veranschaulichung sehen Sie unten zwei Programme A und B, die auf einem Multitasking-Betriebssystem laufen. Jedes Programm verfügt über drei Prozesse. Durch das Betriebssystem wird nun jedem Prozess reihum ein kurzer Zeitabschnitt zugeteilt, in dem er den Prozessor benutzen darf. Im Moment läuft gerade ein Prozess P1 des Programms A auf der CPU.
In der Realität sind die Zeitabschnitte nicht gleich lang. Deren Länge und Häufigkeit hängt von verschiedenen Faktoren wie der Prozesspriorität oder dem Prozesszustand ab. Z. B. erhält der Prozess keine CPU-Zeit, wenn er auf einen anderen Prozess wartet.
Computer mit mehreren Prozessoren können anfallende Arbeit aufteilen. Mit mehreren Prozessoren können tatsachlich auch mehrere Tasks gleichzeitig (einer pro Prozessor) ausgeführt werden. Wie gut die Arbeitsteilung funktioniert, hängt allerdings stark vom jeweiligen Betriebssystem und den eingesetzten Anwendungsprogrammen ab. Das hängt vor allem damit zusammen, dass Prozesse häufig aufeinander warten müssen und somit selten alle Prozessoren gleichzeitig voll arbeiten können. Je intelligenter ein Betriebssystem die Prozesse verteilt und je besser ein Programm auf den Multiprozessor-Betrieb optimiert ist, desto grösser ist der Leistungsgewinn. Multiprozessor-Betrieb bringt also mehr Rechenleistung, sie wächst jedoch nie direkt proportional mit der Anzahl Prozessoren. Mit anderen Worten: Zwei Prozessoren leisten nicht zweimal so viel wie ein einzelner Prozessor, drei Prozessoren leisten nicht dreimal so viel wie ein einzelner Prozessor etc.
In der untenstehenden Abbildung sehen Sie, dass bei zwei Prozessoren nun tatsächlich zwei Prozesse gleichzeitig ausgeführt werden (P1 von Programm A auf CPU1 und P1 von Programm B auf CPU2), wir haben hier also echtes Multitasking.
Aktuelle Betriebssysteme arbeiten zusätzlich zu Multitasking auch mit Multi-Threading. Multi-Threading ist eine Weiterentwicklung des Multitasking-Verfahrens. Dabei wird ein einzelner Prozess in mehrere gleichzeitig laufende Teilprozesse bzw. Threads unterteilt. Multi-Threading kann quasi als Multitasking innerhalb eines Tasks aufgefasst werden.
Multi-Threading erlaubt beispielsweise, dass der Benutzer innerhalb desselben Tasks einen Text erfasst, während im Hintergrund die Silbentrennung und die Rechtschreibprüfung laufen. Die Silbentrennung und die Rechtschreibprüfung entsprechen also einzelnen „Prozessfäden“ im Task der „Textverarbeitung“. Gleichzeitig können weitere Tasks wie z.B. ein Download on MP3-Dateien oder eine Datenbankabfrage im Gang sein.
Vorteile eines Multi-Threading Betriebssystems:
Threads sind so konzipiert, dass das Umschalten zwischen den einzelnen Threads viel schneller geht als zwischen laufenden Prozessen, da weniger interner Verwaltungsaufwand entsteht. Ein ㅤ Thread ist somit eine Art „Leichtgewichts-Prozess“.
Auf einem Multiprozessor-System kann die Verarbeitungsgeschwindigkeit beträchtlich gesteigert werden, weil der Hauptprozess Teilaufgaben an einem Thread abgeben kann und so entlastet wird.
Nachteile eines Multi Threading Betriebssystems:
Da Threads denselben Speicherbereich benutzen, können sie sich gegenseitig beeinflussen, stören oder gar zum Absturz bringen.
Ein Multiusersystem ist ein System auf dem mehrere Benutzer gleichzeitig arbeiten können. Dazu sollten die Benutzer fähig sein ihre Oberfläche zu personalisieren und Einstellungen vorzunehmen zu können. Auch muss festgelegt werden, welcher User auf dem System was ausführen darf.
Bekannte Beispiele von Multiusersystemen sind Windows RDS (Remote Desktop Service, früher Terminal Services) und Citrix XenApp.
Ein Windows Client Betriebssystem unterstützt keine Multiuserkonfiguration. Die meisten Linux Distributionen unterstützen eine Multiuserkonfiguration via SSH (Kommandozeilenverbindung über das Netzwerk).
Falls zu wenig RAM für alle Prozesse vorhanden ist, werden bestimmte Prozesse vom Arbeitsspeicher auf die Festplatte ausgelagert. Damit wird dem Prozessor mehr Speicher „vorgegaukelt“, als tatsächlich vorhanden ist. Dies ermöglicht es, sehr viele Tasks gleichzeitig auszuführen, führt jedoch dann beim Zugriff auf den ausgelagerten Speicher zu einer starken Verlangsamung, da der Zugriff auf die Festplatte viel langsamer ist als der Zugriff auf den Arbeitsspeicher.
Beim Paging werden einzelne Speicher-seiten von fester Grösse (z.B. 1 kB) ausgelagert; normalerweise wird die am längsten nicht benutzte Speicherseite ausgelagert. Somit kann es sein, dass vom Prozess 1 mehr als die Hälfte des geschriebenen Arbeitsspeichers auf der Festplatte liegen.
Wird ein solcher Speicherbereich wieder angesprochen, schreibt das System diesen wieder ins RAM.
Beim Swapping werden ganze Prozesse, die lange nicht mehr aktiv waren, auf die Festplatte ausgelagert. Werden ausgelagerte Prozesse wieder aktiv, schreibt das System diese wieder in das Memory. Heute wird meist ein swap-File ver-wendet.
In modernen Betriebssystemen werden meist beide Verfahren kombiniert eingesetzt.