Schedulers University of New Mexico

https://commons.wikimedia.org/wiki/ File:Simplified_Structure_of_the_Linux_Kern el.svg 2 University of New Mexico

O(1) scheduler (older)

 Two arrays, switching between them is just changing a pointer  Uses heuristics to try to know which processes are interactive  Average sleep time

 https://en.wikipedia.org/wiki/O(1)_scheduler

3 University of New Mexico

CFS scheduler (currently in Linux)

 Completely Fair Scheduler  Red-black tree of execution to the nanosecond  niffies

 Like weighted fair queuing for packet networks  An ideal processor would share equally  maximum execution time = time the has been waiting to run / total number of processes

 https://en.wikipedia.org/wiki/Completely_Fair_Scheduler

4 University of New Mexico

BFS (now MuQQS)

 Brain “Hug” Scheduler  Specifically for desktops  Weighted round-robin where the weights are based on some very complex formulae (see Wikipedia for details)  No priority modification for sleep behavior  Time slice = 6ms (human perception of jitter ≈ 7ms)  Performs slightly better than CFS for <16 cores

 https://en.wikipedia.org/wiki/Brain_Fuck_Scheduler  https://lwn.net/Articles/720227/

5 University of New Mexico Windows NT through 10

● Multilevel Feedback Queue (MLFQ)

6 University of New Mexico Mac OS X

● XNU is a mix of FreeBSD and Mach – Network, files, processes, POSIX interface, etc. come from FreeBSD – CPU , , specialized IPC, etc. comes from Mach ● Round-robin and MLFQ schedulers

7 University of New Mexico IOS (i.e., iPhone)

● Same as Mac OS X – MLFQ and round-robin

8 University of New Mexico Android

● Same as Linux – Completely Fair Scheduler

9 University of New Mexico FreeBSD

● https://www.usenix.org/legacy/event/bsdco n03/tech/full_papers/roberson/roberson.pdf ● ULE scheduler ● Looks a lot like Linux’s old O(1) scheduler

10 University of New Mexico Others

● GNU Hurd uses GNU Mach’s scheduler – MLFQ and RR ● has a simple RR scheduler where the time slice is based on the priority ● Solaris uses MLFQ ● Minix and xv6 - ??? ● Real-time OSes - ??? ● Supercomputers - ???

11