Next: Thread-uri
Up: Gestiunea proceselor
Previous: Structura unui proces in
La orice moment de timp un proces se poate afla intr-una din urmatoarele
stari:
- blocat (waiting) - se zice ca procesul doarme (sleeps);
in aceasta stare un proces este blocat in asteptarea unui eveniment
(o operatie I/O, primirea unui semnal, etc.)
- gata de executie (ready) - un proces este pregatit
pentru a fi rulat; trebuie doar sa i se acorde accesul la procesor
- in executie (running) - procesul ruleaza si are
acces complet la procesor
Exista anumite substari particulare, dar cele trei stari de mai sus
sunt esentiale in intelegerea modului in care un proces functioneaza.
Intr-un sistem cu N procesoare, pot exista maxim N procese aflate
in executie. Un proces se afla in executie daca detine acces complet
la un procesor.
La producerea unui eveniment se poate realiza trecerea dintr-o stare
in alta. Cele mai importante tranzitii sunt:
- din waiting in ready - tranzitia are loc atunci
cand conditia pentru care procesul astepta in blocare a fost indeplinita
(s-a realizat operatia I/O, s-a primit semnalul, etc.)
- din ready in running - planificatorul de procese
selecteaza un nou proces care sa ruleze pe un anumit procesor
- din running in waiting - in timp ce rula, procesul
a intalnit o conditie care-l obliga sa astepte blocant; planificatorul
de procese va inlocui acest proces cu un proces ready
- din running in ready - in sistemele time-sharing,
procesului i-a expirat cuanta de timp alocata; desi el nu se va bloca,
va fi inlocuit cu un alt proces ready
Inlocuirea unui proces cu un altul in cadrul unui procesor se numeste
comutare de context (task switching). Aceasta este realizata de planificatorul
de procese (scheduler). Acesta alege din coada de procese ready
procesul cel mai potrivit pe baza anumitor criterii si ii ofera acestuia
procesorul.
In Linux, ca si in alte sisteme de operare, unui proces ii este asociata
o cuanta de timp. Pe masura ce acesta ruleaza, el consuma din cuanta
de timp. In momentul in care aceasta i-a expirat complet, va fi inlocuit
cu un alt proces. Alta situatie de inlocuire apare atunci cand procesul
intalneste o conditie care-l obliga sa astepte blocant.
Schimbarea de context este o operatie destul de costisitoare care
necesita schimbarea registrelor, stivei, aducerea paginilor rezidente
de pe disc, etc. Din aceasta cauza cuanta de timp nu poate fi aleasa
foarte mica. Acest lucru ar insemna ca cea mai mare parte din timpul
de rulare a unui proces s-ar pierde pe comutare. De asemenea, o cuanta
mare de timp nu este de dorit, intrucat va produce asteptare mare
a proceselor din coada ready si un timp de raspuns mare (interactivitate
redusa). In Linux, datorita unor algoritmi si euristici eficiente,
cuanta de timp asociata unui proces este destul de mare, lasand totusi
proceselor un timp de raspuns foarte bun.
De asemenea, procesele dispun de o prioritate la scheduling. La o
comutare de context, un proces prioritar va acapara procesorul in
dauna unuia mai putin prioritar. In Linux/Unix prioritatea unui proces
poate fi alterata cu ajutorul comenzii nice.
Subsections
Next: Thread-uri
Up: Gestiunea proceselor
Previous: Structura unui proces in
Razvan Adrian Deaconescu
2005-10-12