Two Level Scheduling
• Interactive systems commonly employ two-level scheduling Interactive Scheduling – CPU scheduler and Memory Scheduler • Memory scheduler was covered in VM – We will focus on CPU scheduling
1 2
Round Robin Scheduling Our Earlier Example
• Each process is given a timeslice to run in • 5 Process J1 • When the timeslice expires, the next – Process 1 arrives slightly before process J2 process preempts the current process, 2, etc… and runs for its timeslice, and so on J3 – All are immediately • Implemented with runnable J4 – Execution times – A ready queue indicated by scale on – A regular timer interrupt J5 x-axis
0246 8 10 12 1416 18 20
3 4
Round Robin Schedule Round Robin Schedule
J1 J1
Timeslice = 3 units J2 Timeslice = 1 unit J2 J3 J3
J4 J4
J5 J5
0246 8 10 12 1416 18 20 0246 8 10 12 1416 18 20
5 6
1 Round Robin Priorities •Pros – Fair, easy to implement • Each Process (or thread) is associated with a •Con priority – Assumes everybody is equal • Issue: What should the timeslice be? • Provides basic mechanism to influence a – Too short scheduler decision: • Waste a lot of time switching between processes – Scheduler will always chooses a thread of higher • Example: timeslice of 4ms with 1 ms context switch = 20% round robin overhead priority over lower priority – Too long • Priorities can be defined internally or externally • System is not responsive • Example: timeslice of 100ms – Internal: e.g. I/O bound or CPU bound – If 10 people hit “enter” key simultaneously, the last guy to run will only see progress after 1 second. – External: e.g. based on importance to the user • Degenerates into FCFS if timeslice longer than burst length
7 8
Example Example
• 5 Jobs J1 J1 – Job number equals priority J2 J2 – Priority 1 > priority 5 J3 – Release and execution J3 times as shown J4 • Priority-driven J4 preemptively J5 scheduled J5
0246 8 10 12 1416 18 20 0246 8 10 12 1416 18 20
9 10
Example Example
J1 J1
J2 J2
J3 J3
J4 J4
J5 J5
0246 8 10 12 1416 18 20 0246 8 10 12 1416 18 20
11 12
2 Example Example
J1 J1
J2 J2
J3 J3
J4 J4
J5 J5
0246 8 10 12 1416 18 20 0246 8 10 12 1416 18 20
13 14
Example Example
J1 J1
J2 J2
J3 J3
J4 J4
J5 J5
0246 8 10 12 1416 18 20 0246 8 10 12 1416 18 20
15 16
Example Example
J1 J1
J2 J2
J3 J3
J4 J4
J5 J5
0246 8 10 12 1416 18 20 0246 8 10 12 1416 18 20
17 18
3 Example Example
J1 J1
J2 J2
J3 J3
J4 J4
J5 J5
0246 8 10 12 1416 18 20 0246 8 10 12 1416 18 20
19 20
Example Example
J1 J1
J2 J2
J3 J3
J4 J4
J5 J5
0246 8 10 12 1416 18 20 0246 8 10 12 1416 18 20
21 22
Example Example
J1 J1
J2 J2
J3 J3
J4 J4
J5 J5
0246 8 10 12 1416 18 20 0246 8 10 12 1416 18 20
23 24
4 Example Example
J1 J1
J2 J2
J3 J3
J4 J4
J5 J5
0246 8 10 12 1416 18 20 0246 8 10 12 1416 18 20
25 26
Example Example
J1 J1
J2 J2
J3 J3
J4 J4
J5 J5
0246 8 10 12 1416 18 20 0246 8 10 12 1416 18 20
27 28
Example Example
J1 J1
J2 J2
J3 J3
J4 J4
J5 J5
0246 8 10 12 1416 18 20 0246 8 10 12 1416 18 20
29 30
5 Priorities Traditional UNIX Scheduler
• Two-level scheduler – High-level scheduler schedules processes between memory and disk – Low-level scheduler is CPU scheduler • Based on a multi- level queue structure • Usually implemented by multiple priority queues, with with round robin at round robin on each queue each level •Con – Low priorities can starve • Need to adapt priorities periodically – Based on ageing or execution history
31 32
Traditional UNIX Scheduler Traditional UNIX Scheduler
• The highest priority (lower • Priority = CPU_usage +nice +base number) is scheduled – CPU_usage = number of clock ticks • Decays over time to avoid • Priorities are re-calculated once permanently penalising the process per second, and re-inserted in – Nice is a value given to the process appropriate queue by a user to permanently boost or – Avoid starvation of low priority reduce its priority threads • Reduce priority of background jobs – Base is a set of hardwired, negative – Penalise CPU-bound threads values used to boost priority of I/O bound system activities • Swapper, disk I/O, Character I/O
33 34
Some Issues with Priorities Lottery Scheduling
• Require adaption over time to avoid starvation • Each process is issued with “lottery (not considering hard real-time which relies on tickets” which represent the right to strict priorities). • Adaption is: use/consume a resource – usually ad-hoc, – Example: CPU time • hence behaviour not thoroughly understood, and unpredictable • Access to a resource is via “drawing” a – Gradual, hence unresponsive lottery winner. • Difficult to guarantee a desired share of the CPU – The more tickets a process possesses, the • No way for applications to trade CPU time higher chance the process has of winning.
35 36
6 Lottery Scheduling Example Lottery Scheduling
• Advantages • Four process running concurrently – Simple to implement – Process A: 15% CPU – Highly responsive – Process B: 25% CPU • can reallocate tickets held for immediate effect – Process C: 5% CPU – Tickets can be traded to implement individual scheduling policy between co-operating – Process D: 55% CPU threads – Starvation free • How many tickets should be issued to • A process holding a ticket will eventually be scheduled. each?
37 38
Lottery Scheduling Performance
Observed performance of two processes with varying ratios of tickets
39 40
Fair-Share Scheduling
• So far we have treated processes as individuals • Assume two users – One user has 1 process – Second user has 9 processes • The second user gets 90% of the CPU • Some schedulers consider the owner of the process in determining which process to schedule – E.g., for the above example we could schedule the first user’s process 9 times more often than the second user’s processes • Many possibilities exist to determine a fair schedule – E.g. Appropriate allocation of tickets in lottery scheduler
41
7