|
NOTIUNI GENERALE DE PROCESE SI THREADURI
1. Definitia procesului
Intr-un sistem de calcul, un proces este un program in executie; este deci o entitate activa (dinamica) a sistemului de operare si constituie unitatea de lucru a sistemului.
Intelegerea diferentei intre un program si un proces este importanta. Andrew Tannenbaum, al carui tratat este baza documentarii pentru specialistii in SO, foloseste o analogie pentru sesizarea acestei diferente. Sa consideram un savant care coace un tort pentru aniversarea fiicei sale. Are reteta tortului si o bucatarie utilata si aprovizionata cu tot ce trebuie sa intre in tort: oua, zahar, vanilie etc. In aceasta analogie, savantul este procesorul (CPU=Central Processing Unit), reteta este programul ( ex. un algoritm exprimat intr-o notatie potrivita), ingredientele sunt datele de intrare. Procesul este activitatea savantului de a citi reteta, de a introduce ingredientele , de a coace tortul.
Sa ne inchipuim acum ca fiul savantului vine plangand ca l-a intepat o albina. Savantul intrerupe coacerea tortului inregistrand repede unde a ajuns in reteta (starea procesului curent este salvata), cauta o carte de prim ajutor (trece la un proces prioritar cu alt program), si aplica instructiunile gasite in ea. Cand primul ajutor a fost dat, savantul se intoarce la coacerea tortului si o continua de unde a intrerupt-o.
Ideea este ca un proces este o activitate de un anumit fel, cu un program, intrare, iesire, stare etc. Este posibil ca un singur procesor sa fie impartit la mai multe procese, cu ajutorul unui algoritm care sa determine cand sa fie oprit procesul curent si sa fie derulat altul.
Un proces este instanta de executie a unui cod. Se utilizeaza si denumirea engleza de task (sarcina).
Spatiul de adresa a unui proces cuprinde:
-segmentul de cod care contine imaginea executabila a programului si este de tip RO (Read Only) si partajat de mai multe procese;
-segmentul de date care contine date alocate dinamic sau static de catre proces; nu este partajat si nici accesibil altor procese; consta din:
-zona de date
-zona de rezervari (date neinitializate)
-zona de alocare dinamica;
-segmentul de stiva care nu este partajat si creste antrenat in momentul epuizarii cantitatii de memorie pe care o are la dispozitie.
Threadul, numit si fir de executie, este o subunitate a procesului, utilizat in unele SO.
2. Starea procesului
Intr-un sistem de calcul, un proces poate fi in diferite stari: pregatit, rulare, blocat, terminat
Cand procesul este introdus in calculator, este in SISTEM (de obicei fisier sau un grup de fisiere pe un disc). Apoi planificatorul pe termen lung il ia si-l introduce in coada de asteptare READY si atunci procesul este PREGATIT. Planificatorul pe termen scurt UC, conform unui algoritm de planificare , il introduce in UC. Procesul este in RULARE. De aici, exista trei posibilitati:
-procesul s-a sfarsit si, dupa rularea in UC, trece in starea TERMINAT;
-daca algoritmul folosit este preemptiv (de exemplu time-sharing , cu timp partajat), daca dupa o cuanta de timp el mai are de rulat, este trecut din nou in coada de asteptare READY in starea PREGATIT;
-daca in timpul rularii are nevoie de o resursa externa (de obicei I/O), procesul este trecut in starea BLOCAT. Dupa ce i s-a alocat resursa, trece din nou in starea PREGATIT.
1Planificatorul pe
termen lung
5 32 Planificatorul pe
termen scurt (UC)
4
6
Fig. Diagrama starilor unui proces.
Daca un proces este blocat temporar, el va trebui repornit mai tarziu din exact aceeasi stare in care se gasea cand a fost oprit. In acest scop, toate informatiile despre proces trebuiesc salvate.
Unui proces i se asociaza de obicei o structura numita BCP (Bloc Control Proces), un descriptor de proces.
In mod frecvent, descriptorii tuturor proceselor aflate in aceeasi stare sunt inlantuiti in cate o lista. Vom avea o lista de procese in starea PREGATIT, una in starea BLOCAT etc.
Fig 3.2. Structura BCP a unui proces.
3. Comutarea proceselor
Tranzitia intre doua procese active intr-un SO multitasking se numeste comutarea proceselor (proces switch) si are loc ca raspuns la un eveniment din sistem. Comutarea proceselor implica un cost (overhead) important datorita frecventei cu care are loc in sistem si poate influenta performantele acestuia.
Eficienta operatiei de comutare a proceselor poate fi crescuta prin prevederea unor facilitati hard (seturi de registre multiple) sau printr-o modalitate de structurare a procesului (thread). Un thread (fir de executie) este o subunitate a procesului, o diviziunea a sa. Fiecare thread reprezinta un flux separat de executie si este caracterizat prin propria sa stiva si prin stari hard (registre, flaguri).
Scopul principal al crearii threadului este reducerea costului de comutare a proceselor. De vreme ce toate celelalte resurse, cu exceptia procesorului, sunt gestionate de procesul care le inglobeaza, comutarea intre threadurile care apartin aceluiasi proces implica doar salvarea starii hard si restaurarea stivei. Bineinteles, comutarea intre threadurile care apartin unor procese diferite implica acelasi cost de comutare.
Threadurile sunt un mecanism eficient de exploatare a concurentei programelor.
Un program poate fi impartit in mai multe parti.
Spatiu utilizator
Executie proces PX
Eveniment ce duce
la comutare
Salvarea starii hard in
BCPX si actualizarea
starii procesului PX in
BCPX .
[ SCRIEREA EVENIMENTULUI]
Planificarea urmatorului
Proces PY. Restaurarea
starii hard din BCPY .
Executie proces PY
Fig.3.3 Schema de comutare a proceselor.
4. Crearea si terminarea proceselor
In marea majoritate a sistemelor de operare un proces poate fi creat, in mod dinamic, de catre alt proces. De obicei un proces parinte creeaza un proces fiu. In aceasta modalitate de creare, exista mai multe posibilitati in dualitatea parinte-fiu:
-cele doua procese executa, in mod independent, nesincronizat, acelasi cod, avand aceeasi stiva si acelasi segment de date;
-fiul executa alt segment de cod decat cel al parintelui, nesincronizat;
-parintele si fiul isi sincronizeaza activitatea in sensul ei ori se executa intai parintele si apoi fiul sau invers.