Buffl

BS KE 1

D
von Drive1

4 Aktivierung des Betriebssystems durch den Mechanismus der Unterbrechung


Wie arbeitet eine CPU ohne Unterbrechung?

Die CPU arbeitet wie ein unermüdlicher Arbeiter, der in einem ständigen Zyklus aus zwei Phasen arbeitet:

  1. Holphase: Hier holt die CPU den nächsten Befehl aus dem Hauptspeicher und lädt ihn in das Befehlsregister (IR). Gleichzeitig wird der Befehlszähler (PC) um eins erhöht, um auf den nächsten Befehl vorzubereiten. Es ist, als würde die CPU sagen: „Was steht als Nächstes auf meiner To-do-Liste?“

  2. Ausführungsphase: Jetzt wird der Befehl entschlüsselt und ausgeführt. Dabei kann die CPU verschiedene Aufgaben erledigen:

    • Daten austauschen: Daten werden zwischen dem Prozessor und dem Hauptspeicher hin- und hergeschoben (lesen oder schreiben).

    • Ein-/Ausgabe: Daten werden mit externen Geräten wie Tastaturen, Monitoren oder Festplatten ausgetauscht.

    • Datenoperationen: Die CPU führt Berechnungen oder logische Operationen durch, z. B. Additionen oder Vergleiche.

    • Steuerung: Die CPU springt zu anderen Programmteilen, z. B. bei Verzweigungen oder Schleifen.

Ohne diesen Zyklus wäre die CPU wie ein Auto ohne Räder – es würde nirgendwo hingehen!

Einfachste Erklärung:

Die CPU arbeitet in zwei Phasen:

  1. Holphase: Der nächste Befehl wird aus dem Hauptspeicher ins Befehlsregister geladen, und der Befehlszähler wird erhöht.

  2. Ausführungsphase: Der Befehl wird dekodiert und ausgeführt. Dabei kann die CPU:

    • Daten mit dem Hauptspeicher austauschen (lesen/schreiben),

    • Daten mit Ein-/Ausgabegeräten austauschen,

    • arithmetische oder logische Operationen durchführen,

    • den Programmablauf steuern (z. B. Verzweigungen).






4 Aktivierung des Betriebssystems durch den Mechanismus der Unterbrechung


Wie arbeitet eine CPU mit Unterbrechung?

Die CPU mit Unterbrechung arbeitet wie ein multitaskingfähiger Superheld, der nicht nur seine Aufgaben erledigt, sondern auch immer ein Auge auf dringende Notfälle hat. Ihr Arbeitszyklus besteht aus drei Phasen:

  1. Holphase: Die CPU holt den nächsten Befehl aus dem Hauptspeicher und lädt ihn ins Befehlsregister (IR). Gleichzeitig wird der Befehlszähler (PC) erhöht, um auf den nächsten Befehl vorzubereiten. Es ist, als würde sie fragen: „Was steht als Nächstes auf meiner Liste?“

  2. Ausführungsphase: Der Befehl wird entschlüsselt und ausgeführt. Hier kann die CPU Daten verarbeiten, Berechnungen durchführen oder mit externen Geräten kommunizieren.

  3. Unterbrechungsphase: Jetzt wird es spannend! Die CPU prüft, ob es eine Unterbrechung (Interrupt) gibt – wie ein Notruf, der sofortige Aufmerksamkeit erfordert.

    • Falls nein: Die CPU geht einfach zurück zur Holphase und arbeitet weiter.

    • Falls ja: Die CPU rettet den aktuellen Zustand des laufenden Programms (wie ein Schnappschuss) und kümmert sich um die Unterbrechung. Sobald die Störung behoben ist, kehrt sie zum geretteten Programm zurück.

Ohne diese Unterbrechungsphase wäre die CPU wie ein Arbeiter, der keine Notfälle erkennen kann – und das Chaos wäre vorprogrammiert!

Einfachste Erklärung:

Die CPU mit Unterbrechung arbeitet in drei Phasen:

  1. Holphase: Der nächste Befehl wird ins Befehlsregister geladen, und der Befehlszähler wird erhöht.

  2. Ausführungsphase: Der Befehl wird dekodiert und ausgeführt.

  3. Unterbrechungsphase: Die CPU prüft, ob eine Unterbrechung vorliegt:

    • Nein: Zurück zur Holphase.

    • Ja: Der aktuelle Programmzustand wird gespeichert, und die Unterbrechung wird behandelt.




4 Aktivierung des Betriebssystems durch den Mechanismus der Unterbrechung


Was soll die Hardware anbieten?


  1. Unterbrechung: Unterbrechungen sind wie Weckrufe für das Betriebssystem. Sie sorgen dafür, dass das Betriebssystem aktiviert wird, um auf wichtige Ereignisse zu reagieren – sei es eine Benutzereingabe, ein Hardwarefehler oder ein fertiggestellter Prozess. Ohne Unterbrechungen würde das Betriebssystem schlafen und nicht merken, wenn etwas dringend erledigt werden muss.

  2. Zeitgeber: Der Zeitgeber ist wie ein Schiedsrichter, der die CPU-Zeit fair aufteilt. Er stellt sicher, dass kein Programm die CPU zu lange blockiert, indem er regelmäßig „Stopp!“ ruft und den nächsten Prozess an die Reihe kommen lässt. So bleibt das System reaktionsfähig und fair.

  3. Speicherschutzmechanismen: Diese Mechanismen sind wie Sicherheitswachen, die den Speicher vor unerlaubtem Zugriff schützen. Sie sorgen dafür, dass Programme nur auf ihren eigenen Speicherbereich zugreifen können und nicht versehentlich (oder absichtlich) den Speicher anderer Programme beschädigen.

  4. Privilegierte Befehle: Privilegierte Befehle sind wie geheime Werkzeuge, die nur das Betriebssystem im Systemmodus verwenden darf. Im Benutzermodus haben Programme keinen Zugriff darauf, um das System vor Fehlern oder bösartigen Aktionen zu schützen. Es ist, als ob nur der Chef den Safe öffnen darf!

Einfachste Erklärung:

  1. Unterbrechung: Aktiviert das Betriebssystem, um auf Ereignisse zu reagieren.

  2. Zeitgeber: Teilt die CPU-Zeit fair zwischen den Programmen auf.

  3. Speicherschutzmechanismen: Schützen den Speicher vor unerlaubtem Zugriff.

  4. Privilegierte Befehle: Können nur im Systemmodus ausgeführt werden, um das System zu schützen.


5 Behandlung der Unterbrechungen


Wie funktioniert eine Hardware-Unterbrechung?

Der Interrupt-Controller ist wie der Vermittler zwischen der CPU und den Geräten, die eine Unterbrechung auslösen wollen. Er sorgt dafür, dass die CPU weiß, was los ist, und priorisiert die eingehenden Anfragen. Hier ist, wie das Ganze funktioniert:

Leitungen zwischen CPU und Interrupt-Controller:

  1. INT (INTerrupt): Der Interrupt-Controller aktiviert diese Leitung, um der CPU zu sagen: „Hey, ein Gerät braucht deine Aufmerksamkeit!“

  2. INTA (INTerrupt Acknowledge): Die CPU antwortet mit einem Bestätigungssignal: „Okay, ich kümmere mich darum!“

  3. D0 bis D07: Über diesen Datenbus sendet der Controller die Unterbrechungsnummer an die CPU, damit sie weiß, welches Gerät die Unterbrechung ausgelöst hat.

Register im Interrupt-Controller:

  • Interrupt Service Register (ISR): Hier werden die Unterbrechungen gespeichert, die gerade bearbeitet werden. Es ist wie eine To-do-Liste für die CPU.

  • Interrupt Mask Register (IMR): Dieses Register entscheidet, welche Unterbrechungen ignoriert werden sollen. Es ist wie ein Filter, der bestimmte Anfragen blockiert.

  • Interrupt Request Register (IRR): Hier werden alle eingehenden Unterbrechungsanforderungen gesammelt, wie in einem Wartezimmer.

  • Priority Resolver: Dieser entscheidet, welche Unterbrechung die höchste Priorität hat. Die wichtigste Aufgabe wird ausgewählt, ins ISR geschrieben, und die CPU wird über die INT-Leitung informiert.

Ohne den Interrupt-Controller wäre die CPU wie ein überlasteter Empfangschef, der nicht weiß, wer zuerst dran ist!

Einfachste Erklärung:

Der Interrupt-Controller verbindet die CPU mit den Geräten und verwaltet Unterbrechungen:

Leitungen:

  1. INT: Signalisiert der CPU, dass eine Unterbrechung vorliegt.

  2. INTA: Die CPU bestätigt, dass sie die Unterbrechung behandeln wird.

  3. D0 bis D07: Überträgt die Unterbrechungsnummer an die CPU.

Register:

  • ISR: Speichert die aktuell bearbeiteten Unterbrechungen.

  • IMR: Maskiert bestimmte Unterbrechungen, um sie zu ignorieren.

  • IRR: Sammelt alle eingehenden Unterbrechungsanforderungen.

  • Priority Resolver: Wählt die Unterbrechung mit der höchsten Priorität aus und informiert die CPU.




5 Behandlung der Unterbrechungen


Wie wird eine Unterbrechungsroutine gefunden?

Der Unterbrechungsvektor ist wie ein Adressbuch im Hauptspeicher, das dem Betriebssystem sagt, wo es die passenden Unterbrechungsroutinen findet. Hier ist, wie es funktioniert:

  • Der Unterbrechungsvektor hat eine Startadresse, z. B. 11100000.

  • Jede Unterbrechungsroutine hat ihre eigene Startadresse im Hauptspeicher.

  • Jede Unterbrechungsnummer ist wie ein Index in diesem Adressbuch. Um die Startadresse der passenden Routine zu finden, rechnet das Betriebssystem: Unterbrechungsnummer + Startadresse des Unterbrechungsvektors.

Beispiel:

  • Die Startadresse des Unterbrechungsvektors ist 11100000.

  • Die Unterbrechungsnummer ist 00000001 (für Routine 1).

  • Die gesuchte Startadresse der Routine liegt also bei: 00000001 + 11100000 = 11100001.

Das Betriebssystem geht zu dieser Adresse, findet dort die Startadresse der Routine und führt sie aus. Es ist, als ob du in einem Telefonbuch nachschlägst: Du suchst den Namen (Unterbrechungsnummer), addierst die Seitenzahl (Startadresse) und findest die Telefonnummer (Startadresse der Routine).

Ohne diesen Mechanismus wäre das Betriebssystem wie ein Botaniker ohne Herbarium – es wüsste nicht, wo es die richtigen Informationen findet!

Einfachste Erklärung:

  • Der Unterbrechungsvektor hat eine Startadresse (z. B. 11100000).

  • Jede Unterbrechungsroutine hat eine eigene Startadresse im Hauptspeicher.

  • Die Unterbrechungsnummer ist ein Index im Unterbrechungsvektor.

  • Die Startadresse der Routine wird berechnet durch: Unterbrechungsnummer + Startadresse des Unterbrechungsvektors.

Beispiel:

  • Startadresse: 11100000

  • Unterbrechungsnummer: 00000001

  • Adresse der Routine: 11100000 + 00000001 = 11100001


5 Behandlung der Unterbrechungen


Hardware-Aktionen bei einer Hardware-Unterbrechung:


  1. Gerät löst Unterbrechung aus: Ein Gerät, das eine Unterbrechung auslösen möchte, aktiviert die Leitung zum Interrupt-Controller. Es ist, als ob es sagt: „Hey, ich brauche Hilfe!“

  2. Interrupt-Controller wählt Priorität aus: Wenn eine oder mehrere Leitungen aktiviert sind, sucht der Interrupt-Controller die Unterbrechung mit der höchsten Priorität aus und sendet ein Signal über die INT-Leitung an die CPU. Es ist, als ob er sagt: „Hier ist der dringendste Fall!“

  3. CPU bestätigt die Unterbrechung: Wenn die CPU bereit ist, die Unterbrechung zu bearbeiten, sendet sie eine Bestätigung über die INTA-Leitung zurück. Es ist, als ob sie antwortet: „Okay, ich kümmere mich darum!“

  4. Interrupt-Controller sendet Unterbrechungsnummer: Nach der Bestätigung sendet der Interrupt-Controller die Unterbrechungsnummer an die CPU. Diese Nummer sagt der CPU, welches Gerät die Unterbrechung ausgelöst hat.

  5. CPU speichert Unterbrechungsnummer: Die CPU speichert die Unterbrechungsnummer provisorisch, um sie später zu verwenden.

  6. CPU sichert den Prozesszustand: Die CPU speichert den Befehlszähler, das Programmstatuswort (PSW) und andere Registerinhalte im Systemstapel (einem speziellen Speicherbereich des Betriebssystems). Warum nicht direkt im Prozesskontrollblock (PCB)? Weil der Systemstapel schneller zugänglich ist und die CPU sofort weiterarbeiten kann, ohne den PCB zu verwalten.

  7. CPU sucht die Unterbrechungsroutine: Die CPU verwendet die Unterbrechungsnummer als Index im Unterbrechungsvektor, um die Startadresse der Unterbrechungsroutine zu finden. Es ist, als ob sie im Telefonbuch nachschlägt, um die richtige Nummer zu wählen.

Einfachste Erklärung:

  1. Ein Gerät aktiviert die Leitung zum Interrupt-Controller.

  2. Der Interrupt-Controller wählt die Unterbrechung mit der höchsten Priorität aus und sendet ein Signal über die INT-Leitung an die CPU.

  3. Die CPU bestätigt die Unterbrechung über die INTA-Leitung.

  4. Der Interrupt-Controller sendet die Unterbrechungsnummer an die CPU.

  5. Die CPU speichert die Unterbrechungsnummer provisorisch.

  6. Die CPU speichert den Befehlszähler, das PSW und andere Registerinhalte im Systemstapel (nicht im PCB, da der Systemstapel schneller ist).

  7. Die CPU verwendet die Unterbrechungsnummer, um im Unterbrechungsvektor die Startadresse der Unterbrechungsroutine zu finden.


5 Behandlung der Unterbrechungen


Ein Beispiel zur Software-Unterbrechung:

  1. TRAP-Instruction und Moduswechsel: Wenn ein C-Programm die Bibliotheksfunktion read aufruft, z. B. count = read(fd, buffer, nbytes);, übersetzt der Compiler diesen Aufruf in eine TRAP-Instruction. Diese löst einen Moduswechsel vom Benutzermodus in den Systemmodus aus, damit das Betriebssystem den Systemaufruf ausführen kann. Gleichzeitig werden die Unterbrechungsnummer (für read) und die Parameter (wie fd, buffer, nbytes) in Registern übergeben. Es ist, als ob du einen Notruf absetzt und alle wichtigen Informationen bereithältst.

  2. Unterbrechungsvektor und Startadresse: Die CPU verwendet die Unterbrechungsnummer, um im Unterbrechungsvektor nachzuschlagen. Dort findet sie die Startadresse der Unterbrechungsroutine für den Systemaufruf read. Es ist, als ob du im Telefonbuch die Nummer des richtigen Experten für dein Problem findest.

  3. Ausführung und Rückkehr: Die CPU führt die Unterbrechungsroutine aus, die den read-Aufruf behandelt. Sobald die Routine fertig ist, kehrt sie zum aufrufenden Programm zurück, und der Prozeduraufruf ist abgeschlossen. Es ist, als ob der Experte dein Problem gelöst hat und du wieder an deiner Arbeit weitermachen kannst.

Einfachste Erklärung:

  1. Der Compiler übersetzt den read-Aufruf in eine TRAP-Instruction, um einen Moduswechsel in den Systemmodus zu ermöglichen. Die Unterbrechungsnummer und Parameter werden in Registern übergeben.

  2. Die CPU sucht im Unterbrechungsvektor die Startadresse der Unterbrechungsroutine für read.

  3. Nach der Ausführung der Routine kehrt der Prozeduraufruf zurück.


5 Behandlung der Unterbrechungen


Software-Aktionen der Unterbrechungsroutine bei einer Unterbrechung:Hardware-Aktionen bei einer Software-Unterbrechung:


  1. Registerinhalte in den PCB speichern: Die Unterbrechungsroutine veranlasst den Dispatcher, alle Registerinhalte vom Systemstapel in den Prozesskontrollblock (PCB) des unterbrochenen Prozesses zu verschieben. Die Routine weiß genau, wo sich der PCB im Hauptspeicher befindet. Das ist wie ein Umzug: Die Daten werden vom temporären Lager (Systemstapel) in ihr neues Zuhause (PCB) gebracht.

  2. Ein-/Ausgabeoperationen durchführen: Die Unterbrechungsroutine ruft den Ein-/Ausgabeteil des Betriebssystems auf, um z. B. Daten von einem Gerät abzuholen oder einen Lese-Befehl an ein Gerät zu senden. Es ist, als ob du einen Boten losschickst, um eine wichtige Nachricht zu überbringen oder abzuholen.

  3. Scheduler wählt nächsten Prozess aus: Danach wird der Scheduler aufgerufen, um zu entscheiden, welcher Prozess als Nächstes die CPU nutzen darf. Das ist wie ein Schiedsrichter, der festlegt, wer als Nächstes an der Reihe ist.

  4. Zurück zum Benutzermodus: Schließlich wird der Befehl return from interrupt ausgeführt. Der Dispatcher stellt alle Registerinhalte des ausgewählten Prozesses wieder her, und die CPU wechselt vom Systemmodus zurück in den Benutzermodus. Es ist, als ob du nach einer Pause genau dort weitermachst, wo du aufgehört hast.

Einfachste Erklärung:

  1. Die Unterbrechungsroutine sorgt dafür, dass der Dispatcher alle Registerinhalte vom Systemstapel in den PCB des Prozesses speichert.

  2. Die Routine ruft den Ein-/Ausgabeteil des Betriebssystems auf, um Ein-/Ausgabeoperationen durchzuführen.

  3. Der Scheduler wird aufgerufen, um den nächsten Prozess auszuwählen, der die CPU nutzen darf.

  4. Der Befehl return from interrupt stellt die Registerinhalte des ausgewählten Prozesses wieder her, und die CPU wechselt zurück in den Benutzermodus.


6 Virtualisierung der CPU


Wie funktioniert das?


Das Betriebssystem ist wie ein Zauberer, der die Illusion erzeugt, dass mehrere Programme gleichzeitig laufen. Diese Quasiparallelität wird durch die Virtualisierung der CPU erreicht. Jedes Programm denkt, es hätte die CPU ganz für sich allein – aber in Wirklichkeit teilt sich die CPU die Zeit zwischen allen Programmen auf.

Wie funktioniert das?

  1. Prozess-Abstraktion: Das Betriebssystem bietet die grundlegende Abstraktion namens Prozess. Jeder Prozess ist wie ein eigenes kleines Universum, das denkt, es hätte die CPU ganz für sich.

  2. Mechanismen auf Betriebssystem-Ebene:

    • CPU-Scheduler: Der Scheduler ist wie ein Schiedsrichter, der entscheidet, welcher Prozess als Nächstes die CPU nutzen darf.

    • Scheduling-Strategien: Das sind die Regeln, nach denen der Scheduler arbeitet, z. B. „Jeder Prozess bekommt gleich viel Zeit“ (Round-Robin) oder „Der Wichtigste zuerst“ (Prioritätsbasiert).

  3. Mechanismen auf Hardware-Ebene:

    • Timer-Unterbrechung: Ein Timer sorgt dafür, dass die CPU regelmäßig unterbrochen wird. Das ist wie ein Wecker, der sagt: „Stopp! Jetzt ist ein anderer Prozess dran!“ Ohne den Timer könnte ein Prozess die CPU blockieren und alle anderen warten lassen.

Durch diese Mechanismen entsteht die Illusion, dass alle Programme gleichzeitig laufen – obwohl die CPU eigentlich nur zwischen ihnen hin- und herspringt.

Einfachste Erklärung:

Das Betriebssystem erzeugt die Illusion, dass mehrere Programme gleichzeitig laufen (Quasiparallelität). Dafür nutzt es:

  1. Prozess-Abstraktion: Jeder Prozess denkt, er hätte die CPU ganz für sich.

  2. CPU-Scheduler: Entscheidet, welcher Prozess als Nächstes die CPU nutzt.

  3. Scheduling-Strategien: Regeln für die Auswahl des nächsten Prozesses.

  4. Timer-Unterbrechung: Unterbricht die CPU regelmäßig, um Prozesse fair zu behandeln.


7 Prozesse


Was gehört zu einem Prozess?

Jeder Prozess bekommt seinen eigenen Adressraum, der in zwei Teile aufgeteilt ist: den Benutzer-Adressraum und den Kern-Adressraum.

Benutzer-Adressraum:

  • Programmsegment: Hier liegt der ausführbare Programmcode – das ist wie das Skript, das der Prozess abarbeitet.

  • Datensegment: Hier werden die zu bearbeitenden Daten gespeichert – das sind die Zutaten, die der Prozess für seine Arbeit benötigt.

  • Stack: Der Stack ist wie ein Notizblock, der Parameter, lokale Variablen und Rücksprungadressen bei Prozeduraufrufen speichert. Er hilft dem Prozess, den Überblick zu behalten, wenn er zwischen verschiedenen Aufgaben hin- und herspringt.

Kern-Adressraum:

  • Hier wird der Prozesskontext gespeichert, der im Prozesskontrollblock (PCB) verwaltet wird. Der PCB ist wie die Personalakte des Prozesses und enthält:

    • Prozessidentifikation: Die Prozessnummer, die den Prozess eindeutig identifiziert.

    • Prozessstatus: Die Registerinhalte, insbesondere den Befehlszähler, der zeigt, wo der Prozess in seiner Ausführung steht.

    • Prozesskontrollinformation:

      • Die Grenzen des Adressraums, die festlegen, wie viel Speicher der Prozess nutzen darf.

      • Der Prozesszustand, z. B. ob er gerade läuft, wartet oder beendet ist.

      • Die Priorität für die Planung durch den Scheduler.

Ohne diese Aufteilung wäre der Prozess wie ein Schauspieler ohne Bühne – er hätte keinen Platz, um seine Arbeit zu erledigen!

Einfachste Erklärung:

Jeder Prozess hat einen Adressraum, der in zwei Teile aufgeteilt ist:

Benutzer-Adressraum:

  • Programmsegment: Enthält den ausführbaren Code.

  • Datensegment: Enthält die zu bearbeitenden Daten.

  • Stack: Speichert Parameter, lokale Variablen und Rücksprungadressen.

Kern-Adressraum:

  • Enthält den Prozesskontext, gespeichert im Prozesskontrollblock (PCB):

    • Prozessidentifikation: Prozessnummer.

    • Prozessstatus: Registerinhalte, z. B. Befehlszähler.

    • Prozesskontrollinformation: Adressraumgrenzen, Prozesszustand, Priorität usw.


7 Prozesse


Welche Prozesszustände gibt es?

Nicht-präemptiv vs. präemptiv:

  • Nicht-präemptiv: Hier geben die Prozesse die CPU freiwillig zurück, z. B. wenn sie auf eine Ein-/Ausgabeoperation warten. Es ist, als ob ein Arbeiter sagt: „Ich bin fertig, jetzt ist jemand anderes dran.“

  • Präemptiv: Hier entzieht das System einem Prozess die CPU, auch wenn er noch nicht fertig ist. Das ist wie ein Schiedsrichter, der sagt: „Stopp! Deine Zeit ist um, jetzt ist ein anderer dran.“

Scheduler:

Der Scheduler ist wie ein Veranstaltungsplaner. Er wählt den nächsten bereiten Prozess aus, der die CPU nutzen darf, und teilt ihm ein Zeitquantum (Zeitscheibe) zu. Es ist, als ob er sagt: „Du bekommst 5 Minuten auf der Bühne, dann ist der Nächste dran.“

Dispatcher:

Der Dispatcher ist wie ein Assistent, der hinter den Kulissen arbeitet. Er sichert den Zustand des aktuellen Prozesses, fügt ihn in die Warteschlangen (bereit oder blockiert) ein und stellt den ausgewählten Prozess wieder her. Außerdem setzt er den Timerzähler neu, um das nächste Zeitquantum zu starten. Es ist, als ob er die Bühne für den nächsten Auftritt vorbereitet.

Timer (Zeitgeber):

Der Timer ist wie ein Countdown. Er zählt rückwärts und erzeugt eine Unterbrechung, wenn er 0 erreicht. Diese Unterbrechung sorgt dafür, dass der Scheduler den nächsten Prozess auswählen kann. Es ist, als ob ein Wecker klingelt und sagt: „Zeit ist um!“

Einfachste Erklärung:

  • Nicht-präemptiv: Prozesse geben die CPU freiwillig zurück.

  • Präemptiv: Das System entzieht einem Prozess die CPU.

  • Scheduler: Wählt den nächsten Prozess aus und teilt ein Zeitquantum zu.

  • Dispatcher:

    • Sichert Prozesse und fügt sie in Warteschlangen ein.

    • Stellt den ausgewählten Prozess wieder her.

    • Setzt den Timerzähler.

  • Timer: Zählt rückwärts und erzeugt eine Unterbrechung bei 0.




7 Prozesse


Wann passiert ein Prozesswechsel?

Was gibt es beim Prozesswechsel zu tun?

Warum merkt ein Prozess Prozesswechsel nicht?


Ein Prozesswechsel ist wie ein Szenenwechsel im Theater: Alles muss sorgfältig vorbereitet werden, damit die nächste Szene nahtlos beginnen kann. Hier sind die Aufgaben im Detail:

  1. Sichern des aktuellen Prozesses: Der Zustand des bisher rechnenden Prozesses wird in seinen Prozesskontrollblock (PCB) gespeichert. Das ist wie ein Schnappschuss, der alles festhält – von den Registerinhalten bis zum Befehlszähler.

  2. Einfügen in die Warteschlange: Der PCB wird in die entsprechende Warteschlange eingefügt – entweder bereit (wenn der Prozess weiterlaufen kann) oder blockiert (wenn er auf etwas warten muss, z. B. auf eine Ein-/Ausgabeoperation).

  3. Unterbrechung behandeln: Die Unterbrechung, die den Prozesswechsel ausgelöst hat, wird behandelt. Das ist wie das Lösen eines Problems, das den Wechsel notwendig gemacht hat.

  4. Nächsten Prozess auswählen: Der Scheduler wählt den nächsten Prozess aus, der die CPU nutzen darf. Es ist, als ob der Regisseur den nächsten Schauspieler auf die Bühne ruft.

  5. Return from interrupt: Der Befehl return from interrupt wird ausgeführt:

    • Der alte Zustand des ausgewählten Prozesses wird wiederhergestellt.

    • Die CPU wechselt z. B. vom Systemmodus zurück in den Benutzermodus.

Danach setzt der ausgewählte Prozess genau dort fort, wo er unterbrochen wurde – als ob nichts passiert wäre. Es ist, als ob der Schauspieler genau an der Stelle weitermacht, an der er aufgehört hat.

Einfachste Erklärung:

  1. Der Zustand des aktuellen Prozesses wird im PCB gesichert.

  2. Der PCB wird in die Warteschlange (bereit oder blockiert) eingefügt.

  3. Die Unterbrechung, die den Wechsel verursacht hat, wird behandelt.

  4. Der Scheduler wählt den nächsten Prozess aus.

  5. Der Befehl return from interrupt wird ausgeführt:

    • Der alte Zustand des Prozesses wird wiederhergestellt.

    • Die CPU wechselt z. B. vom Systemmodus in den Benutzermodus.

Danach setzt der Prozess seine Ausführung genau dort fort, wo er unterbrochen wurde.

7 Prozesse


Was ist die Aufgabe vom CPU-Scheduler?

Welche Kriterien gibt es zu Scheduling-Strategien?


Der CPU-Scheduler ist wie ein Schiedsrichter, der entscheidet, welcher Prozess als Nächstes die CPU nutzen darf. Dabei gibt es viele Scheduling-Strategien, die unterschiedliche Ziele verfolgen. Hier sind die wichtigsten Kriterien:

  1. Gute Prozessorauslastung: Die CPU soll möglichst wenig Leerlauf haben. Es ist, als ob ein Arbeiter immer beschäftigt sein soll, ohne lange Pausen.

  2. Bevorzugung interaktiver Prozesse: Prozesse, die oft Ein-/Ausgabeoperationen durchführen (z. B. Benutzeranwendungen), sollen bevorzugt werden, damit sie schnelle Antwortzeiten liefern. Es ist, als ob ein Kellner den Gästen schnell antwortet, damit sie nicht lange warten müssen.

  3. Fairness: Kein Prozess darf „verhungern“, d. h., jeder Prozess soll irgendwann die CPU nutzen dürfen. Es ist, als ob jeder Schüler im Unterricht mal dran kommt.

  4. Effizienz: Der Scheduling-Prozess selbst soll wenig Zeit und Ressourcen verbrauchen. Es ist, als ob der Schiedsrichter schnell und ohne viel Aufwand entscheidet, wer als Nächstes spielen darf.

Einfachste Erklärung:

Der CPU-Scheduler wählt den nächsten Prozess aus, der die CPU nutzen darf. Dabei gelten folgende Kriterien:

  1. Gute Prozessorauslastung: Die CPU soll wenig Leerlauf haben.

  2. Bevorzugung interaktiver Prozesse: Schnelle Antwortzeiten für Ein-/Ausgabe-intensive Prozesse.

  3. Fairness: Kein Prozess darf verhungern.

  4. Effizienz: Der Scheduling-Prozess soll wenig Zeit und Ressourcen verbrauchen.


8 Steuerung von Ein-/Ausgabegeräten


Was ist ein virtuelles Gerät?

Ein Gerät besteht aus drei Teilen, die wie ein Team zusammenarbeiten:

  1. Gerätetreiber:

    • Der Gerätetreiber ist die geräteabhängige Software, die oft im Betriebssystemkern sitzt. Er ist wie der Manager, der das Gerät steuert und überwacht.

    • Aufgaben:

      • Initialisierung: Beim Systemstart wird das Gerät initialisiert und überwacht.

      • Auftragsverwaltung: Der Treiber entnimmt einen Auftrag aus der E/A-Auftragsliste und sendet die Befehle an den Controller.

      • Datenübergabe: Die vom Controller gelieferten Daten werden an die geräteunabhängige E/A-Software des Betriebssystems weitergegeben.

  2. Controller:

    • Der Controller ist die elektronische Hardware, die die Befehle des Treibers ausführt. Er enthält oft einen Chip, der die eigentliche Steuerung übernimmt. Er ist wie der Techniker, der die Anweisungen des Managers umsetzt.

  3. Gerät:

    • Das Gerät selbst ist die elektro-mechanische Hardware, die die eigentliche Arbeit verrichtet, z. B. Daten lesen oder schreiben. Es ist wie die Maschine, die die Befehle des Technikers ausführt.

Ohne diese drei Teile wäre ein Gerät wie ein Orchester ohne Dirigent, Techniker und Instrumente – es würde einfach nicht funktionieren!

Einfachste Erklärung:

Ein Gerät besteht aus drei Teilen:

  1. Gerätetreiber:

    • Geräteabhängige Software im Betriebssystemkern.

    • Aufgaben: Initialisierung, Auftragsverwaltung, Datenübergabe.

  2. Controller:

    • Elektronische Hardware mit einem Steuerchip.

  3. Gerät:

    • Elektro-mechanische Hardware, die die Arbeit ausführt.





8 Steuerung von Ein-/Ausgabegeräten


Wie kommuniziert der Prozessor mit einem Gerät?


Ein Controller ist wie ein Vermittler zwischen dem Betriebssystem und dem Gerät. Um die Kommunikation zu ermöglichen, hat er meistens einen Puffer und vier Register:

  1. Data-out-Register:

    • Hier werden Daten vom Treiber an den Controller gesendet. Es ist wie ein Briefkasten, in den das Betriebssystem seine Anweisungen wirft.

  2. Data-in-Register:

    • Hier werden Daten vom Controller an den Treiber zurückgesendet. Es ist wie ein Antwortbrief, den der Controller an das Betriebssystem schickt.

  3. Status-Register:

    • Dieses Register enthält den aktuellen Status des Controllers. Es ist wie ein Statusbericht, der dem Treiber sagt, ob alles in Ordnung ist oder ob es Probleme gibt.

  4. Control-Register:

    • Hier werden Befehle vom Treiber an den Controller gesendet. Es ist wie ein Steuerpult, mit dem das Betriebssystem den Controller steuert.

Puffer:

  • Der Puffer ist wie eine Zwischenstation für Daten. Bevor Daten (z. B. ein Block auf der Festplatte) in den Hauptspeicher übertragen werden, landen sie zuerst im Puffer. Dort werden sie auf Fehler überprüft. Nur fehlerfreie Daten werden in den Hauptspeicher geschrieben. Es ist, als ob ein Paket erst auf Schäden überprüft wird, bevor es zugestellt wird.

Einfachste Erklärung:

Ein Controller hat:

  1. Data-out-Register: Daten vom Treiber an den Controller.

  2. Data-in-Register: Daten vom Controller an den Treiber.

  3. Status-Register: Status des Controllers für den Treiber.

  4. Control-Register: Befehle vom Treiber an den Controller.

Puffer:

  • Daten werden im Puffer zwischengespeichert und auf Fehler überprüft, bevor sie in den Hauptspeicher geschrieben werden.


8 Steuerung von Ein-/Ausgabegeräten


Wie wird die Kommunikation zwischen CPU und Controller realisiert

Die CPU spricht direkt mit dem Controller über den I/O-Adressbus. Jedes Register im Controller hat eine spezielle Adresse – die sogenannte Portnummer.

  • Lesen (IN REG, PORT): Die CPU fordert Daten vom Controller an, indem sie eine bestimmte Portnummer angibt. Die Daten aus dem Controller-Register werden dann in ein CPU-Register übertragen.

  • Schreiben (OUT PORT, REG): Die CPU sendet Daten an den Controller, indem sie den Wert eines CPU-Registers an eine bestimmte Portnummer übermittelt.

So steuert die CPU den Datenfluss und kommuniziert mit externen Geräten!

Einfache Erklärung:

Die CPU und der Controller tauschen Daten über den I/O-Adressbus aus.

  • Mit "IN REG, PORT" holt sich die CPU Daten vom Controller.

  • Mit "OUT PORT, REG" sendet die CPU Daten an den Controller.

Dabei gibt die Portnummer an, wohin die Daten gehen oder wo sie herkommen.



Bei der speicherabbildeten Ein-/Ausgabe (Memory-Mapped I/O) werden bestimmte Speicherbereiche im Hauptspeicher für Ein- und Ausgabegeräte reserviert.

  • Ab einer bestimmten Speicheradresse (z. B. x + 1) sind keine normalen Daten, sondern die Register der Controller eingeblendet.

  • Die CPU kann mit diesen Geräten genauso arbeiten wie mit normalem Speicher – indem sie einfach an diese speziellen Adressen schreibt oder von ihnen liest.

Dadurch verschmelzen Arbeitsspeicher und I/O-Zugriffe zu einem einheitlichen Adressraum!

Einfache Erklärung:

Bestimmte Bereiche des Arbeitsspeichers sind für Ein- und Ausgabegeräte reserviert.

  • Die Register der Controller befinden sich an festen Speicheradressen.

  • Die CPU kann diese Geräte steuern, indem sie Daten an diese Adressen schreibt oder von dort liest.


Author

Drive1

Informationen

Zuletzt geändert