scheduling-linux
scheduling-linux
Scheduling in Linux 1 / 20
Scheduling policy
Reference: ULK2e 11.1
Scheduling in Linux 2 / 20
Scheduling policy (contd.)
Scheduling in Linux 3 / 20
2.4 Scheduler
Scheduling in Linux 4 / 20
Priorities
Scheduling in Linux 5 / 20
Scheduling algorithm
Reference: ULK2e 11.2
Scheduling in Linux 6 / 20
Implementation
Scheduling in Linux 7 / 20
Scheduling algorithm
Process selection:
c = -1000;
list_for_each(tmp, &runqueue_head) {
p = list_entry(tmp, struct task_struct, run_list);
if (p->cpus_runnable & p->cpus_allowed & (1 << this_cpu)) {
int weight = goodness(p, this_cpu, prev->active_mm);
if (weight > c)
c = weight, next = p; // break ties using FCFS
}
}
Scheduling in Linux 8 / 20
goodness()
Case I:
p is a conventional process that has exhausted its quantum
(p->counter is zero)
weight = 0
Case II:
p is a conventional process that has not exhausted its quantum
Case III:
p is a real-time process
weight = p->counter + 1000 // weight >= 1000
Scheduling in Linux 9 / 20
Limitations
Reference: ULK2e 11.2.3
Scheduling in Linux 10 / 20
2.6 Scheduler
Scheduling in Linux 11 / 20
Ingredients
Scheduling in Linux 12 / 20
Priorities
Reference: ULK3e 7.2
Scheduling in Linux 13 / 20
Priorities
Scheduling in Linux 14 / 20
Active vs. expired processes
Scheduling in Linux 15 / 20
Data structures
Reference: ULK3e 7.3
Scheduling in Linux 16 / 20
scheduler_tick()
Scheduling in Linux 17 / 20
Real-time processes
Scheduling in Linux 18 / 20
Preemptible kernel 2.6
Scheduling in Linux 19 / 20
Scheduling classes
Scheduling in Linux 20 / 20