SCHEDULING PER PIU' UNITÀ DI
ELABORAZIONE
in un
sistema dotato di più CPU abbiamo la presenza di uno scheduler
per ogni processore (ciascuno con più code)

il
sistema non è molto flessibile, non c'è bilanciamento
di carico della CPU a run-time: se ad un certo punto abbiamo una
CPU che ha tutti processi brevi che terminano subito, e una che sta
eseguendo processi lunghi, avremo una CPU libera e una sovraccarica
come
posso rimediare?
Possiamo
fare in maniera che gli scheduler di ciascuna CPU prendano i processi
da una stessa coda

abbiamo
però un problema: il puntatore T punta al PD (process
descriptor) del primo dei processi della coda; durante l'esecuzione:
viene
letto il valore di T
viene
eseguito il processo
viene
aggiornato il valore di T a quello di T.next (ossia punta al PD del
processo successivo)

c'è
quindi la possibilità che entrambi i processori vadano ad
eseguire lo stesso processo, o che vadano a modificare in maniera
errata il valore di T (abbiamo un problema di concorrenza)
possiamo
rimediare rendendo in qualche maniera le operazioni atomiche oppure
possiamo mettere una CPU master nella quale gira il sistema
operativo, mentre le altre CPU sono adibite alla esecuzione dei
processi; possiamo pensare che il sistema sia in grado di controllare
il valore del PC delle altre CPU

ho un
unico sistema con un unica struttura dati da cui schedulare
così
risolviamo il bilanciamento del carico, ma il processore master
potrebbe non farcela a gestire in modo efficiente tutte le
interazioni da controllare delle altre CPU
|