Utilitarul nice este un program de calculator în sisteme de operare asemănătoare UNIX , conceput pentru a porni procese cu o prioritate nice schimbată. Prioritatea nice ( întreg ) a unui proces este utilizată de planificatorul de procese a nucleului sistemului de operare atunci când alocă timpul CPU între procese , poate fi numită cpu_nice [1] pentru a o distinge de prioritatea io_nice [2] utilizată de planificatorul I/O și modificat de utilitatea ionică [3] . Frumosul utilitar a apărut în a 4-a versiune a sistemului de operare UNIX , dezvoltat de AT&T [4] . Descris în IEEE Std 1003.1-2001 ( POSIX .1) [4] [5] . O implementare frumoasă este inclusă în pachetul coreutils .
Ar trebui să se distingă termenii „utilitate” și „comandă”. Un utilitar este un program de calculator care rulează într-un proces separat . Comanda este o comandă încorporată a interpretului de comenzi (shell) , executată în interiorul procesului shell .
Comanda nice este o comandă încorporată în shell care îndeplinește aceleași funcții ca și utilitarul nice , dar rulează în interiorul procesului shell . Implementat, de exemplu, de interpreții de comenzi csh și tcsh .
Prioritatea plăcută este un număr care îi spune programului de procesare a nucleului sistemului de operare prioritatea pe care utilizatorul ar dori să o atribuie procesului .
Utilitarul nice , rulat fără argumente, scoate prioritatea plăcută moștenită de la procesul părinte . nice preia un argument offset care variază de la -20 (prioritatea cea mai mare) la +19 (prioritatea cea mai scăzută). Dacă specificați offset-ul și calea către executabil , nice își va primi prioritatea de proces , o va schimba la offset-ul specificat și va folosi apelul de familieiexec() pentru a înlocui codul de proces cu codul din executabilul specificat Comanda plăcută va face același lucru, dar mai întâi va efectua un apel de sistem de familie pentru a porni procesul copil ( eng. sub-shell ). Dacă nu este specificat nicio compensare, se va folosi offset +10. Un utilizator privilegiat ( root ) poate specifica un offset negativ. fork()
Prioritatea plăcută și prioritatea programatorului de procese a nucleului sistemului de operare sunt numere diferite. Numărul frumos este prioritatea pe care utilizatorul ar dori să o atribuie procesului . Prioritatea planificatorului este prioritatea reală atribuită procesului de către planificator . Planificatorul poate dori să atribuie unui proces o prioritate apropiată de bună, dar acest lucru nu este întotdeauna posibil, deoarece pot exista multe procese care rulează pe sistem cu priorități diferite. Prioritatea plăcută este un atribut de proces și, ca și alte atribute, este moștenită de procesele copil . În ieșirea utilităților top , ps , htop , etc., prioritatea nice se numește „NI” - prescurtare pentru „nice”, iar prioritatea planificatorului este „PRI” - prescurtare pentru „priority”. De obicei NI = PRI - 20 , dar acest lucru nu este întotdeauna adevărat. Implicit NI=0 , respectiv PRI=20 .
Programul de procesare a nucleului Linux acceptă priorități de la 0 ( în timp real ) la 139 inclusiv [6] . Prioritățile −20…+19 ale utilitarului sau comenzii nice corespund priorităților 100…139 ale planificatorului de proces . Alte priorități ale planificatorului de procese pot fi setate cu comanda chrt din pachetul util-linux .
Programul de procesare a nucleului FreeBSD acceptă priorități de la -20 la +20.
Pe Linux , apelul de sistem este folosit pentru a obține prioritatea actuală bună a unui proces și [7] pentru a o modifica . getpriority()setpriority()
Planificatorul de proces poate funcționa în conformitate cu o politică selectată de utilizator ( de exemplu , politica de programare ) . Unele politici pot ignora prioritatea bună.
În Linux , folosind un apel de sistem, puteți afla politica de planificare a proceselor aplicată procesului curent și o puteți utiliza pentru a-l schimba [8] . sched_getscheduler()sched_setscheduler()
Utilitarul renice este folosit pentru a schimba prioritatea proceselor care rulează deja .
Comenzi Unix | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
|