Skip to main content

Process Priority Scheduling....By-Hands!!!!!!!!!

orhos's picture

Come si nota dal titolo, questo articolo spiega in linea generale come cambiare le priorita` di Scheduling dei  processi, a mano, in ambienti GNU/Linux. Per prima cosa dobbiamo sapere a grandi linee come funziona lo Scheduling in ambienti UNIX based. L`algoritmo di Scheduling in questi ambienti cerca di perseguire degli obiettivi tra di loro contrastanti come : tempo di risposta rapido del processo,evitare la starvation dei processi, gesire la priorita` dei processi etc. , etc . Lo Scheduling dei processi in Linux e` basato su un algoritmo di Time Scheduling, in cui il CPU TIME viene diviso in slices una per ogni processo runnable. Nei sistemi monoprocessore puo` essere in esecuzione in un istante di tempo un solo processo per volta. La schedulazione dei processi viene implementata attraverso gli Interrupt e quindi non c`e` bisogno di codice aggiuntivo all`interno del processo. Le policy di Scheduling sono anche basate sulla priorita` che hanno i processi e quest`ultime vengono valutate in accordo a complessi algoritmi, ma alla fine ad ogni processo viene assegnato un numero identificato della priorita` che il processo ha rispetto agli altri. In Linux la priorita` dei processi e` dinamica nel senso che lo Scheduler a run time puo` cambiare e cambia effettivamente la priorita` dei processi, ad esempio se si accorge che il processo e` stato in IDLE per una lunga porzione del tempo di CPU allora aumenta` di molto la priorita` del processo in questione. Quando si parla di processi dal punto di vista dello Scheduling, essi possono essere divisi in CPU-Bound e I/O Bound. I processi CPU-Bound fanno un uso molto intensivo della CPU mentre quelli I/O Bound fanno un uso molto intensivo delle operazioni di I/O. In linux il programmatore puo` cambiare queste priorita` attraverso l`uso di System Call. Vediamole: 

  • nice()   cambia la priorita` di Scheduling di un processo.
  • setpriority()    cambia la priorita` di un gruppo di processi convenzionali.
  • sched_setscheduler()    Cambia la priorita` di Scheduling di un processo.
  • sched_setparam()      Cambia la priorita` di un processo.

 E` possibile cambiare By-Hands la priorita` di Scheduling di un processo agendo dalla Shell. e precisamente useremo la syscall nice().  Per vedere il nice (cortesia) di ogni processo possiamo usare 2 comandi: il primo e`:  top    Il quale ci mostrera` una lista di processi e nella colonna NI vedremo proprio il Nice di ogni singolo processo. L`altro comando e`   ps -e -o ni,pid,ppid,command  Il quale ci mostrera` la lista di tutti i processi in esecuzione sul nostro sistema con alcuni parametri che noi ci specifichiamo tra cui ni ossia il nice. Il niceness di ogni processo puo` assumere valori chevanno da -20 (priorita` massima) a +20 (priorita` bassa), a questo punto possiamo impostare il niceness del processo con il seguente comando:   sudo renice -n [nuovo niceness] -p [PID]   Bisogna essere ovviamente amministratori e trovandomi personalmente su un sitema Debian utilizzo sudo. Con questo comando settiamo noi la nuova priorita` del processo. Se volessimo che il nostro processo abbia una priorita` di Scheduling su tutti gli altri allora utilizzeremo  un niceness di -20 e quindi:   sudo renice -n -20 -p [PID]   A questo punto possiamo nuovamente controllare il niceness del processo e verificare che abbia assunto il nuovo valore. Questo e` utile per tutti i processi CPU-Bound. Mentre per i processi I/O Bound utilizzeremo un altro comando e cioe`:  sudo ionice  Questo comando serve ad impostare la priorita` per quanto riguarda lo Scheduling delle risorse di I/O. Vediamo come funziona: Per cambiare la priorita` sull` I/O digiteremo:    sudo ionice -c [Class of Priority] -n [ClassData] -p [PID]  Abbiamo 4 classi di priorita` e precisamente: 

  • 0 Nessuna priorita` particolare.
  • 1 Priorita` Real Time. (Non funziona nei Kernel non compilati per il Real TIme).
  • 2 Priorita` Best-Effort (Accetta valori da 0 a 7 il numero piu` basso ha un elevata priorita`.)
  • 3 Idle.

 Lo switch -n viene utilizzato se la classe accetta un numero come argomento come nel caso della classe 2.Possiamo verificare L` ionice di ogni processo semplicemente digitando:   sudo ionice -p [PID]  Morale della favola, se decidessimo di cambiare la priorita` di Scheduling di un processo, se il processo e` CPU-Bound allora cambieremo il niceness con il comando nice altrimenti se il processo e` I/O-Bound cambieremo l` IO niceness con il comando ionice.Abbiamo visto come la gestione dello Scheduling in ambienti GNU/Linux sia cosi` dinamica e versatile rispetto a qualsiasi altro SO. Questo e` un ulteriore esempio di come in Linux abbiamo un potente controllo sul Kernel e su tutte le risorse. 


Un browser game è un gioco

Un browser game è un gioco per computer che si gioca su Internet utilizzando un browser web. Browser game possono essere create e gestite utilizzando tecnologie web standard del browser o plug-in. Browser game comprendono tutti i generi di videogiochi e possono essere single-player o multiplayer. Giochi gratis sono portatili e possono essere riprodotti su più dispositivi diversi o browser web. Browser game disponibili in molti generi e temi che fanno appello a entrambi i giocatori core e giocatori occasionali. Flash Motor Racing Giochi Negozio di gelato Giochi Cancello di uscita Giochi

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.
  • You can use BBCode tags in the text.

More information about formatting options

Type the characters you see in this picture. (verify using audio)
Type the characters you see in the picture above; if you can't read them, submit the form and a new image will be generated. Not case sensitive.
Syndicate content