Scheduling in Linux  Sanjay Kumar  Sanjay Kumar Ram  Marcello Missiroli
I Processi in Linux Tre classi di  processi Interattivi Batch  Real-time I processi in Linux hanno gli stati seguenti: Running  Waiting Stopped Zombie
Politica di scheduling Il kernel Linux è  non-preemptive  but i processi, invece, sono  preemptive   Le regole utilizzate per determinare quano e come selezionare un nuovo processo si dice  politica di scheduling .  Lo scheduling Linux è basato sul  time-sharing:   molti processi possono essere eseguiti in “concorrenza”, anche su una sola CPU. Il tempo della CPU time è diviso in  "fette“ Lo scheduling è anche basato sulla priorità Priorità statica  –  assegnata dagli utenti ai processi real-time, e MAI modificata Priorità dinamica  –  assegnata con una priorità base e modificata in base alle circostanze.
Politica di scheduling Prelazione Quando un processo passa da waiting a Running e la priorità dinamica del processo in esecuzione è inferiore al processo che è appena entrato Quando un processo in fase di running esaurisce il quanto a sua disposizione Quanto è lungo un quantum? Se troppo corto -> aumenta l'overhead per l'eccessivo context switch Se troppo lungo ->  degrada la risposta (o la percezione della risposta) del sistema Valore standard: Q=200ms
Algoritmo 2.4 nel caso monoprocessore L'algoritimo divide il tempo della CPU in  epoche In ogni epoca, ogni processo ha uno specifico quantum L'epoca finisce quando tutti i processi nella coda si esecuzione hanno esaurito il quantum Ogni processo ha un  quantum di base Il valore del quantum base è 20 meno la priorità (valore base: 0). Gli utenti possono variare la priorità usando varie funzioni, come  nice( ).  Root può anche fissare valori negativi. Ogni processo mantiene  metà  del tempo di quantum che possiede (es: se in Waiting).  Riassumendo: Quantum della nuova epoca=(quantum corrente/2)+(quantum base)-(nice)
Esempio (semplificato) Supponiamo ci siano due processi: A (word processor, interattivo) e B(compilatore) A ha maggiore priorità, ma  ha lunghe pause (per esempio tra un tasto e l'altro).  Quando si preme un tasto, l'interrupt “risveglia” il processo e lo porta allo stato di running.  Dato che A ha priorità maggiore di B, lo scheduler preempta il compilatore (context switch).  Il tasto è visualizzato sullo schermo, poi A si autosospende .
Algoritmo Ad intervalli regolari un timer ('tick') decrementa il quantum di tempo del processo in esecuzione Quando raggiunge 0, si sceglie un nuovo processo, scegliendo quello più adatto (funzione  goodness() ) Se ci sono più processi con la stessa priorità si sceglie quello più in altro (stile FIFO), Se non ci sono più processi, finisce l'epoca. Se un processo si forka, il numero di 'tick' è diviso tra padre e figlio Tutto questo si trova nel file  sched.c
Problemi dell'algoritmo Ha una performance che si deteriora in funzione del numero dei processi (complessità O(n)). Non tiene conto delle caratteristiche dei multiprocessori, tenendo una coda unica di processi pronti per l'intero sistema
Nuovo algorimo (2.6) Obiettivi che si pone:  Implementare uno scheduling O(1) scheduling.   Le  operazioni dell'algoritmo si svolgono in tempo costante.  Implementare scalabilità SMP .  Ogni processore ha la propria coda di esecuzione .  Implementare affinità SMP.  Acerca di raggruppare i processi per ogni CPU e tenta di eseguirli sempre sullo stesso processore. I processi sono migrati solo per bilanciamento
Nuovo algoritmo (2.6, cont.) Buona performance interattiva ,   Il sistema dovrebbe reagire immediatamente anche sotto elevato carico.  Equità ,  (evitare starvation).
Nuovo algoritmo (2.6, cont.) Gli array di priorità Ogni coda di esecuzione (runqueue, una per processore) contienea due  array di priorità : l'array dei  processi attivi  e quella dei  processi esauriti Ogni array contiene una coda per ogni livello di priorità.
L'algoritmo O(1) Il sistema mantiene una mappa di 140 bit che indicano se c'è un processo in esecuzione con tale priorità E' quindi facile trovare la coda che contiene il processo a priorità più alta. Basta infatti trovare il primo bit settato a partire dall'alto.  Si seleziona quindi il primo processo della coda. .
Ricalcolo del quantum Quando un processo termina il proprio quantum, viene spostato dall'array dei processi attivi a quelli dei processi esauriti. Durante questa operazione viene anche ricalcolato il quantum.  Quando non ci sono più processi nell'array dei processi attivi, le due array cambiano di ruolo. Essendo puntatori, lo scambio è rapidissimo.
Scheduling algorithm for multiprocessor (contd.) Bilanciatore di carico
Esercizio 1 In un sistema sono attivi i processi A, B, C. A ha priorità 0, B ha nice 5, mentre C ha nice 11.  A è attualmente in esecuzione, ma dopo 7 'tick' passerà in Waiting per 12 'tick'. Mostrare l'evoluzione del sistema per i primi 32 tick, evidenziando cambi di contesto ed epoche (se vi sono)
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 A A19 A18 A17 A16 A15 A14 A13 - - - - - - - - - - - A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 a0 B b15 b15 b15 b20 b20 b20 b20 B19 B18 B17 B16 B15 B14 B13 B12 B10 B9 B8 e8 e8 e8 e8 e8 e8 e8 e8 e8 e8 e8 e8 e8 e8 C c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 C9
Esercizio 2 In un sistema si hanno i seguenti processi: A (priorità 0, attualmente 12 tick, dopo 8 tick va in Waiting per 6 tick) B (priorità 1, attualmente 0 tick). Dopo 2 tick il processo C, che ha priorità real time, si attiva, resta per 4 tick. . Mostrare l'evoluzione del sistema per i primi 30 tick, evidenziando cambi di contesto ed epoche (se vi sono)
Riferimenti http://iamexwiwww.unibe.ch/studenten/schlpbch/linuxScheduling/LinuxScheduling.html http://oopweb.com/OS/Documents/tlk/VolumeFrames.html http://www.samspublishing.com/articles/article.asp?p=101760&rl=1 http://www.oreilly.com/catalog/linuxkernel/chapter/ch10.html G. M. Candea and M. B. Jones, “  Vassal: Loadable Scheduler Support for Multi-Policy Scheduling,” Proceedings of the 2nd USENIX Windows NT Symposium Seattle, Washington, August 3–4, 1998
Licenza La versione originale di questa presentazione è in ingliese, sul sito  http://www.cse.iitb.ac.in/~cs431/student_slides/Scheduling%20in%20Linux%20and%20Windows%202000.ppt Non mi è stato possibile trovare riferimenti circa l'autore o le sue licenze, per cui, per quanto concerne le mie modifiche, questo lavoro è soggetto alla licenza Creative Commons,  http://creativecommons.org/licenses/by-sa/2.5/  salvo diverse indicazioni

Scheduling In Linux

  • 1.
    Scheduling in Linux Sanjay Kumar Sanjay Kumar Ram Marcello Missiroli
  • 2.
    I Processi inLinux Tre classi di processi Interattivi Batch Real-time I processi in Linux hanno gli stati seguenti: Running Waiting Stopped Zombie
  • 3.
    Politica di schedulingIl kernel Linux è non-preemptive but i processi, invece, sono preemptive Le regole utilizzate per determinare quano e come selezionare un nuovo processo si dice politica di scheduling . Lo scheduling Linux è basato sul time-sharing: molti processi possono essere eseguiti in “concorrenza”, anche su una sola CPU. Il tempo della CPU time è diviso in "fette“ Lo scheduling è anche basato sulla priorità Priorità statica – assegnata dagli utenti ai processi real-time, e MAI modificata Priorità dinamica – assegnata con una priorità base e modificata in base alle circostanze.
  • 4.
    Politica di schedulingPrelazione Quando un processo passa da waiting a Running e la priorità dinamica del processo in esecuzione è inferiore al processo che è appena entrato Quando un processo in fase di running esaurisce il quanto a sua disposizione Quanto è lungo un quantum? Se troppo corto -> aumenta l'overhead per l'eccessivo context switch Se troppo lungo -> degrada la risposta (o la percezione della risposta) del sistema Valore standard: Q=200ms
  • 5.
    Algoritmo 2.4 nelcaso monoprocessore L'algoritimo divide il tempo della CPU in epoche In ogni epoca, ogni processo ha uno specifico quantum L'epoca finisce quando tutti i processi nella coda si esecuzione hanno esaurito il quantum Ogni processo ha un quantum di base Il valore del quantum base è 20 meno la priorità (valore base: 0). Gli utenti possono variare la priorità usando varie funzioni, come nice( ). Root può anche fissare valori negativi. Ogni processo mantiene metà del tempo di quantum che possiede (es: se in Waiting). Riassumendo: Quantum della nuova epoca=(quantum corrente/2)+(quantum base)-(nice)
  • 6.
    Esempio (semplificato) Supponiamoci siano due processi: A (word processor, interattivo) e B(compilatore) A ha maggiore priorità, ma ha lunghe pause (per esempio tra un tasto e l'altro). Quando si preme un tasto, l'interrupt “risveglia” il processo e lo porta allo stato di running. Dato che A ha priorità maggiore di B, lo scheduler preempta il compilatore (context switch). Il tasto è visualizzato sullo schermo, poi A si autosospende .
  • 7.
    Algoritmo Ad intervalliregolari un timer ('tick') decrementa il quantum di tempo del processo in esecuzione Quando raggiunge 0, si sceglie un nuovo processo, scegliendo quello più adatto (funzione goodness() ) Se ci sono più processi con la stessa priorità si sceglie quello più in altro (stile FIFO), Se non ci sono più processi, finisce l'epoca. Se un processo si forka, il numero di 'tick' è diviso tra padre e figlio Tutto questo si trova nel file sched.c
  • 8.
    Problemi dell'algoritmo Hauna performance che si deteriora in funzione del numero dei processi (complessità O(n)). Non tiene conto delle caratteristiche dei multiprocessori, tenendo una coda unica di processi pronti per l'intero sistema
  • 9.
    Nuovo algorimo (2.6)Obiettivi che si pone: Implementare uno scheduling O(1) scheduling. Le operazioni dell'algoritmo si svolgono in tempo costante. Implementare scalabilità SMP . Ogni processore ha la propria coda di esecuzione . Implementare affinità SMP. Acerca di raggruppare i processi per ogni CPU e tenta di eseguirli sempre sullo stesso processore. I processi sono migrati solo per bilanciamento
  • 10.
    Nuovo algoritmo (2.6,cont.) Buona performance interattiva , Il sistema dovrebbe reagire immediatamente anche sotto elevato carico. Equità , (evitare starvation).
  • 11.
    Nuovo algoritmo (2.6,cont.) Gli array di priorità Ogni coda di esecuzione (runqueue, una per processore) contienea due array di priorità : l'array dei processi attivi e quella dei processi esauriti Ogni array contiene una coda per ogni livello di priorità.
  • 12.
    L'algoritmo O(1) Ilsistema mantiene una mappa di 140 bit che indicano se c'è un processo in esecuzione con tale priorità E' quindi facile trovare la coda che contiene il processo a priorità più alta. Basta infatti trovare il primo bit settato a partire dall'alto. Si seleziona quindi il primo processo della coda. .
  • 13.
    Ricalcolo del quantumQuando un processo termina il proprio quantum, viene spostato dall'array dei processi attivi a quelli dei processi esauriti. Durante questa operazione viene anche ricalcolato il quantum. Quando non ci sono più processi nell'array dei processi attivi, le due array cambiano di ruolo. Essendo puntatori, lo scambio è rapidissimo.
  • 14.
    Scheduling algorithm formultiprocessor (contd.) Bilanciatore di carico
  • 15.
    Esercizio 1 Inun sistema sono attivi i processi A, B, C. A ha priorità 0, B ha nice 5, mentre C ha nice 11. A è attualmente in esecuzione, ma dopo 7 'tick' passerà in Waiting per 12 'tick'. Mostrare l'evoluzione del sistema per i primi 32 tick, evidenziando cambi di contesto ed epoche (se vi sono)
  • 16.
    0 1 23 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 A A19 A18 A17 A16 A15 A14 A13 - - - - - - - - - - - A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 a0 B b15 b15 b15 b20 b20 b20 b20 B19 B18 B17 B16 B15 B14 B13 B12 B10 B9 B8 e8 e8 e8 e8 e8 e8 e8 e8 e8 e8 e8 e8 e8 e8 C c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 c9 C9
  • 17.
    Esercizio 2 Inun sistema si hanno i seguenti processi: A (priorità 0, attualmente 12 tick, dopo 8 tick va in Waiting per 6 tick) B (priorità 1, attualmente 0 tick). Dopo 2 tick il processo C, che ha priorità real time, si attiva, resta per 4 tick. . Mostrare l'evoluzione del sistema per i primi 30 tick, evidenziando cambi di contesto ed epoche (se vi sono)
  • 18.
    Riferimenti http://iamexwiwww.unibe.ch/studenten/schlpbch/linuxScheduling/LinuxScheduling.html http://oopweb.com/OS/Documents/tlk/VolumeFrames.htmlhttp://www.samspublishing.com/articles/article.asp?p=101760&rl=1 http://www.oreilly.com/catalog/linuxkernel/chapter/ch10.html G. M. Candea and M. B. Jones, “ Vassal: Loadable Scheduler Support for Multi-Policy Scheduling,” Proceedings of the 2nd USENIX Windows NT Symposium Seattle, Washington, August 3–4, 1998
  • 19.
    Licenza La versioneoriginale di questa presentazione è in ingliese, sul sito http://www.cse.iitb.ac.in/~cs431/student_slides/Scheduling%20in%20Linux%20and%20Windows%202000.ppt Non mi è stato possibile trovare riferimenti circa l'autore o le sue licenze, per cui, per quanto concerne le mie modifiche, questo lavoro è soggetto alla licenza Creative Commons, http://creativecommons.org/licenses/by-sa/2.5/ salvo diverse indicazioni