next up previous contents
Nächste Seite: Interrupt-Behandlung Aufwärts: Allgemeine (common) Bibliothek Vorherige Seite: Speichermanagement   Inhalt

Scheduling

Die Semantik der Scheduling-Funktionen wurde dem entworfenen Schema angepaßt.

Abbildung: Aufbau der schedule() Funktion
void schedule(void)
{
    switch (current->state) {
    case TASK_RUNNING:
        /* release CPU on any way */
        l4_yield();
        break;

    case TASK_UNINTERRUPTIBLE:
    case TASK_INTERRUPTIBLE:
        /* lock yourself on current semaphore */
        l4_semaphore_down(&current->dde_sem);
        break;

    default:
        ...
    }
}

Die schedule() Funktion hat nun den in Abb. 4.1 dargestellten Aufbau. Ein korrespondierendes wake_up() ruft l4_semaphore_up(&process->dde_sem) auf einem Waitqueue-Element auf und der Prozeßkontext deblockiert.

Außer dieser Standard-Variante existiert noch eine schedule_timeout(to) Funktion, die nach maximal to Zeitschritten zurückkehrt. Die Implementierung basiert auf dem normalen Scheduling und einem Timer, der nach to ein modifiziertes wake_up() aufruft.



Christian Helmuth 2001-12-11