Come l’hardware anche il software di sistema può avere differenti “intensità” di accoppiamento:
Accoppiamento sw stretto su multiprocessor.
stessi obiettivi di un sistema operativo monoprocessore:
L’utente ha l’impressione di una sola CPU:
Il modo più semplice per organizzare un MOS consiste nel dividere staticamente la memoria quante sono le CPU.
Viene condiviso il codice del s.o. ma ogni CPU ha dati separati.
Le CPU lavorano come computer indipendenti.
Problema: non si sfrutta la condivisione.
Una seconda organizzazione si basa sul modello master/slave.
Una CPU esegue il s.o. mentre le altre eseguono i processi utente.
Risolve tutti i problemi di efficienza del modello precedente.
Problema: collo di bottiglia nella CPU1.
Una terza organizzazione mira ad eliminare la asimmetria dell’approccio precedente (modello Symmetric Multi Processor SMP).
Ogni CPU può eseguire sia il S.O. sia i processi utente e tutta la memoria è a disposizione di tutte le CPU.
Miglior bilanciamento nell’uso delle risorse.
Problema: sincronizzazione nell’accesso alle strutture dati del s.o.
Indipendentemente dal tipo di s.o. i multiprocessori hanno il collo di bottiglia rappresentato dalle risorse comuni (soprattutto l’accesso alla memoria).
Lo stato dell’arte oggi è rappresentato dai multicomputer.
Due tipi di sistemi operativi
Architettura microkernel, dove i processi sulle varie macchine comunicano e si sincronizzano attraverso scambio di messaggi: send, receive.
Il kernel locale (lo stesso per tutti i computer) gestisce le risorse fisiche locali (es: paginazione della memoria, scheduling della CPU).
Più difficile da realizzare.
Analogamente ai sistemi monoprocessori, lo scheduling nei sistemi multiprocessore ha come obiettivi:
Diversamente dai sistemi monoprocessori, lo scheduling nei sistemi multiprocessore deve:
Osservazione: di solito su sistemi multiprocessore sono eseguiti applicazioni parallele composte da più processi (insieme di processi cooperanti e correlati).
Ruolo chiave dello scheduling nei sistemi operativi per sistemi a molti processori.
Il modo più semplice per sviluppare uno scheduler per un sistema multiprocessore è immaginare:
gestite secondo una qualunque politica di scheduling monoprocessore.
Ogni volta che un processore risulta disponibile viene assegnato un processo in testa alla coda (alle code) al processore.
L’approccio descritto assegna i processi alla CPU “alla cieca”, senza tenere conto delle caratteristiche dei processi e delle CPU
(scheduling job-blind).
Due grossi svantaggi:
Un sistema parallelo è composto da numerose CPU.
Obiettivo 1: Massimizzazione del parallelismo.
Strategia: raggruppare processi cooperanti di una stessa applicazione e schedularli assieme sulle varie CPU.
Scheduling a condivisione di tempo.
Un processo che già ha avuto accesso ad una CPU ha già delle pagine nei TLB (o nella cache) di quel processore.
Obiettivo 2: favorire l’affinità con la CPU.
Strategia: assegnare un processo ad una CPU (o a un numero ristretto di CPU che condividono un’area di memoria) in maniera da massimizzare i TLB hit.
Scheduling a partizionamento di spazio
Gli algoritmi di scheduling a condivisione di tempo o a partizionamento dello spazio fanno parte di un approccio che tiene conto del tipo di job e per questo è chiamato: scheduling job aware.
Svantaggio: maggiore complessità dell’algoritmo di scheduling.
Algoritmo Smallest Number of Process First (SNPF).
Versioni con e senza prelazioni.
Coda globale a priorità: la priorità è inversamente proporzionale al numero di processi che compone l’applicazione.
I processi associati allo stesso job ricevono la stessa priorità e quindi sono spesso schedulati insieme:
Possibilità di posticipazione indefinita o di asincronia per applicazioni con molti processi.
Algoritmo di coscheduling (schedulazione gang).
Basata su round robin.
Processi di una stessa applicazione vengono schedulati sempre insieme:
Non c’è posticipazione indefinita.
Gli algoritmi di scheduling descritti non sono mutuamente esclusivi.
Appena creato il processo viene assegnato ad una CPU qualunque con il metodo a condivisione di tempo usando una coda globale.
Successivamente rimane in una coda locale alla CPU con il metodo a partizionamento di spazio.
2. Lo stallo dei processi – parte prima
3. Lo stallo dei processi – parte seconda
4. Lo stallo dei processi – parte terza
6. Il S.O. Linux – parte prima
7. Il S.O. Linux – parte seconda
8. Il S.O. Windows – parte prima
9. Il S.O. Windows – parte seconda
10. Il S.O. Windows – parte terza
11. I S.O. multimediali – parte prima
12. I S.O. multimediali – parte seconda
13. I S.O. multimediali – parte terza
14. I Sistemi Operativi distribuiti - parte prima
15. I Sistemi Operativi distribuiti - parte seconda
16. I Sistemi Operativi distribuiti - parte terza
17. I Sistemi Operativi distribuiti - parte quarta
18. I Sistemi Operativi distribuiti - parte quinta
19. I Sistemi Operativi distribuiti - parte sesta
Silberschatz , Galvin, Gagne – Sistemi Operativi 8a ed. Capitolo 16
Tanenbaum – Moderni sistemi operativi 3a ed. Capitolo 8
Deitel, Deitel, Choffnes - Sistemi operativi 3a ed. Capitoli 13 e 14
2. Lo stallo dei processi – parte prima
3. Lo stallo dei processi – parte seconda
4. Lo stallo dei processi – parte terza
6. Il S.O. Linux – parte prima
7. Il S.O. Linux – parte seconda
8. Il S.O. Windows – parte prima
9. Il S.O. Windows – parte seconda
10. Il S.O. Windows – parte terza
11. I S.O. multimediali – parte prima
12. I S.O. multimediali – parte seconda
13. I S.O. multimediali – parte terza
14. I Sistemi Operativi distribuiti - parte prima
17. I Sistemi Operativi distribuiti - parte quarta
18. I Sistemi Operativi distribuiti - parte quinta
19. I Sistemi Operativi distribuiti - parte sesta
I podcast del corso sono disponibili anche su iTunesU e tramite Feed RSS.