Studiem linux, 101 priorități de execuție a procesului

sinopsis

Din acest articol, veți învăța despre tehnicile de bază pentru gestionarea priorităților pentru executarea proceselor pe Linux. Veți învăța:

  • Înțelegeți care sunt prioritățile procesului.
  • Atribuiți prioritățile procesului.
  • Modificați prioritățile proceselor.

Despre această serie

Această serie de articole vă va ajuta să stăpâniți sarcinile de administrare a sistemului de operare Linux. De asemenea, puteți utiliza materialele din aceste articole pentru a vă pregăti pentru examenele de certificare de nivel 1 de la Institutul Profesional de Linux (LPIC-1).







Cerințe preliminare

Pentru a profita la maxim de articolele noastre, trebuie să aveți cunoștințe de bază despre Linux și să aveți un calculator de lucru cu Linux, unde puteți rula toate comenzile pe care le întâlniți. Uneori diferite versiuni de programe afișează rezultatele în moduri diferite, astfel încât conținutul listărilor și desenelor să difere de ceea ce vedeți pe calculatorul dvs. Toate exemplele acestui articol au fost executate în sistemul de operare Ubuntu 9.10 (Karmic Koala). Acest articol se bazează pe conceptul descris în articolul precedent din această serie, "Learning Linux, 101: Crearea, urmărirea și distrugerea proceselor".

Obținerea de informații despre prioritățile procesului

Cum se ajunge la Яном

În Linux, ca în toate sistemele de operare moderne, mai multe procese pot fi executate simultan. Acest lucru se realizează prin separarea procesorului și a altor resurse între procese. Dacă un proces utilizează resursele CPU 100%, atunci toate celelalte procese pot să nu mai răspundă.

Dacă executați comanda de sus. în mod implicit, acesta va afișa procesele, comandate de utilizarea procesorului în ordine descrescătoare, așa cum se arată în Listarea 1. În articolul precedent din această serie, „Învață Linux, 101: Crearea, monitor, și ucide procese,“ am creat un scenariu de ceas digital simplu, care afișează timpul ecranului cu un interval de 30 de secunde, iar restul timpului nu a făcut nimic. Dacă am început acest proces, probabil că nu va afecta ieșirea comenzii de vârf. Deoarece, de cele mai multe ori, nu utilizează resurse CPU.

Listing 1. Ieșirea tipică a comenzii de top pe un computer bazat pe Linux

Când numărul procesorilor disponibili este limitat, este necesar să se decidă cum să se aloce resursele disponibile între mai multe procese concurente. De obicei, această problemă este rezolvată după cum urmează: alege orice proces una care se desfășoară pe o perioadă scurtă de timp (... alt nume ei - cuantumul timpului și anume cantitatea de timp CPU alocat unei aplicații) sau atâta timp cât el nu merge la stat de așteptare pentru un eveniment, de exemplu, finalizarea unei operații I / O. Că procesele importante au fost întotdeauna necesare pentru a le resursele procesorului, care pot fi ocupate de alte aplicații solicitante, selecția se face pe baza alocării de timp de calculator. Coloana NI din listare 1 prezintă distribuția timpului calculatorului (prioritate sau așa-numita nostime) pentru fiecare proces. În mod tipic, valoarea fidelității variază de la -20 la 19; -20 reprezintă cea mai mare prioritate, iar 19 pentru cea mai mică prioritate.

Cum de a afla prioritatea cu ps

În plus față de comanda de sus, puteți utiliza comanda ps pentru a determina valorile de frumusețe. Puteți personaliza ieșirea utilizând una din metodele descrise în "Learning Linux 101: Crearea, monitorizarea și ștergerea proceselor" sau pur și simplu utilizați opțiunea -l pentru a afișa o listă detaliată. Ieșirea comenzii ps -l este afișată în listare 2. Ca și în cazul comenzii de sus. Valoarea priorității este afișată în coloana NI.

Listing 2. Folosind ps pentru a găsi valorile de frumusețe

Valoare prioritară prestabilită

Listarea 1 și 2, valoarea implicită de prioritate (cel puțin pentru procesele care se execută utilizator standard) este 0. Puteti vedea valoarea de prioritate pentru shell, și sistemele care rulează comanda frumos fără nici un parametru, așa cum se arată în Listarea 3.







Listarea 3. Verificarea valorii implicite de prioritate

Stabilirea priorităților

Înainte de a trece la setarea sau schimbarea priorităților, să creăm un script mic care consumă o cantitate semnificativă de resurse CPU; pe exemplul său, vom vedea cum funcționează de fapt prioritățile.

Un script care încarcă procesorul

Vom crea un script mic, care consumă resurse CPU și chiar ia ca cei doi parametri de intrare a contorului și eticheta afișează eticheta, data și ora curentă pe ecran, reduce contorul cu o valoare predeterminată la 0, și în cele din urmă, din nou, afișează o etichetă și data. Scriptul prezentat în listare 4 nu conține verificări de erori și nu este foarte fiabil, însă permite obținerea unui exemplu ilustrativ.

Listarea 4. Un script care încarcă CPU-ul

Dacă executați acest script pe computerul dvs., ar trebui să vedeți ieșire similară cu rezultatul din listare 5. În funcție de viteza calculatorului, puteți crește valoarea contorului pentru a observa diferența în timpul de execuție. Acest scenariu consumă o mulțime de resurse CPU, pe care le vom vedea curând. Dacă utilizați un interpret diferit de bash și scriptul nu funcționează în sistemul dvs., utilizați a doua metodă de pornire prezentată mai jos. Dacă nu rulați pe computerul dvs., asigurați-vă că puteți executa sarcini cu resurse intensive pe acesta înainte de a rula acest script.

Afișarea 5. Rularea scriptului count1.sh

Până acum, atât de bine. Să creați acum o listă de comenzi pentru a rula script-ul în fundal, și apoi utilizați comanda de sus a se vedea cât de mult resursele CPU consumă (pentru a actualiza cunoștințele din lista de comenzi, consultați articolul „Learning Linux, 101: linia de comandă Linux“). Lista de comenzi este afișată în listare 6, iar ieșirea comenzii de top este afișată în listare 7.

Listing 6. Rularea scriptului count1.sh și a comenzii de top
Listarea 7. Utilizarea intensivă a resurselor procesorului

Nu-i rău. Dacă rulați scenariul nostru, folosim resursele procesorului central la 100%. Dacă doriți să încărcați mai multe procesoare, puteți adăuga instanțe suplimentare ale count1.sh în lista de comenzi. Dacă o astfel de sarcină este îndeplinită pentru o lungă perioadă de timp, atunci voi (sau alți utilizatori) veți observa că afectează în mod semnificativ viteza calculatorului.

Folosind frumos pentru a aloca priorități

Acum că sistemul nostru este încărcat de ceva timp, să vedem cum puteți prioritiza procesul. Să rezumăm materialul care a fost deja acoperit.

  • În sistemele de operare Linux și UNIX®, se utilizează un sistem prioritar, în total 40 de niveluri, de la -20 (cea mai mare prioritate) la 19 (cea mai mică prioritate).
  • Procesele inițiate de utilizatorii obișnuiți au de obicei prioritate 0.
  • Comanda ps poate afișa prioritatea procesului (de exemplu, valoarea nice sau NI) cu opțiunea -l.
  • Comanda drăguță afișează prioritatea implicită.

Puteți folosi, de asemenea, comanda frumos pentru a începe un proces cu o prioritate diferită. Opțiunea -n (sau - ajustare) cu o valoare pozitivă ridică prioritatea și aceeași opțiune cu o valoare negativă - o scade. Amintiți-vă că procesul cu cea mai mică prioritate are valoarea maximă a parametrului de frumusețe, astfel că creșterea acestei valori înseamnă că procesul devine mai prietenos în raport cu alte procese. Rețineți că, de regulă, numai superuserul (root) poate reduce prioritatea proceselor. Cu alte cuvinte, utilizatorii obișnuiți pot face procesele mai prietenoase.

Pentru a demonstra folosirea comenzii frumoase pentru a stabili priorități, să executăm două instanțe ale scriptului count1.sh în subshell-uri diferite, dar la una dintre ele i se atribuie valoarea maximă a parametrului de frumusețe 19. După oa doua rulare, comanda ps -l. pentru a vedea stadiul procesului, inclusiv valoarea de frumusețe. În cele din urmă, adăugăm o pauză arbitrară în intervalul de 30 de secunde pentru a ne asigura că secvența de comenzi este terminată numai după terminarea subshell-urilor. Astfel, nu vom vedea noua invitație, în timp ce așteptăm retragerea. Rezultatele sunt prezentate în Lista 8.

Afișarea 8. Folosirea frumosului pentru stabilirea priorităților pentru două procese

Ambele sarcini s-au încheiat simultan, în ciuda diferitelor priorități Faptul este că script-ul utilizează resursele unui singur procesor, iar pe computerul meu are un procesor dual-core AMD Athlon ™ 7750, care nu este aproape încărcată, astfel încât fiecare dintre cele două procese sunt efectuate pe un singur nucleu, precum și necesitatea de a stabili priorități în acest caz absente.

Afișarea 9. Utilizarea frumosului pentru a aloca priorități la patru procese

După ce am stabilit patru priorități diferite, vedem efectul, care constă în faptul că toate sarcinile au fost finalizate în ordine. Încercați să experimentați diferite priorități și să analizați rezultatele pe cont propriu.

Și ultima notă despre rularea proceselor cu frumos. ca în cazul comenzii nohup. ca un argument frumos, nu puteți utiliza o conductă sau o listă de comenzi.

Schimbarea priorităților

Comandă de comandă

Dacă ați executat procesul și ați dat seama că ar trebui să ruleze cu o altă prioritate, atunci există o modalitate de a schimba prioritatea procesului de rulare cu comanda renice. Lista 10 arată cum se specifică valoarea absolută (și nu cantitatea de schimbare) a priorității unuia sau mai multor procese.

Listing 10. Utilizarea renice pentru a schimba prioritățile

Rețineți că, pentru a atribui proceselor o prioritate mai mare și pentru a le face mai puțin prietenoși, trebuie să aveți privilegii de superuser.

Pentru mai multe informații despre comenzile frumoase și renale, consultați paginile manuale corespunzătoare.







Articole similare

Trimiteți-le prietenilor: