Scheduling in Linux  Sanjay Kumar  Sanjay Kumar Ram  Marcello Missiroli
I Processi in Linux <ul><li>Tre classi di  processi </li></ul><ul><ul><li>Interattivi </li></ul></ul><ul><ul><li>Batch  </...
Politica di scheduling <ul><li>Il kernel Linux è  non-preemptive  but i processi, invece, sono  preemptive   </li></ul><ul...
Politica di scheduling <ul><li>Prelazione </li></ul><ul><ul><li>Quando un processo passa da waiting a Running e la priorit...
Algoritmo 2.4 nel caso monoprocessore <ul><li>L'algoritimo divide il tempo della CPU in  epoche </li></ul><ul><ul><li>In o...
Esempio (semplificato) <ul><li>Supponiamo ci siano due processi: A (word processor, interattivo) e B(compilatore) </li></u...
Algoritmo <ul><li>Ad intervalli regolari un timer ('tick') decrementa il quantum di tempo del processo in esecuzione </li>...
Problemi dell'algoritmo <ul><li>Ha una performance che si deteriora in funzione del numero dei processi (complessità O(n))...
Nuovo algorimo (2.6) <ul><li>Obiettivi che si pone:  </li></ul><ul><ul><li>Implementare uno scheduling O(1) scheduling.   ...
Nuovo algoritmo (2.6, cont.) <ul><ul><li>Buona performance interattiva ,   Il sistema dovrebbe reagire immediatamente anch...
Nuovo algoritmo (2.6, cont.) <ul><li>Gli array di priorità </li></ul><ul><ul><li>Ogni coda di esecuzione (runqueue, una pe...
L'algoritmo O(1) <ul><ul><li>Il sistema mantiene una mappa di 140 bit che indicano se c'è un processo in esecuzione con ta...
Ricalcolo del quantum <ul><li>Quando un processo termina il proprio quantum, viene spostato dall'array dei processi attivi...
Scheduling algorithm for multiprocessor (contd.) <ul><li>Bilanciatore di carico </li></ul>
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 è attualme...
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 - - - ...
Esercizio 2 In un sistema si hanno i seguenti processi: A (priorità 0, attualmente 12 tick, dopo 8 tick va in Waiting per ...
Riferimenti <ul><li>http://iamexwiwww.unibe.ch/studenten/schlpbch/linuxScheduling/LinuxScheduling.html </li></ul><ul><li>h...
Licenza <ul><li>La versione originale di questa presentazione è in ingliese, sul sito  http://www.cse.iitb.ac.in/~cs431/st...
Upcoming SlideShare
Loading in...5
×

Scheduling In Linux

2,763

Published on

Questa presentazione prova a spiegare due algoritmi di scheduling presenti in Linux (2.4 e le prime versioni del 2.6). Contiene anche esercizi.

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,763
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
51
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Scheduling In Linux

  1. 1. Scheduling in Linux Sanjay Kumar Sanjay Kumar Ram Marcello Missiroli
  2. 2. I Processi in Linux <ul><li>Tre classi di processi </li></ul><ul><ul><li>Interattivi </li></ul></ul><ul><ul><li>Batch </li></ul></ul><ul><ul><li>Real-time </li></ul></ul><ul><li>I processi in Linux hanno gli stati seguenti: </li></ul><ul><ul><li>Running </li></ul></ul><ul><ul><li>Waiting </li></ul></ul><ul><ul><li>Stopped </li></ul></ul><ul><ul><li>Zombie </li></ul></ul>
  3. 3. Politica di scheduling <ul><li>Il kernel Linux è non-preemptive but i processi, invece, sono preemptive </li></ul><ul><li>Le regole utilizzate per determinare quano e come selezionare un nuovo processo si dice politica di scheduling . </li></ul><ul><li>Lo scheduling Linux è basato sul time-sharing: molti processi possono essere eseguiti in “concorrenza”, anche su una sola CPU. </li></ul><ul><li>Il tempo della CPU time è diviso in &quot;fette“ </li></ul><ul><li>Lo scheduling è anche basato sulla priorità </li></ul><ul><ul><li>Priorità statica – assegnata dagli utenti ai processi real-time, e MAI modificata </li></ul></ul><ul><ul><li>Priorità dinamica – assegnata con una priorità base e modificata in base alle circostanze. </li></ul></ul>
  4. 4. Politica di scheduling <ul><li>Prelazione </li></ul><ul><ul><li>Quando un processo passa da waiting a Running e la priorità dinamica del processo in esecuzione è inferiore al processo che è appena entrato </li></ul></ul><ul><ul><li>Quando un processo in fase di running esaurisce il quanto a sua disposizione </li></ul></ul><ul><li>Quanto è lungo un quantum? </li></ul><ul><ul><li>Se troppo corto -> aumenta l'overhead per l'eccessivo context switch </li></ul></ul><ul><ul><li>Se troppo lungo -> degrada la risposta (o la percezione della risposta) del sistema </li></ul></ul><ul><li>Valore standard: Q=200ms </li></ul>
  5. 5. Algoritmo 2.4 nel caso monoprocessore <ul><li>L'algoritimo divide il tempo della CPU in epoche </li></ul><ul><ul><li>In ogni epoca, ogni processo ha uno specifico quantum </li></ul></ul><ul><ul><li>L'epoca finisce quando tutti i processi nella coda si esecuzione hanno esaurito il quantum </li></ul></ul><ul><li>Ogni processo ha un quantum di base </li></ul><ul><ul><li>Il valore del quantum base è 20 meno la priorità (valore base: 0). </li></ul></ul><ul><ul><li>Gli utenti possono variare la priorità usando varie funzioni, come nice( ). Root può anche fissare valori negativi. </li></ul></ul><ul><li>Ogni processo mantiene metà del tempo di quantum che possiede (es: se in Waiting). Riassumendo: </li></ul><ul><li>Quantum della nuova epoca=(quantum corrente/2)+(quantum base)-(nice) </li></ul>
  6. 6. Esempio (semplificato) <ul><li>Supponiamo ci siano due processi: A (word processor, interattivo) e B(compilatore) </li></ul><ul><li>A ha maggiore priorità, ma ha lunghe pause (per esempio tra un tasto e l'altro). </li></ul><ul><li>Quando si preme un tasto, l'interrupt “risveglia” il processo e lo porta allo stato di running. </li></ul><ul><li>Dato che A ha priorità maggiore di B, lo scheduler preempta il compilatore (context switch). </li></ul><ul><li>Il tasto è visualizzato sullo schermo, poi A si autosospende . </li></ul>
  7. 7. Algoritmo <ul><li>Ad intervalli regolari un timer ('tick') decrementa il quantum di tempo del processo in esecuzione </li></ul><ul><li>Quando raggiunge 0, si sceglie un nuovo processo, scegliendo quello più adatto (funzione goodness() ) </li></ul><ul><li>Se ci sono più processi con la stessa priorità si sceglie quello più in altro (stile FIFO), </li></ul><ul><li>Se non ci sono più processi, finisce l'epoca. </li></ul><ul><li>Se un processo si forka, il numero di 'tick' è diviso tra padre e figlio </li></ul><ul><li>Tutto questo si trova nel file sched.c </li></ul>
  8. 8. Problemi dell'algoritmo <ul><li>Ha una performance che si deteriora in funzione del numero dei processi (complessità O(n)). </li></ul><ul><li>Non tiene conto delle caratteristiche dei multiprocessori, tenendo una coda unica di processi pronti per l'intero sistema </li></ul>
  9. 9. Nuovo algorimo (2.6) <ul><li>Obiettivi che si pone: </li></ul><ul><ul><li>Implementare uno scheduling O(1) scheduling. Le operazioni dell'algoritmo si svolgono in tempo costante. </li></ul></ul><ul><ul><li>Implementare scalabilità SMP . Ogni processore ha la propria coda di esecuzione . </li></ul></ul><ul><ul><li>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 </li></ul></ul>
  10. 10. Nuovo algoritmo (2.6, cont.) <ul><ul><li>Buona performance interattiva , Il sistema dovrebbe reagire immediatamente anche sotto elevato carico. </li></ul></ul><ul><ul><li>Equità , (evitare starvation). </li></ul></ul>
  11. 11. Nuovo algoritmo (2.6, cont.) <ul><li>Gli array di priorità </li></ul><ul><ul><li>Ogni coda di esecuzione (runqueue, una per processore) contienea due array di priorità : l'array dei processi attivi e quella dei processi esauriti </li></ul></ul><ul><ul><li>Ogni array contiene una coda per ogni livello di priorità. </li></ul></ul>
  12. 12. L'algoritmo O(1) <ul><ul><li>Il sistema mantiene una mappa di 140 bit che indicano se c'è un processo in esecuzione con tale priorità </li></ul></ul><ul><ul><li>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. </li></ul></ul><ul><ul><li>Si seleziona quindi il primo processo della coda. </li></ul></ul><ul><li>. </li></ul>
  13. 13. Ricalcolo del quantum <ul><li>Quando un processo termina il proprio quantum, viene spostato dall'array dei processi attivi a quelli dei processi esauriti. </li></ul><ul><li>Durante questa operazione viene anche ricalcolato il quantum. </li></ul><ul><li>Quando non ci sono più processi nell'array dei processi attivi, le due array cambiano di ruolo. Essendo puntatori, lo scambio è rapidissimo. </li></ul>
  14. 14. Scheduling algorithm for multiprocessor (contd.) <ul><li>Bilanciatore di carico </li></ul>
  15. 15. 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)
  16. 16. 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
  17. 17. 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)
  18. 18. Riferimenti <ul><li>http://iamexwiwww.unibe.ch/studenten/schlpbch/linuxScheduling/LinuxScheduling.html </li></ul><ul><li>http://oopweb.com/OS/Documents/tlk/VolumeFrames.html </li></ul><ul><li>http://www.samspublishing.com/articles/article.asp?p=101760&rl=1 </li></ul><ul><li>http://www.oreilly.com/catalog/linuxkernel/chapter/ch10.html </li></ul><ul><li>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 </li></ul>
  19. 19. Licenza <ul><li>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 </li></ul><ul><li>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 </li></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×