Teil 6 - Multitasking — Änderungen 4783 → 4976

Zeile 1: Zeile 1:
 +
{{Navigation
 +
|Zurück = [[Teil 5 - Interrupts]]
 +
|Vor = [[Teil 7 - Speicherverwaltung]]
 +
}}
 +
 
==Ziel==
 
==Ziel==
 
Wir wollen zwei Tasks erstellen, die wir durch unser Multitasking "gleichzeitig" laufen lassen. Um das ganze sichtbar zu machen, nehmen wir das klassische Multitasking-Beispiel her: Task 1 gibt in einer Endlosschleife A aus, Task 2 gibt B aus. Am Ende sollten abwechselnd As und Bs auf dem Bildschirm erscheinen.
 
Wir wollen zwei Tasks erstellen, die wir durch unser Multitasking "gleichzeitig" laufen lassen. Um das ganze sichtbar zu machen, nehmen wir das klassische Multitasking-Beispiel her: Task 1 gibt in einer Endlosschleife A aus, Task 2 gibt B aus. Am Ende sollten abwechselnd As und Bs auf dem Bildschirm erscheinen.
Zeile 195: Zeile 200:
 
Damit wäre auch der Userspace implementiert. Wer möchte, kann das gern durch ein <i>asm("cli; hlt");</i> in einem der Tasks ausprobieren. Bevor die Tasks nach Ring 3 verschoben worden sind, durften sie die Befehle ausführen und der Kernel kam zum Stillstand. Jetzt wird eine Exception ausgelöst (13 = #GP = General Protection Fault) und der Kernel gibt eine Fehlermeldung aus (bevor er sich ebenfalls in eine Endlosschleife begibt – normal würde er hier stattdessen einfach den Task beenden).
 
Damit wäre auch der Userspace implementiert. Wer möchte, kann das gern durch ein <i>asm("cli; hlt");</i> in einem der Tasks ausprobieren. Bevor die Tasks nach Ring 3 verschoben worden sind, durften sie die Befehle ausführen und der Kernel kam zum Stillstand. Jetzt wird eine Exception ausgelöst (13 = #GP = General Protection Fault) und der Kernel gibt eine Fehlermeldung aus (bevor er sich ebenfalls in eine Endlosschleife begibt – normal würde er hier stattdessen einfach den Task beenden).
  
−
==Navigation==
+
 
−
* Voriger Artikel: [[Teil 5 - Interrupts]]
+
{{Navigation
−
* Nächster Artikel: [[Teil 7 - Speicherverwaltung]]
+
|Zurück = [[Teil 5 - Interrupts]]
 +
|Vor = [[Teil 7 - Speicherverwaltung]]
 +
}}
  
 
[[Kategorie:OS-Dev für Einsteiger]]
 
[[Kategorie:OS-Dev für Einsteiger]]