| 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 | |
| − | + | |Zurück = [[Teil 5 - Interrupts]] | |
| + | |Vor = [[Teil 7 - Speicherverwaltung]] | ||
| + | }} | ||
[[Kategorie:OS-Dev für Einsteiger]] | [[Kategorie:OS-Dev für Einsteiger]] | ||