Crea sito

Gestione priorità nice – renice

7 / 100

Una delle proprieta dei processi che si puo modificare con top è la priorità.

In realtà, come accennato in tale occasione, quello che di norma si può modificare non e tanto la priorità di un processo, quanto il suo valore di nice.

La gestione delle priorità in un sistema unix-like infatti e abbastanza complessa dato che esistono due tipi di priorità: statiche e dinamiche.

Di norma le priorità statiche vengono utilizzate solo per i cosiddetti processi realtime, i processi ordinari (tutti, l’uso di processi real-time e riservato a pochi usi specialistici) hanno priorità statica nulla e il loro ordine di esecuzione viene stabilito solo in base a delle priorità dinamiche.

Una priorità statica piu alta comporta che un processo verrà sempre eseguito prima di ogni altro processo a priorità piu bassa.

Se piu processi hanno la stessa priorità statica l’ordine di esecuzione dipende dalla politica di scheduling scelta, che puo essere di tipo Round Robin (RR), in cui i processi girano a turno per un tempo sso, e First In First Out (FIFO), in cui vengono eseguiti nella sequenza in cui sono stati lanciati.

Nell’uso normale comunque non si ha bisogno di usare le priorità statiche (che come accennato sono anche molto rischiose in caso di errori di programmazione), e ci si a da al normale procedimento di scheduling, basato su un sistema di priorità dinamiche che permette di ottenere quella che usualmente viene chiamata la “fairness” nella distribuzione del tempo di CPU. Tra-lasciando i dettagli possiamo dire che le priorità dinamiche sono caratterizzate da un valore iniziale, che e quello che poi si chiama nice, che di default è nullo; piu un processo viene eseguito, più il valore di priorita dinamica aumenta, e lo scheduler mette sempre in esecuzione, fra tutti quelli in stato runnable, il processo che ha una priorita dinamica piu bassa.

Il comando che permette di modificare il valore di nice di un processo e appunto nice, che deve essere usato per lanciare un altro comando, con una sintassi in cui si fa seguire a nice la linea di comando di cui si vuole cambiare la priorita di esecuzione. L’opzione principale e -n (da specificare prima della riga di comando che si vuole eseguire) che permette di specificare un valore di nice da applicare al programma. Se non si specifica nulla viene applicato un valore di default pari a 10. Il comando nice puo essere usato solo quando si avvia un programma, se si vuole cambiare la priorita di un programma gia in esecuzione si puo usare il comando renice

In questo caso la priorità (o meglio il valore di nice) deve essere indicato con il suo valore numerico come primo argomento; si possono specificare il processo (o i processi) a cui applicare il cambiamento con gli argomenti successivi. Il comando renice interpreta tutti gli argomenti successivi al primo come indicazione dei processi di cui si vuole cambiare la priorità.

Il default e considerare gli argomenti come valori del PID di un processo, cosa che puo essere indicata esplicitamente usando l’opzione -p; con l’opzione -u si possono selezionare tutti i processi di un singolo utente, specificato per nome o tramite il suo identificativo. Infine con -g si possono indicare tutti i processi di uno stesso gruppo specificandone il numero di process group.

Si tenga conto inoltre che a differenza di nice, i valori di priorità impostati con renice sono assoluti, ed indicano il valore di nice da impostare. Una volta che si è diminuita la priorità di un processo aumentandone il valore di nice un utente normale in teoria non potrebbe tornare indietro, ma con le versioni recenti del commando questo non è piu vero.

Translate »