Operating System: Chapter 6: CPU Scheduling
Operating System: Chapter 6: CPU Scheduling
Operating System: Chapter 6: CPU Scheduling
• Dispatch latency – time it takes for the dispatcher to stop one process and
start another running
Scheduling Criteria
• CPU utilization – keep the CPU as busy as possible
• Waiting time – amount of time a process has been waiting in the ready queue
• Response time – amount of time it takes from when a request was submitted until the
first response is produced, not output (for time-sharing environment)
Scheduling Algorithm Optimization Criteria
• Max CPU utilization
• Max throughput
• Min turnaround time
• Min waiting time
• Min response time
First-Come, First-Served (FCFS) Scheduling
Process Burst Time
P1 24
P2 3
P3 3
• Suppose that the processes arrive in the order: P1 , P2 , P3
The Gantt Chart for the schedule is:
P1 P2 P3
0 24 27 30
0 3 6 30
• SJF is optimal – gives minimum average waiting time for a given set of
processes
– The difficulty is knowing the length of the next CPU request
– Could ask the user
Example of SJF
Process Arrival Time Burst Time
P1 0.0 6
P2 2.0 8
P3 4.0 7
P4 5.0 3
0 3 9 16 24
• Commonly, α set to ½
• Preemptive version called shortest-remaining-time-first
Prediction of the Length
of the Next CPU Burst
Priority Scheduling
• A priority number (integer) is associated with each process
• The CPU is allocated to the process with the highest priority (smallest
integer highest priority)
– Preemptive
– Nonpreemptive
• SJF is priority scheduling where priority is the inverse of predicted next
CPU burst time
• Problem Starvation – low priority processes may never execute
• Solution Aging – as time progresses increase the priority of the process
Round Robin (RR)
• Each process gets a small unit of CPU time (time quantum q), usually 10-
100 milliseconds. After this time has elapsed, the process is preempted
and added to the end of the ready queue.
• If there are n processes in the ready queue and the time quantum is q, then
each process gets 1/n of the CPU time in chunks of at most q time units at
once. No process waits more than (n-1)q time units.
• Timer interrupts every quantum to schedule next process
• Performance
– q large FIFO
– q small q must be large with respect to context switch, otherwise overhead is
too high
Time Quantum and Context Switch Time
Turnaround Time Varies With
The Time Quantum
80% of CPU
bursts should be
shorter than q
Multilevel Queue
• Ready queue is partitioned into separate queues, eg:
– foreground (interactive)
– background (batch)
• Process permanently in a given queue
• Each queue has its own scheduling algorithm:
– foreground – RR
– background – FCFS
• Scheduling must be done between the queues:
– Fixed priority scheduling; (i.e., serve all from foreground then from background). Possibility of
starvation.
– Time slice – each queue gets a certain amount of CPU time which it can schedule amongst its
processes; i.e., 80% to foreground in RR
– 20% to background in FCFS
Multilevel Queue Scheduling
Multilevel Feedback Queue
• A process can move between the various queues; aging can be
implemented this way
• Scheduling
– A new job enters queue Q0 which is served FCFS
• When it gains CPU, job receives 8 milliseconds
• If it does not finish in 8 milliseconds, job is moved to queue Q1
– At Q1 job is again served FCFS and receives 16 additional milliseconds
• If it still does not complete, it is preempted and moved to queue Q2
Thread Scheduling
• Distinction between user-level and kernel-level threads
• When threads supported, threads scheduled, not processes
• Many-to-one and many-to-many models, thread library schedules user-
level threads to run on LWP
– Known as process-contention scope (PCS) since scheduling competition is within
the process
– Typically done via priority set by programmer
• Kernel thread scheduled onto available CPU is system-contention scope
(SCS) – competition among all threads in system
Multiple-Processor Scheduling
• CPU scheduling more complex when multiple CPUs are available
• Homogeneous processors within a multiprocessor
• Asymmetric multiprocessing – only one processor accesses the system
data structures, alleviating the need for data sharing
• Symmetric multiprocessing (SMP) – each processor is self-scheduling, all
processes in common ready queue, or each has its own private queue of
ready processes
– Currently, most common
• Processor affinity – process has affinity for processor on which it is
currently running
– soft affinity
– hard affinity
– Variations including processor sets
NUMA and CPU Scheduling
“the earlier the deadline, the higher the priority; the later the
deadline, the lower the priority”
Proportional Share Scheduling
• T shares are allocated among all processes in the system
• An application receives N shares where N < T
• This ensures each application will receive N / T of the total processor time
POSIX Real-Time Scheduling
• The POSIX.1b standard
• API provides functions for managing real-time threads
• Defines two scheduling classes for real-time threads:
1. SCHED_FIFO - threads are scheduled using a FCFS strategy with a FIFO
queue. There is no time-slicing for threads of equal priority
2. SCHED_RR - similar to SCHED_FIFO except time-slicing occurs for threads of
equal priority
POSIX Real-Time Scheduling (Cont.)
• Defines two functions for getting and setting scheduling policy:
1. pthread attr getsched policy(pthread attr t *attr, int *policy)
2. pthread attr setsched policy(pthread attr t *attr, int policy)
Operating System Examples
• Linux scheduling
• Windows scheduling
• Solaris scheduling
Linux Scheduling Through Version 2.5
• Prior to kernel version 2.5, ran variation of standard UNIX scheduling
algorithm
• Version 2.5 moved to constant order O(1) scheduling time
– Preemptive, priority based
– Two priority ranges: time-sharing and real-time
– Real-time range from 0 to 99 and nice value from 100 to 140
– Map into global priority with numerically lower values indicating higher priority
– Higher priority gets larger q
– Task run-able as long as time left in time slice (active)
– If no time left (expired), not run-able until all other tasks use their slices
– All run-able tasks tracked in per-CPU runqueue data structure
• Two priority arrays (active, expired)
• Tasks indexed by priority
• When no more active, arrays are exchanged
– Worked well, but poor response times for interactive processes
Linux Scheduling in Version 2.6.23 +
• Completely Fair Scheduler (CFS)
• Scheduling classes
– Each has specific priority
– Scheduler picks highest priority task in highest scheduling class
– Rather than quantum based on fixed time allotments, based on proportion of CPU
time
– 2 scheduling classes included, others can be added
1. default
2. real-time
Linux Scheduling in Version 2.6.23 + (Cont.)
• Quantum calculated based on nice value from -20 to +19
– Lower value is higher priority
– Calculates target latency – interval of time during which task should run at least
once
– Target latency can increase if say number of active tasks increases
• CFS scheduler maintains per task virtual run time in variable vruntime
– Associated with decay factor based on priority of task – lower priority is higher
decay rate
– Normal default priority yields virtual run time = actual run time
• To decide next task to run, scheduler picks task with lowest virtual run time
CFS Performance
Linux Scheduling (Cont.)
• Real-time scheduling according to POSIX.1b
– Real-time tasks have static priorities
• Real-time plus normal map into global priority scheme
• Nice value of -20 maps to global priority 100
• Nice value of +19 maps to priority 139
Windows Scheduling
• Windows uses priority-based preemptive scheduling
• Highest-priority thread runs next
• Dispatcher is scheduler
• Thread runs until (1) blocks, (2) uses time slice, (3) preempted by higher-priority
thread
• Real-time threads can preempt non-real-time
• 32-level priority scheme
• Variable class is 1-15, real-time class is 16-31
• Priority 0 is memory-management thread
• Queue for each priority
• If no run-able thread, runs idle thread
Windows Priority Classes
• Win32 API identifies several priority classes to which a process can belong
– REALTIME_PRIORITY_CLASS, HIGH_PRIORITY_CLASS,
ABOVE_NORMAL_PRIORITY_CLASS,NORMAL_PRIORITY_CLASS,
BELOW_NORMAL_PRIORITY_CLASS, IDLE_PRIORITY_CLASS
– All are variable except REALTIME
• A thread within a given priority class has a relative priority
– TIME_CRITICAL, HIGHEST, ABOVE_NORMAL, NORMAL, BELOW_NORMAL,
LOWEST, IDLE
Windows Priority Classes (Cont.)
• Priority class and relative priority combine to give numeric priority
• Base priority is NORMAL within the class
• If quantum expires, priority lowered, but never below base
• If wait occurs, priority boosted depending on what was waited for
• Foreground window given 3x priority boost
• Windows 7 added user-mode scheduling (UMS)
– Applications create and manage threads independent of kernel
– For large number of threads, much more efficient
– UMS schedulers come from programming language libraries like C++
Concurrent Runtime (ConcRT) framework
Windows Priorities
Solaris
• Priority-based scheduling
• Six classes available
– Time sharing (default) (TS)
– Interactive (IA)
– Real time (RT)
– System (SYS)
– Fair Share (FSS)
– Fixed priority (FP)
• Given thread can be in one class at a time
• Each class has its own scheduling algorithm
• Time sharing is multi-level feedback queue
– Loadable table configurable by sysadmin
Solaris Dispatch Table
Solaris Scheduling
Solaris Scheduling (Cont.)
• Scheduler converts class-specific priorities into a per-thread global priority
– Thread with highest priority runs next
– Runs until (1) blocks, (2) uses time slice, (3) preempted by higher-priority thread
– Multiple threads at same priority selected via RR
Algorithm Evaluation
• How to select CPU-scheduling algorithm for an OS?
• Determine criteria, then evaluate algorithms
• Deterministic modeling
– Type of analytic evaluation
– Takes a particular predetermined workload and defines the performance of each
algorithm for that workload
– RR is 23ms:
Queueing Models
• Describes the arrival of processes, and CPU and I/O bursts probabilistically
– Commonly exponential, and described by mean
– Computes average throughput, utilization, waiting time, etc