Resursele existente intr-un sistem pot fi
alocate proceselor in mai multe moduri, in functie de tehnica de
exploatare a sistemului folosita:
 - prin alocarea tuturor resurselor la un singur proces, pe toata
     durata executiei sale, ca in cazul monoprogramarii 
- prin alocarea in comun a resurselor, la mai multe procese in
     executie, oferind fiecarui proces cate un segment de timp pentru
     utilizarea resursei, segmente de timp egale pentru toate procesele sau
     diferite intre ele, alocare numita multiplexarea resurselor,
     ca in cazul exploatarii in time-sharing 
- prin partajarea resurselor, ca in multiprogramare, adica
     alocand o resursa solicitata de proces in masura
     disponibilitatii sale si eliberand-o numai dupa
     utilizarea ei completa 
- permitand accesul concurent la resurse, cu concursul
     sistemului de intreruperi, ca in cazul exploatarii in timp real,
     pentru alocarea rapida a resurselor solicitate si eliberarea
     rapida a celor care nu mai sunt utilizate. 
Sistemul de reguli dupa care este
luata decizia de alocare a resurselor la un proces se numeste algoritm
de alocare; acesta trebuie sa aiba in vedere atat utilizarea
eficienta a resurselor sistemului cat si reducerea timpului de
raspuns al sistemului la solicitarile proceselor.
Problema impasului este o problema legata de alocarea in comun a unor resurse la
mai multe procese concurente; ea poate aparea intre procese a caror
executie este conditionata de utilizarea exclusiva a
acelorasi resurse.
Sa consideram exemplul a doua
procese care folosesc aceleasi doua fisiere. Avem in vedere
faptul ca, pentru a fi actualizat, un fisier trebuie deschis pentru
acces exclusiv. Daca primul proces trebuie sa deschida, pentru
actualizare, doua fisiere F1 si F2 iar al doilea proces trebuie
sa utilizeze, tot in regim exclusiv, fisierele F2 si F1, poate
aparea situatia in care, in fiecare proces, a fost deschis exclusiv
primul fisier si se asteapta sa poata fi deschis
exclusiv si al doilea fisier. In acest caz, apare o asteptare
circulara a celor doua procese, pentru eliberarea resursei solicitate,
care este alocata exclusiv celuilalt proces. Aceasta asteptare
circulara poarta numele de impas; ea poate dura un timp
nedefinit de lung si nu poate fi intrerupta din interiorul
proceselor, daca acestea nu au prevazuta o procedura de
exceptie, care sa se execute in cazul in care o cerere a procesului
nu poate fi satisfacuta.
 
Impasul (interblocarea proceselor) este o
stare grava care poate duce la un blocaj in functionarea sistemului
de calcul si care trebuie avuta in vedere si prevenita de
catre sistemul de operare. 
Conditiile
de aparitie a impasului sunt:
 - exista un lant de procese in care
     fiecare dintre ele asteapta eliberarea unei resurse utilizate de
     alt proces din lant (conditia de cerere de alocare
     circulara) 
- procesele solicita controlul exclusiv al resurselor pe care le
     utilizeaza (conditia de excludere mutuala a proceselor) 
- procesele pastreaza resursele alocate deja, atunci cand
     asteapta alocarea altor resurse (conditia de asteptare
     a alocarii resurselor) 
- resursele nu sunt eliberate de procesele la care au fost alocate
     pana nu au fost utilizate complet (conditia de
     nepreemptie). 
Exista
mai multe metode de prevenire a impasului:
 - metoda prealocarii resurselor:
     procesul trebuie sa ceara toate resursele necesare cand
     solicita incarcarea in sistem; cu metode de detectie a
     impasului, sistemul verifica daca exista riscul
     aparitiei unui impas; daca nu, procesul este incarcat, in
     cazul in care toate resursele solicitate sunt disponibile; daca nu
     sunt disponibile toate resursele solicitate, procesul asteapta
     indeplinirea conditiilor de mai sus; 
- metoda alocarii controlate a
     resurselor: procesele trebuie sa declare de la inceput toate
     resursele care le sunt necesare; procesele sunt lansate in executie,
     chiar daca nu sunt disponibile toate resursele; alocarea resurselor
     se face controlat, urmarindu-se evitarea impasului; in cazul in care
     aparitia impasului este iminenta in momentul alocarii unei
     noi resurse, se blocheaza procesul care a solicitat resursa pana
     cand se depaseste iminenta impasului. 
Detectarea aparitiei unui impas este prima problema la care trebuie sa
raspunda un sistem de operare care nu are implementat un mecanism de
prevenire a impasului. Este de dorit ca, odata cu detectarea unui impas,
sa se identifice si procesul care a produs impasul.
Iesirea din impas se face, de regula, destructiv, prin una din
metodele urmatoare:
 - se reseteaza sistemul de calcul, fapt care duce la intreruperea
     fortata a tuturor proceselor din sistem; aceasta este metoda cea
     mai radicala, prin aplicarea careia se pierd rezultatele
     intermediare ale tuturor proceselor in executie din sistem 
- se alege un proces prin a carui distrugere se inlatura
     impasul si se distruge acest proces, in cazul in care sistemul de
     operare dispune de modalitati de detectare a procesului care a
     generat impasul; in acest caz, se pierd numai rezultatele intermediare ale
     executiei procesului care se distruge 
- daca procesul care va fi distrus este prevazut cu puncte de
     reluare, atunci el va putea fi reluat din punctul cel mai apropiat de
     stadiul curent al executiei sale. Un punct de reluare este o
     imagine a stadiului executiei procesului, la un moment dat. Crearea
     punctelor de reluare pentru procesele din sistem implica
     operatii suplimentare, inclusiv in proiectarea programului care se
     executa, si consum suplimentar de resurse. 
Facem observatia ca dezactivarea
si reluarea executarii unui proces, generata sub controlul
sistemului de intreruperi, se deosebeste de utilizarea punctelor de
reluare a unui proces care va fi distrus si apoi relansat in executie.
In cazul intreruperii, procesul trece din starea RUN
in starea READY, din care poate fi reactivat ulterior, in acelasi context
de lucru; in cazul utilizarii punctelor de reluare, se distruge procesul
si, practic, se lanseaza in executie un alt proces care trebuie
sa continue procesul distrus, incepand de la punctul de reluare.
 
			
 Sincronizarea executiei proceselor 
Sincronizarea proceselor este necesara
in activitatea de gestionare a proceselor, in cazul in care executia
anumitor procese trebuie blocata, pana la producerea unor evenimente
generate de alte procese. Problema sincronizarii poate sa
apara:
 - in legatura cu utilizarea in comun a
     resurselor intre procese concurente, pentru alocarea automata a
     resurselor 
- in cazul proceselor concurente in care executia
     unui proces este conditionata de rezultatul executiei altui
     proces 
- in cazul comunicarii intre procese, in scopul realizarii
     unei comunicari corecte. 
Sincronizarea proceselor reprezinta inlantuirea automata a
starilor unor procese concurente, prin blocarea si deblocarea
automata a proceselor in executie.
Mecanisme de
sincronizare a proceselor
 - Mecanismele de sincronizare pentru partajarea
     resurselor intre procese concurente isi propun gestionarea
     operatiei de alocare a unei resurse la procese, astfel incat, la
     eliberarea resursei, procesul care a solicitat resursa sa fie trecut
     automat din starea WAIT in starea READY, in vederea alocarii resursei
     solicitate. 
Fiecarei resurse ii poate fi asociat cate un bit
indicator al starii de ocupare a resursei (lock-bit). Mecanismul de
utilizare a bitilor indicatori este urmatorul: 
 - prin conventie, bitul indicator este
     setat pe 0, daca resursa este disponibila, respectiv pe 1,
     daca resursa este alocata altui proces; 
- inainte de a aloca o resursa unui proces,
     se verifica starea lock-bit -ului: 
- daca valoarea este 0, procesul are acces
     la resursa si se seteaza bitul pe 1, pana la
     incheierea utilizarii resursei de catre proces, cand bitul se
     reseteaza pe 0 si resursa devine disponibila; 
- in cazul in care bitul este 1, procesul
     ramane in asteptare, sistemul executand verificarea
     periodica a lock-bit -ului, pana cand acesta devine 0 si
     procesului i se poate aloca resursa. 
Inconvenientul
acestei metode consta in faptul ca, desi procesul este in starea
WAIT, procesorul este afectat procesului pentru testarea valorii din lock-bit
(procesorul executa in mod repetat o aceeasi instructiune de
testare a starii bitului indicator); ar fi preferabil ca, pe timpul cat
procesul asteapta, procesorul sa fie eliberat, pentru a putea executa
alte sarcini, pentru alte procese din sistem.
 
 
Inconvenientul
metodei prin utilizarea bitilor indicatori poate fi depasit prin
crearea unei liste cu toate procesele in asteptare pentru o
resursa; introducerea si extragerea proceselor din lista poate fi
gestionata automat, cu ajutorul unui bit semafor s, gestionat
de functiile pereche pentru alocare A() si pentru dezalocare
D(). Modul de functionare al acestui mecanism este urmatorul: 
 - pentru fiecare resursa partajata din
     sistem exista un bit semafor s si o lista a
     proceselor in asteptare, pentru alocarea resursei 
- bitul semafor s este setat initial la
     valoarea 1 
- functia de alocare asociata resursei
     este executata cand un proces solicita alocarea resursei;
     functia decrementeaza bitul s si aloca resursa procesului
     numai daca valoarea bitului s este 0; in caz contrar, procesul este
     trecut in coada de asteptare 
- functia de dezalocare asociata
     resursei este executata cand un proces elibereaza resursa;
     functia incrementeaza bitul s si scoate din coada
     primul proces caruia ii aloca resursa numai daca valoarea
     bitului s este negativa sau 0; in caz contrar, bitul s are valoarea
     1, deci coada de asteptare este goala. 
In
cadrul acestui algoritm se observa faptul ca variabila semafor este
resursa critica pentru functiile de alocare si de
dezalocare iar cele doua functii sunt sectiuni critice pentru
procese; in consecinta, executia celor doua functii nu
trebuie blocata si asupra variabilei semafor nu trebuie sa
actioneze, la un moment dat, decat una dintre aceste functii.
Mecanismele
de sincronizare directa, prin comunicarea intre procese, utilizate
pentru procese concurente, pentru care executia unui proces este
conditionata de rezultatul executiei altor procese, sau pentru
procese care fac schimb de informatii: 
 - Cu ajutorul unor functii primitive
     ale sistemului de operare, care permit deblocarea unui proces care a
     intrat in starea de asteptare, cu functii de tipul WAIT() pentru
     un eveniment, de catre un alt proces, care executa o
     functie de setare a indicatorului de eveniment respectiv.
     Concomitent, se poate realiza si schimbul de date intre cele
     doua procese, utilizand directive ale sistemului de operare de tipul
     SEND(proces destinatar,adresa mesaj) si RECEIVE(adresa mesaj);
     comunicarea are loc in momentul in care procesul expeditor lanseaza
     comanda SEND(), urmata de executia comenzii RECEIVE() de
     catre procesul destinatar; pentru unele sisteme de operare,
     directivele SEND si RECEIVE opereaza si asupra indicatorilor de
     eveniment, pentru sincronizarea proceselor; 
- Prin intermediul cutiilor postale,
     care sunt zone de buffer in memoria interna, destinate
     comunicarii intre procese; un proces creaza o cutie
     postala in care depune informatii care pot fi extrase de
     celelalte procese. Conditia unei comunicari corecte este ca
     mesajele transmise sa poata fi preluate integral, corect si
     in ordinea in care au fost produse. In gestionarea
     comunicatiei prin aceasta metoda trebuie avute in vedere
     restrictiile determinate de: 
 - capacitatea limitata a bufferului: expeditorul poate incearca
     sa expedieze mai multe mesaje decat poate memora bufferul; in acest
     caz exista posibilitatea ‘acoperirii’ mesajelor, inainte ca ele
     sa fie preluate; 
- vitezele diferite ale proceselor expeditor si destinatar:
     destinatarul poate sa preia mai repede mesajele decat le poate depune
     expeditorul; in acest caz exista posibilitatea preluarii
     repetate a unui mesaj. 
Regula de sincronizare a proceselor, in cazul
comunicarii prin intermediul cutiilor postale, trebuie sa
respecte conditiile:
 - mesajele trebuiesc preluate din buffer in
     ordinea in care au fost scrise 
- numarul mesajelor transmise si
     nereceptionate trebuie sa nu depaseasca
     numarul mesajelor care pot fi memorate in buffer 
- numarul mesajelor receptionate nu
     trebuie sa depaseasca numarul mesajelor emise.