forked from andreyciupitu/thread-scheduler
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathREADME
37 lines (27 loc) · 1.67 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Tema #4 SO
Ciupitu Andrei-Valentin, 332CC
------------------------- Detalii de implementare -----------------------------
Pentru implementarea scheduler-ului am folosit un vector pentru a retine
thread-urile pornite, precum si o coada de prioritati pentru a alege urmatorul
thread.
Coada de prioritati am implementat-o printr-un vector sortat, in care
thread-urile sunt retinute in ordinea crescatoare a prioritatilor, astfel
incat thread-ul cu cea mai mare prioritate se afla la coada vectorului.
Atunci cand un thread este planificat el este scos din coada de prioritati,
iar thread-ul care a fost preemptat este readaugat in coada, daca nu s-a blocat
sau terminat.
Pentru sincronizarea thread-urilor, fiecare thread are asociat un semafor,
folosit pentru a semnaliza daca thread-ul poate rula.
La apelul so_fork, se aloca o noua structura thread si se porneste un nou
thread. Se adauga apoi noul thread in coada de prioritati, si se apeleaza
functia de update a scheduler-ului. Thread-ul nou asteapta la semaforul
corespunzator permisiunea de a rula, pentru a apela handler-ul.
La apelul so_exec se scade tumpul ramas si apoi se apeleaza scheduler-ul.
Thread-ul va astepta apoi la semaforul propriu permisiunea de a rula.
La so_wait se seteaza statusul thread-ului ca blocat si apoi se apeleaza
scheduler-ul si se asteapta la semafor.
La so_signal se cauta in vectorul de thread-uri toate thread-urile care
asteapta la device-ul dat ca argument. Acestea sunt trecute in starea READY si
adaugate in coada. Se apeleaza apoi scheduler-ul si se asteapta la semafor.
La apelul so_end se asteapta mai intai ca toate thread-urile sa treaca in
starea TERMINATED, si apoi se da join si se elibereaza memoria.