Beruflich Dokumente
Kultur Dokumente
Descending to
Reality. . .
Philosophies
Processor
Scheduling
Processor Affinity
Basic Scheduling
Algorithm
The Run Queue
The Highest Priority
Process
Calculating
Timeslices
Typical Quanta
Dynamic Priority
Interactive Processes
Using Quanta
Avoiding Indefinite
Overtaking
The Priority Arrays
Swapping Arrays
Why Two Arrays?
The Traditional
Algorithm
Linux is More
Efficient
Locking Runqueues
Real-Time
Scheduling
Sleeping and Waking
Linux Scheduler
1 / 40
Descending to Reality. . .
Linux Scheduler
Descending to
Reality. . .
Philosophies
Processor
Scheduling
Processor Affinity
Basic Scheduling
Algorithm
The Run Queue
The Highest Priority
Process
Calculating
Timeslices
Typical Quanta
Dynamic Priority
Interactive Processes
Using Quanta
Avoiding Indefinite
Overtaking
The Priority Arrays
Swapping Arrays
Why Two Arrays?
The Traditional
Algorithm
Linux is More
Efficient
Locking Runqueues
Real-Time
Scheduling
Sleeping and Waking
2 / 40
Philosophies
Linux Scheduler
Descending to
Reality. . .
Philosophies
Processor
Scheduling
Processor Affinity
Basic Scheduling
Algorithm
The Run Queue
The Highest Priority
Process
Calculating
Timeslices
Typical Quanta
Dynamic Priority
Interactive Processes
Using Quanta
Avoiding Indefinite
Overtaking
The Priority Arrays
Swapping Arrays
Why Two Arrays?
The Traditional
Algorithm
Linux is More
Efficient
Locking Runqueues
Real-Time
Scheduling
Sleeping and Waking
3 / 40
Processor Scheduling
Linux Scheduler
Descending to
Reality. . .
Philosophies
Processor
Scheduling
Processor Affinity
Basic Scheduling
Algorithm
The Run Queue
The Highest Priority
Process
Calculating
Timeslices
Typical Quanta
Dynamic Priority
Interactive Processes
Using Quanta
Avoiding Indefinite
Overtaking
The Priority Arrays
Swapping Arrays
Why Two Arrays?
The Traditional
Algorithm
Linux is More
Efficient
Locking Runqueues
Real-Time
Scheduling
Sleeping and Waking
4 / 40
Processor Affinity
Linux Scheduler
Descending to
Reality. . .
Philosophies
Processor
Scheduling
Processor Affinity
Basic Scheduling
Algorithm
The Run Queue
The Highest Priority
Process
Calculating
Timeslices
Typical Quanta
Dynamic Priority
Interactive Processes
Using Quanta
Avoiding Indefinite
Overtaking
The Priority Arrays
Swapping Arrays
Why Two Arrays?
The Traditional
Algorithm
Linux is More
Efficient
Locking Runqueues
Real-Time
Scheduling
Sleeping and Waking
5 / 40
6 / 40
7 / 40
8 / 40
Calculating Timeslices
Linux Scheduler
Descending to
Reality. . .
Philosophies
Processor
Scheduling
Processor Affinity
Basic Scheduling
Algorithm
The Run Queue
The Highest Priority
Process
Calculating
Timeslices
Typical Quanta
Dynamic Priority
Interactive Processes
Using Quanta
Avoiding Indefinite
Overtaking
The Priority Arrays
Swapping Arrays
Why Two Arrays?
The Traditional
Algorithm
Linux is More
Efficient
Locking Runqueues
Real-Time
Scheduling
Sleeping and Waking
Calculate
Quantum =
9 / 40
Typical Quanta
Linux Scheduler
Descending to
Reality. . .
Philosophies
Processor
Scheduling
Processor Affinity
Basic Scheduling
Algorithm
The Run Queue
The Highest Priority
Process
Calculating
Timeslices
Typical Quanta
Dynamic Priority
Interactive Processes
Using Quanta
Avoiding Indefinite
Overtaking
The Priority Arrays
Swapping Arrays
Why Two Arrays?
The Traditional
Algorithm
Linux is More
Efficient
Locking Runqueues
Real-Time
Scheduling
Sleeping and Waking
Static
Pri Niceness Quantum
Highest Static Pri
100
20
800 ms
High Static Pri
110
-10
600 ms
Normal
120
0
100 ms
Low Static Pri
130
+10
50 ms
Lowest Static Pri
139
+20
5 ms
10 / 40
Dynamic Priority
Linux Scheduler
Descending to
Reality. . .
Philosophies
Processor
Scheduling
Processor Affinity
Basic Scheduling
Algorithm
The Run Queue
The Highest Priority
Process
Calculating
Timeslices
Typical Quanta
Dynamic Priority
Interactive Processes
Using Quanta
Avoiding Indefinite
Overtaking
The Priority Arrays
Swapping Arrays
Why Two Arrays?
The Traditional
Algorithm
Linux is More
Efficient
Locking Runqueues
Real-Time
Scheduling
Sleeping and Waking
Interactive Processes
Linux Scheduler
Descending to
Reality. . .
Philosophies
Processor
Scheduling
Processor Affinity
Basic Scheduling
Algorithm
The Run Queue
The Highest Priority
Process
Calculating
Timeslices
Typical Quanta
Dynamic Priority
Interactive Processes
Using Quanta
Avoiding Indefinite
Overtaking
The Priority Arrays
Swapping Arrays
Why Two Arrays?
The Traditional
Algorithm
Linux is More
Efficient
Locking Runqueues
Real-Time
Scheduling
Sleeping and Waking
A process is interactive if
bonus 5 S/4 28
12 / 40
Using Quanta
Linux Scheduler
Descending to
Reality. . .
Philosophies
Processor
Scheduling
Processor Affinity
Basic Scheduling
Algorithm
The Run Queue
The Highest Priority
Process
Calculating
Timeslices
Typical Quanta
Dynamic Priority
Interactive Processes
Using Quanta
Avoiding Indefinite
Overtaking
The Priority Arrays
Swapping Arrays
Why Two Arrays?
The Traditional
Algorithm
Linux is More
Efficient
Locking Runqueues
Real-Time
Scheduling
Sleeping and Waking
13 / 40
14 / 40
struct runqueue {
struct prioarray *active;
struct prioarray *expired;
struct prioarray arrays[2];
};
struct prioarray {
int
nr_active;
/* # Runnable */
unsigned long bitmap[5];
struct list_head queue[140];
};
15 / 40
Swapping Arrays
Linux Scheduler
Descending to
Reality. . .
Philosophies
Processor
Scheduling
Processor Affinity
Basic Scheduling
Algorithm
The Run Queue
The Highest Priority
Process
Calculating
Timeslices
Typical Quanta
Dynamic Priority
Interactive Processes
Using Quanta
Avoiding Indefinite
Overtaking
The Priority Arrays
Swapping Arrays
Why Two Arrays?
The Traditional
Algorithm
Linux is More
Efficient
Locking Runqueues
Real-Time
Scheduling
Sleeping and Waking
16 / 40
17 / 40
18 / 40
19 / 40
Locking Runqueues
Linux Scheduler
Descending to
Reality. . .
Philosophies
Processor
Scheduling
Processor Affinity
Basic Scheduling
Algorithm
The Run Queue
The Highest Priority
Process
Calculating
Timeslices
Typical Quanta
Dynamic Priority
Interactive Processes
Using Quanta
Avoiding Indefinite
Overtaking
The Priority Arrays
Swapping Arrays
Why Two Arrays?
The Traditional
Algorithm
Linux is More
Efficient
Locking Runqueues
Real-Time
Scheduling
Sleeping and Waking
20 / 40
Real-Time Scheduling
Linux Scheduler
Descending to
Reality. . .
Philosophies
Processor
Scheduling
Processor Affinity
Basic Scheduling
Algorithm
The Run Queue
The Highest Priority
Process
Calculating
Timeslices
Typical Quanta
Dynamic Priority
Interactive Processes
Using Quanta
Avoiding Indefinite
Overtaking
The Priority Arrays
Swapping Arrays
Why Two Arrays?
The Traditional
Algorithm
Linux is More
Efficient
Locking Runqueues
Real-Time
Scheduling
Sleeping and Waking
21 / 40
Linux Scheduler
Sleeping and Waking
Sleeping and Waking
Sleeping
Waking Up a
Process
Scheduler-Related
System Calls
Major Kernel
Functions
Fair Share
Scheduling
Timers
22 / 40
Timers
23 / 40
Sleeping
Linux Scheduler
Sleeping and Waking
Sleeping and Waking
Sleeping
Waking Up a
Process
Scheduler-Related
System Calls
Major Kernel
Functions
Fair Share
Scheduling
Timers
DECLARE_WAIT_QUEUE(wait, current);
/* Sleep on queue q */
add_wait_queue(q, &wait);
while (!condition) {
set_current_state(TASK_INTERRUPTIBLE);
if (signal_pending(current))
/* handle signal */
schedule();
}
set_current_state(TASK_RUNNING);
remove_wait_queue(q, &wait);
24 / 40
Waking Up a Process
Linux Scheduler
Sleeping and Waking
Sleeping and Waking
Sleeping
Waking Up a
Process
Scheduler-Related
System Calls
Major Kernel
Functions
Fair Share
Scheduling
Timers
25 / 40
26 / 40
scheduler tick()
27 / 40
Timers
28 / 40
Linux Scheduler
Sleeping and Waking
Timers
Why Does the
Kernel Need
Timers?
Two Basic Functions
Timer Types
Timer Ticks
Jiffies
Potent and Evil
Magic
Time of Day
Kernel Timers
Dynamic Timers
Delay Functions
System Calls
Timers
29 / 40
Animated applications
Screen-savers
Time of day for file timestamps
Quanta!
30 / 40
31 / 40
Timer Types
Linux Scheduler
32 / 40
Timer Ticks
Linux Scheduler
33 / 40
Jiffies
Linux Scheduler
34 / 40
35 / 40
Time of Day
Linux Scheduler
36 / 40
Kernel Timers
Linux Scheduler
37 / 40
Dynamic Timers
Linux Scheduler
38 / 40
Delay Functions
Linux Scheduler
39 / 40
System Calls
Linux Scheduler
40 / 40