Sunteți pe pagina 1din 18

Utilizarea Sistemelor

de Operare

2012 - 2017
Conf. dr. ing. Stefan Mocanu
Conf. dr. ing. Mihnea Moisescu Curs 5

Cuprins

1. Fire de executie

2. Stari anormale ale proceselor

3. Planificarea Unitatii Centrale


Fire de executie

Fire de executie
Fire de executie

Thread (cf. Oxford Dictionaries online)


- a long, thin strand of cotton, nylon, or other fibers used
in sewing or weaving;

- a theme or characteristic running throughout a


situation or piece of writing;

- a helical ridge on the outside of a screw, bolt, etc. or


on the inside of a cylindrical hole, to allow two parts to
be screwed together.

Fire de executie

Definitie
Un fir de executie (thread) este cea mai mica entitate sau
secventa de instructiuni care poate fi identificata si gestionata
de sine statator de catre planificatorul UC din fiecare sistem
de operare si executata de catre CPU.

Spre deosebire de procese, un thread poate exista doar in


cadrul unui proces. Din acest motiv, un proces contine
cel putin un fir de executie care foloseste resursele
procesului gazda.
Fire de executie

Proces cu un singur thread = proces single threaded.


Proces cu mai multe threaduri = proces multi threaded.

Thread-ul este considerat un proces de tip light weight


(LWP) si poate fi asemanat cu o procedura care este
executata independent de programul principal al
programului si in paralel cu acesta. De aici, multi-
threading = ???
Lucrul cu mai multe thread-uri ofera posibilitati de prelucrare
paralela (cvasi-paralela in functie de CPU si SO)

Fire de executie
Single threading Multi threading

Solaris
MS-DOS

Solaris,
Unix,
NT, Linux
vechi !

Ref. A
Fire de executie

Prelucrarea paralela este benefica doar in cazul aplicatiilor care se


preteaza la astfel de tehnici !

Gene Amdahl: a demonstrat limitele optimizarii atinse prin paralelizarea


unui program de calculator.

Legea lui Amdahl: Cresterea in viteza a unui program de calculator in


urma paralelizarii acestuia nu poate depasi inversul portiunii din
program ce este pur secventiala.

Exemplu: consideram 50% din program pur secvential; prin


paralelizare (bine facuta !) putem obtine o crestere a vitezei de
maxim 2 ori, indiferent de SO, CPU sau alte considerente HW.
( 1/(50/100) = 100/50 = 2 )

Fire de executie

Pe un sistem cu un singur procesor, mono-nucleu, paralelizarea nu este


reala. In acest context, vorbim de divizarea timpului CPU.
Deservirea se face conform unor algoritmi de planificare.

In cazul sistemelor multiprocesor, paralelizarea este reala pana la un


punct (daca numarul de thread-uri este mai mic decat numarul de
nuclee disponibile). Peste acest prag, intra in actiune planificatorul
unitatii centrale si algoritmii de planificare.
Fire de executie

a=5;

fork() Crearea de procese fiu

T F
a=5; a=5;

a=a+1; a=5;

Fire de executie
Thread kernel
a=5;

P
Thread initial Thread utilizator

c_t1

a=5; P T1

a=a+1; a=6;
Creare de thread-uri
Fire de executie

Thread-urile nu necesita mecanisme de comunicatie speciale.

Fire de executie
Fire de executie

Fire de executie

Caracteristici thread-uri:
- nu sunt independente, pot exista doar in contextul unui proces
- nu au spatiu individual de memorie, partajeaza memoria procesului
gazda;
- nu au spatiu individual de adrese;
- au nevoie de mai putine informatii de stare decat procesele;
- nu au nevoie de mecanisme de comunicatie, au acces comun la
variabilele globale ale procesului gazda;
- necesita mecanisme de sincronizare pentru a evita producerea unor
dezastre
- comutarea intre thread-uri, inchiderea lor rapide
Fire de executie

Tipuri de thread-uri
Thread de tip kernel:
- entitate a kernelului si SO gestionata de programatorul UC;
- ruleaza in cadrul unui proces;
- utilizatorul/programatorul nu o poate controla, lucreaza cu CPU;

Thread de tip utilizator:


- entitate gestionata de programator in scopul implementarii unor
prelucrari paralele;
- ruleaza doar in cadrul unui proces, nu poate interactiona cu alte
procese;
- pot exista mai multe threaduri utilizator intr-un proces.
- legatura intre threadul utilizator si threadul kernel este realizata de
procesorul virtual (PV)

Fire de executie

Modele de threading

N:1 (many to one) - Mai multe thread-uri utilizator sunt mapate catre
un singur thread kernel;
- Kernelul nu suporta multi-threading; acesta este
realizat si gestionat la nivelul utilizatorului;
- Blocarea unui thread => blocarea intregului
proces (program)
- Un thread kernel -> un singur CPU fizic => un
program nu va putea fi executat pe mai multe
procesoare (chiar daca exista !)
Fire de executie

Modele de threading

- Fiecare thread utilizator este mapat catre un


1:1 (one to one) thread kernel si gestionat de acesta;
- Un thread blocat nu atrage dupa sine
blocarea intregului proces;
- Un proces poate fi executat pe mai multe
procesoare fizice;
- Creste efortul de gestionare;
- Din motivul de mai sus, se impun limite
privind nr. maxim de threaduri.

Fire de executie

Modele de threading

M:N (many to many)


- M thread-uri utilizator sunt mapate catre N
thread-uri kernel (N<=M);
- Combinatie intre modelul M:1 si 1:1;
- Se elimina limitarile de nr. max. threaduri
- Nu apare problema blocarii intregului proces;
- Procesele pot fi executate pe mai multe
procesoare fizice.
Fire de executie

Modele de threading

Model hibrid
- Caz particular de model M:N;
- Combinatie intre modelul 1:1 si modelul
M:N;
- Ambele modele pot fi utilizate in functie
de situatie

Fire de executie

Avantaje ale lucrului cu fire de executie


creare rapida si simpla;
nu necesita resurse suplimentare la creare (de gen PID,
memorie, etc);
incheiere mai rapida, nu necesita eliberare de resurse;
comutare rapida intre firele de executie create;
comunicare facila si rapida intre firele de executie
existente datorita sistemului de partajare a resurselor
apartinand procesului
modificarile facute de un fir de executie sunt disponibile
imediat celorlalte fire
Fire de executie

Comparatie intre crearea de procese si crearea de thread-uri

Fire de executie

Dezvantaje ale lucrului cu fire de executie


thread-urile sunt puternic dependente de SO;
thread-urile nu pot fi reutilizate si nici separate de procesul care le-a creat
partajarea resurselor poate duce la o insuficienta a acestora si, implicit, la
imposibilitatea de indeplinire a taskurilor sau incetinirea aplicatiei;
variabilele globale pot fi accesate simultan de mai multe threaduri =>
probleme => necesitatea sincronizarii !
eventuale probleme (in general cele care tin de memoria utilizata) aparute
la un singur thread se pot repercuta asupra tuturor thread-urilor aplicatiei =>
probleme mari !
implementarea de aplicatii secventiale cu ajutorul thread-urilor este foarte
dificila => nerecomandat !
Fire de executie

Sincronizarea firelor de executie


Mutexuri (semafoare mutex) si bariere
- s-a discutat despre ele la cursul anterior !

Variabile conditionale
- nu au valoare propriu-zisa;
- de interes este starea lor, indica aparitia unui eveniment;
- permit blocarea sau deblocarea thread-urilor;
- mai rapide decat mutex-urile pentru ca NU se testeaza
starea lor.

Stari anormale ale proceselor

1. Procese zombie
- s-a discutat despre ele in cursurile anterioare !

2. Interblocari
PUC
P1 P2
X X
Stari anormale ale proceselor

3. Infometare
P1 2
100 P2

10 P3

4 P4

Ref. 0

Stari anormale ale proceselor

4. Bucla infinita
- Cauze ?
- Descrieti in ce situatii ati intalnit aceasta stare anormala

5. Proces blocat
- Procesul inceteaza sa raspunda, insasi inchiderea fortata devine dificila.
- Ex. Windows: Non Responding
Planificarea Unitatii Centrale

Necesitate:

In cazul calculatoarelor de tip multi-tasking si multi-proces planificarea


este necesara pentru a gestiona accesul la resursele HW (in principal
CPU dar nu numai).

In absenta planificarii, procesele ar fi orientate catre un comportament


egoist => alte procese ar fi puse in situatia de a nu putea fi
executate.

De multe ori obiectivele algoritmilor de planificare sunt contradictorii !

Exista foarte multi algoritmi de planificare; depind puternic de HW si SO !

Planificarea Unitatii Centrale

Ce se urmareste prin planificare:

Impartialitate si corectitudine in tratarea proceselor


Eficientizarea ocuparii CPU si sistemului de I/O
Minimizarea timpului de raspuns pentru procesele interactive
Optimizarea timpului mediu de finalizare a unui task
Minimizarea timpului mediu de asteptare
Cresterea numarului de joburi in unitatea de timp.
Planificarea Unitatii Centrale

Exemple de algoritmi de planificare (Ref.0)

1. Shortest Job First

Se bazeaza pe estimarea duratei unui proces. Estimarea se face pe baza


experientelor anterioare. Procesele vor fi executate intr-o ordine data de
durata lor: cel mai scurt va fi executat primul iar cel mai lung ultimul.

Planificarea Unitatii Centrale

FCFS

SJF
Planificarea Unitatii Centrale

2. Shortest Remaining Time Next

Ca si SJF se bazeaza pe estimarea duratei unui proces. In acest caz, dupa


finalizarea procesului curent (in executie) va fi executat procesul caruia i-a
ramas durata de executie minima.

Planificarea Unitatii Centrale

3. Algoritmi bazati pe prioritati

4. Algoritmi tip loterie

. multi multi altii


Bibliografie

A.Tanenbaum & A.Woodhull, Operating Systems Design and


Implementation, 2nd edition, Prentice Hall, 2003
A.Tanenbaum, Modern Operating Systems, 2nd Edition, Prentice Hall,
ISBN: 0130313580, http://www.cs.vu.nl/~ast/books/mos2/ - Ref. 0
Abraham Silberschatz, Peter B. Galvin, Greg Gagne, Operating
Systems Concepts, Ed. Wiley, diverse editii
https://computing.llnl.gov/tutorials/pthreads/
http://www.cs.cf.ac.uk/Dave/C/node29.html#SECTION0029100000000
00000000 Ref. A
http://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/4_Thread
s.html - Ref. B

S-ar putea să vă placă și