Skip to content

skyplane23/thread-scheduler

 
 

Repository files navigation

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.

About

A small thread scheduler simulator

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 93.4%
  • Shell 6.0%
  • Makefile 0.6%