Procedura scheduler zajmuje się wyszukaniem nowego zadania i zmianą obecnego zadania na nowe.
void scheduler() { struct task *new = select_runnable_task(run_queue); current->state = RUNNABLE; new->state = RUNNING; current = new; switch_to(new); }
Te operacje powinny być wykonywane bezpiecznie (niepodzielnie).