Teil 6 - Multitasking — Änderungen 4976 → 5849

Zeile 120: Zeile 120:
  
 
Jetzt müssen wir den Scheduler nur noch zum Einsatz bringen. Dieser Teil ist das, was das eigentliche Multitasking macht. Der passende Code dazu ist so kurz wie die Idee einfach ist: Anstatt bei einem Interrupt den gerade eben gesicherten Prozessorzustand wiederherzustellen, stellen wir einfach den Zustand eines anderen Tasks wieder her. Dazu wird handle_interrupt so geändert, dass es <i>cpu</i> wieder zurückgibt. Im Fall des Timerinterrupts ändern wir cpu allerdings auf den Zustand des neuen Tasks:
 
Jetzt müssen wir den Scheduler nur noch zum Einsatz bringen. Dieser Teil ist das, was das eigentliche Multitasking macht. Der passende Code dazu ist so kurz wie die Idee einfach ist: Anstatt bei einem Interrupt den gerade eben gesicherten Prozessorzustand wiederherzustellen, stellen wir einfach den Zustand eines anderen Tasks wieder her. Dazu wird handle_interrupt so geändert, dass es <i>cpu</i> wieder zurückgibt. Im Fall des Timerinterrupts ändern wir cpu allerdings auf den Zustand des neuen Tasks:
−
<c>if (cpu->intr == 0x20) {
+
<c>struct cpu_state* handle_interrupt(struct cpu_state* cpu)
−
    cpu = schedule(cpu);
+
{
 +
    ...
 +
 
 +
    if (cpu->intr == 0x20) {
 +
        cpu = schedule(cpu);
 +
    }
 +
 
 +
    ....
 +
 
 +
    return cpu;
 
}</c>
 
}</c>