Download presentation
Presentation is loading. Please wait.
Published byMonica Fisher Modified over 9 years ago
1
Linux Scheduler © DJ Foreman 3/8/20091
2
Objectives Response time Throughput for batch No starvation Accommodate high AND low priority © DJ Foreman 3/8/2009 2
3
General Process Classifications Two schemes for classifying: –Traditional classes IO bound CPU bound –Alternative classes Interactive Batch Real-time –Video, robotics, sensor-based How to determine? © DJ Foreman 3/8/2009 3
4
Linux Scheduling Classes FIFOFIFO real-time process RRRound Robin real-time process Normalnon-real-time process © DJ Foreman 3/8/2009 4
5
Real-time Details © DJ Foreman 3/8/20095
6
Real-time Rules Priority 0(highest) - 99(lowest) –Program adjustable: sched_setparam() sched_setscheduler() FIFO - non-interruptible except –Higher priority –Blocked –Yields RR –Adds a time-slice to each thread –Suspends at end of slice © DJ Foreman 3/8/2009 6
7
Non-real-time Scheduling (Conventional processes) © DJ Foreman 3/8/20097
8
Rules Every process has a “static” priority –100(highest) – 139 (lowest) –Variable via nice() and setpriority() Base quantum (not a constant!) –If sp<120 20*(140-static priority) –If sp>=120 5*(140-static priority) Dynamic priority (also 100-139) –Max(100, min(sp-bonus+5,139)) –0<=bonus<=10 © DJ Foreman 3/8/2009 8
9
Rules (continued) Bonus –0-5 is a penalty –6-10 is a prize –Related to average sleep time OF THIS PROCESS (not of all Processes) Based on past history Some sample values: © DJ Foreman 3/8/2009 9 Average sleep timeBonus 0<=N<100ms0 300<=N<400ms3 600<=N<7006 900<=N<10009
10
Priority Arrays Two arrays: struct prio_array { intnr_active; unsigned long bitmap[BITMAP_SIZE]; structlist_headqueue[MAX_PRIO]; } With: 140 priority levels (max) wordsize=32 bits BITMAP_SIZE is 5 (last 20 bits ignored) © DJ Foreman 3/8/2009 10
11
The Bitmaps Active queues Time-slice-expired queues 1 bit/queue (140 queues) Based on the Intel “bsfl” instruction –Select least significant 1-bit © DJ Foreman 3/8/2009 11
12
Priority arrays – revisited Two arrays (active/expired): *listheads prio_array[2][140]; typedef struct listheads { // 2-way list of PDs @ this priority PD*next; PD*prev;} struct PD { PD *next; PD*prev; int PID; int prio; // etc } © DJ Foreman 3/8/2009 12
13
Scheduling Pick highest priority non-empty queue/list Tasks in queue/list scheduled © DJ Foreman 3/8/2009 13
14
References Lindsey, R., "What's New in the 2.6 Scheduler", Linux Journal, March 2004 Love, R., Linux Kernel Development, Indianapolis, IN, Sams Publishing, 2004 Understanding the Linux Kernel, Bovet & Cesati, O’Reilly Press, 2006 © DJ Foreman 3/8/2009 14
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.