Scheduler

di il
2 risposte

Scheduler

Buonasera,
credo sia la sezione giusta per porre un quesito di cui non riesco a venire a capo, che riguarda la schedulazione di processi con priorità dinamica (supponendo priorità statica uguale a zero per tutti i processi in gioco).
Supponiamo che lo scheduler vada in esecuzione ogni 20 clock tick. Lo scheduler vede il processo col counter più alto e gli assegna la CPU. Ma se questo processo ha counter=14, dopo 14 tick il suo counter va a 0. Cosa succede? Continua a essere eseguito per altri 6 tick oppure chiama una chiamata di sistema che manda in esecuzione lo scheduler il quale fa il cambio di contesto?

Grazie

2 Risposte

  • Re: Scheduler

    Che centra il counter con la priorita' del processo?

    Lo sceduler sceglie il processo in base alla priorita' e gli assegna un certo tempo per l'esecuzione.

    Lo scheduler passa al prossimo processo se:

    1) e' scaduto il tempo di esecuzione
    2) il processo ha chiamato una primitiva di sincronizzazione (richiesta di una risorsa, lock, ...)

    La priorita' del processo cambia in base a politiche quali: da quanto tempo il processo non e' ancora andato in esecuzione, alla risorsa che il processo cerca di acquisire, a statistiche sull'uso delle risorse ...

    Nel tuo caso, anche se non capisco cosa intendi per counter non e' plausibile che il processo usufruisca di piu' risorse di quante se ne puo' permettere: quindi, in questo caso, dopo 14 tick, lo scheduler valutera' il prossimo processo da mandare in esecuzione (che potrebbe essere ancora lui ...).

    Oviamente non e' il processo che manda in esecuzione lo scheduler, e' lo scheduler che parte, indipendentemente dal processo: altrimenti un processo potrebbe acquisire tutte le risorse del sistema semplicemente non chiamando mai lo scheduler!!!
  • Re: Scheduler

    La priorità del processo è un time slice (regolata dal valore della nice della task_struct) che varia ad ogni tick dell'orologio, e questa variazione è espressa dalla variabile counter associata al processo stesso, che diminuisce di una unità a ogni tick. Per esempio, se un processo ha nice=15 ed è il processo a priorità più alta, lo scheduler assegnerà la CPU a quel processo. All'inizio viene posto counter=nice=15. Il processo in esecuzione vedrà il counter diminuire di una unità a ogni tick, fino ad arrivare a 0. Quando tutti i processi avranno counter=0 lo scheduler ricalcolerà le priorità, dato che il time sharing è stato completato, tutti i processi hanno avuto la loro fetta di tempo in cui sono stati eseguiti. Però non ho capito cosa succede quando il conter di un processo arriva a 0 e lo scheduler non viene risvegliato dall'interrupt, il quale arriva ogni tot tick.
Devi accedere o registrarti per scrivere nel forum
2 risposte