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).