Differences

This shows you the differences between two versions of the page.

Link to this comparison view

so:teme:tema-4 [2021/05/05 20:54]
ionut.mihalache1506 [Suport, întrebări și clarificări]
so:teme:tema-4 [2022/12/07 23:20] (current)
ionut.mihalache1506 [FAQ]
Line 1: Line 1:
-====== ​Tema 4 Planificator de threaduri ======+====== Planificator de threaduri ======
  
  
 <note important>​ <note important>​
-  ​* Dată publicare: **05.05.2021** +  * <​html><​b>​Deadline</​b></​html>:​ **15.12.2022, ora 23:55**
-  ​* <​html><​b><​span style="​color:​blue;"​>​Deadline</​span></​b></​html>:​ **18.05.2021,​ ora 23:55** +
-  * <​html><​b><​span style="​color:​red;">​Deadline hard</​span>​</​b></​html>:​ **25.05.2021, ora 23:55**+
 </​note>​ </​note>​
  
Line 11: Line 9:
  
   *Aprofundarea următoarelor noțiuni:   *Aprofundarea următoarelor noțiuni:
-    *threaduri POSIX și WINDOWS+    *threaduri POSIX
     *planificarea proceselor/​threadurilor     *planificarea proceselor/​threadurilor
     *mecanisme de sincronizare între threaduri     *mecanisme de sincronizare între threaduri
Line 79: Line 77:
   *nu mai are instrucțiuni de executat.   *nu mai are instrucțiuni de executat.
  
-Pentru mai multe detalii despre algoritmi de planificare puteți consulta [[so:​cursuri:​curs-04|cursul 4]].+Pentru mai multe detalii despre algoritmi de planificare ​și fire de execuție ​puteți consulta [[so:​cursuri:​curs-04|aici]] sau [[https://​github.com/​open-education-hub/​operating-systems/​tree/​master/​content/​chapters/​compute/​lecture/​slides|aici]].
  
 ==== Stări threaduri: ==== ==== Stări threaduri: ====
Line 173: Line 171:
 </​code>​ </​code>​
  
-===== Precizări ​Linux =====+===== Precizări =====
  
 Identificatorul întors de funcția ''​so_fork''​ trebuie să fie structura ''​pthread_t''​ populată de funcția POSIX ''​pthread_create()''​. Identificatorul întors de funcția ''​so_fork''​ trebuie să fie structura ''​pthread_t''​ populată de funcția POSIX ''​pthread_create()''​.
Line 180: Line 178:
  
 Tema se va rezolva folosind fire de execuție POSIX și exclusiv mecanisme de sincronizare a firelor de execuție POSIX (mutex, variabile de condiție, semafoare și oricare altele suportate de API-ul POSIX). Tema se va rezolva folosind fire de execuție POSIX și exclusiv mecanisme de sincronizare a firelor de execuție POSIX (mutex, variabile de condiție, semafoare și oricare altele suportate de API-ul POSIX).
- 
-===== Precizări Windows ===== 
-Pe lângă mecanismele de sincronizare învățate la laborator, aveți voie să folosiți și [[http://​msdn.microsoft.com/​en-us/​library/​windows/​desktop/​ms682052(v=vs.85).aspx|variabile de condiție]]. 
- 
-Identificatorul întors de funcția ''​so_fork''​ trebuie să fie cel întors de funcția ''​GetCurrentThreadId()''​ apelată în contextul threadului nou creat. 
- 
-Tema se va rezolva folosind doar funcții Win32. Se pot folosi de asemenea și funcțiile de formatare printf, scanf, funcțiile de alocare de memorie malloc, free și funcțiile de manipulare a șirurilor de caractere (strcat, strcmp, etc.) 
  
 ===== Utile ===== ===== Utile =====
Line 192: Line 183:
  
 ===== Testare ===== ===== Testare =====
-  *Corectarea temelor se va realiza automat cu ajutorul unor suite de teste publice: https://​github.com/​systems-cs-pub-ro/​so/​tree/​master/​assignments/​4-scheduler+  *Corectarea temelor se va realiza automat cu ajutorul unor suite de teste publice: https://​github.com/​systems-cs-pub-ro/​so/​tree/​2022-2023/​teme/​assignments/​2-scheduler/
   *Pentru evaluare și corectare tema va fi uploadată folosind [[https://​elf.cs.pub.ro/​vmchecker/​ui | interfața vmchecker]].   *Pentru evaluare și corectare tema va fi uploadată folosind [[https://​elf.cs.pub.ro/​vmchecker/​ui | interfața vmchecker]].
-  *În urma compilării temei trebuie să rezulte o bibliotecă shared-object (Linux) denumită ''​libscheduler.so''​ sau o bibliotecă dinamică (Windows) denumită ''​libscheduler.dll''​.+  *În urma compilării temei trebuie să rezulte o bibliotecă shared-object (Linux) denumită ''​libscheduler.so''​.
     *În urma rulării testelor, se va acorda, în mod automat, un punctaj total. Punctajul total maxim este de 90 de puncte, pentru o temă care trece toate testele. La acest punctaj se adaugă 10 puncte care reprezintă aprecierea temei de către asistentul care o corectează.     *În urma rulării testelor, se va acorda, în mod automat, un punctaj total. Punctajul total maxim este de 90 de puncte, pentru o temă care trece toate testele. La acest punctaj se adaugă 10 puncte care reprezintă aprecierea temei de către asistentul care o corectează.
     *Cele 100 de puncte corespund la 10 puncte din cadrul notei finale.     *Cele 100 de puncte corespund la 10 puncte din cadrul notei finale.
   *Pot exista penalizări în caz de întârzieri sau pentru neajunsuri de implementare sau de stil. Ca excepție, pot apărea depunctări mai mari de 1 pct, în cazul în care tema trece teste prin "​hackuri"​ în implementare (ex: sincronizări cu sleep, threadurile nu rulează peste threaduri reale din sistem, etc).   *Pot exista penalizări în caz de întârzieri sau pentru neajunsuri de implementare sau de stil. Ca excepție, pot apărea depunctări mai mari de 1 pct, în cazul în care tema trece teste prin "​hackuri"​ în implementare (ex: sincronizări cu sleep, threadurile nu rulează peste threaduri reale din sistem, etc).
-  * **Testul 0** din cadrul checker-ului temei verifică automat coding style-ul surselor voastre. Ca referință este folosit [[https://​www.kernel.org/​doc/​Documentation/​process/​coding-style.rst | stilul de coding din kernelul Linux]]. Acest test valorează 5 puncte din totalul de 100. Pentru mai multe informații despre un cod de calitate citiți [[http://​ocw.cs.pub.ro/​courses/​so/​laboratoare/​resurse/​c_tips | pagina de recomandări]].+  * **Testul 0** din cadrul checker-ului temei verifică automat coding style-ul surselor voastre. Ca referință este folosit [[https://​www.kernel.org/​doc/​Documentation/​process/​coding-style.rst | stilul de coding din kernelul Linux]]. Acest test nu modifică punctajul total, este acolo pentru a vă ajuta să vă organizați codul.
  
 <note important>​ <note important>​
Line 218: Line 209:
   * alte depunctări pentru implementări greșite, ce nu respectă cerința generală a temei   * alte depunctări pentru implementări greșite, ce nu respectă cerința generală a temei
  
-<​hidden>​ 
-===== Concurs Bitdefender ===== 
-Pentru participarea la concursul organizat de către Bitdefender,​ tema trebuie să fie implementată pe **ambele** platforme (Linux și Windows) și să ia **punctaj maxim** pe VMChecker (95 puncte) pentru fiecare platformă în parte, iar deadline-ul de trimitere este deadline-ul soft al temei (**03.05.2020,​ ora 23:55**). 
  
-Pentru a desemna câștigătorii, vom ține cont de modul de implementare al temei, analizând codul sursă. O listă cu **posibile** criterii de departajare:​ +<​note>​Depunctările nu au caracter obligatoriu pentru orice greșeală (oricât ​de mică) și nu se aplică de mai multe oriO eventuală depunctare va apărea singură dată chiar dacă în codul vostru „problema” apare de mai multe ori</​note>​ 
-  * modularitatea codului (o singură arhivă, alegerea platformei la compilare - ex. folosirea directivelor de preprocesare ''#​ifdef __WIN32''​) +===== Materiale ajutătoare ​suplimentare ​=====
-  * fișier de configurare/​parametrizare a planificatorului (într-un format agreat de voi: raw, JSON, XML etc.) +
-  * posibilitatea de activare a unei componete de history ​și/sau logging (un fișier în care se vor păstra informații despre thread-urile care au fost create/​și-au încheiat rularea, despre posibilele erori etc.; fișierul ​de logging/​history să aibă un număr maxim de intrări - vezi comportament bash history) +
-  * termenul de submisie (temele submise cât mai rapid) +
-  * implementare eficientă din punctul de vedere al timpului +
-  * posibilitatea configurării altor algoritmi de planificare,​ alții decât round-robin. +
- +
-<note warning>​ +
-**Atenție!** Implicit, trebuie să ruleze algoritmul round-robin,​ iar arhiva urcată pe VMChecker trebuie să ruleze algoritmul de planificare corespunzător cerințelor temei (round-robin). Alți algoritmi de planificare nu vor trece testele de pe VMChecker, trebuie să vă faceți ​suită de câteva teste pentru a verifica funcționalitatea algoritmilor de planificare. +
-</​note>​ +
- +
-Lista de criterii de departajare este **orientativă**, nu este obligatoriu să implementați toate criteriile. De asemenea, puteți veni voi cu propuneri și feature-uri noi pentru a îmbunătăți tema. Pentru fiecare feature implementat ​în afara cerințelor temei, trebuie să scrieți în fișierul ''​README''​ aferent temei numele feature-ului și descrierea implementării,​ precum și cum poate fi testat. +
- +
-<note warning>​ +
-**Atenție!** Criteriile propuse NU au teste speciale în suita de teste pusă la dispoziție. Trebuie să vă creați voi propriile teste pentru a verifica funcționalitatea. +
-</note+
- +
-</hidden+
-===== Materiale ajutătoare =====+
  
 Cursuri: Cursuri:
-  *[[so:​cursuri:​curs-04|Curs 4]] - Planificarea execuției +  *[[so:​cursuri:​curs-04|Curs 4 (Old but gold)]] - Planificarea execuției 
-  *[[so:​cursuri:​curs-08|Curs 8]] - Fire de execuție +  *[[so:​cursuri:​curs-08|Curs 8 (Old but gold)]] - Fire de execuție 
-  *[[so:​cursuri:​curs-09|Curs 9]] - Sincronizare+  *[[so:​cursuri:​curs-09|Curs 9 (Old but gold)]] - Sincronizare
  
 Laboratoare:​ Laboratoare:​
-  *[[so:​laboratoare:​laborator-08|Laborator 8]] +  *[[so:​laboratoare:​laborator-08|Laborator 8 (Old but gold)]] 
-  *[[so:​laboratoare:​laborator-09|Laborator 9]]+  *[[so:​laboratoare:​laborator-09|Laborator 9 (Old but gold)]]
  
-<​hidden>​ 
-<note important>​ 
-Resursele temei se găsesc și în repo-ul [[https://​github.com/​systems-cs-pub-ro/​so-assignments|so-assignments]] de pe GitHub. Repo-ul conține și un script Bash care vă ajută să vă creați un repository privat pe instanța de [[https://​gitlab.cs.pub.ro|GitLab]] a facultății. Urmăriți indicațiile din README și de pe [[:​so:​teme:​folosire-gitlab| pagina de Wiki dedicată pentru git]]. 
- 
-În plus, responsabilii de teme se pot uita mai rapid pe [[https://​gitlab.cs.pub.ro|GitLab]] la temele voastre în cazul în care aveți probleme/​bug-uri. Este mai ușor să primiți suport în rezolvarea problemelor implementării voastre dacă le oferiți responsabililor de teme acces la codul sursă pe [[https://​gitlab.cs.pub.ro|GitLab]]. 
- 
-**Dacă ați folosit [[https://​gitlab.cs.pub.ro|GitLab]] pentru realizarea temei, indicați în README link-ul către repository. Asigurați-vă că responsabilii de teme au drepturi de citire asupra repo-ului vostru**. 
-</​note>​ 
-</​hidden>​ 
 ===== FAQ ===== ===== FAQ =====
  
Line 268: Line 229:
   ***Q:** Este permisă modificarea header-ului?​   ***Q:** Este permisă modificarea header-ului?​
     ***A:** Nu.      ***A:** Nu. 
 +
 +  ***Q:** Putem să folosim structuri de date neimplementate de noi (luate de pe net sau din alte laboratoare,​ etc.) în rezolvarea temei?
 +    ***A:** Da, cu mențiunea ca implementarea acestora să fie în fișiere separate de implementarea temei pentru a face verificarea antiplagiat mai „sigură” pentru voi (este mai simplu să nu luăm acele fișiere în calcul pentru că ele vor avea o șansă mult mai mare să fie considerate copiat).
 +
 +  ***Q:** Scheletul este format doar din fișiere header?
 +    ***A:** Da, orice alte fișiere de care aveți nevoie va trebui să le adăugați voi. Pentru Makefile puteți să folosiți ca exemplu tema/temele anterioare.
 ===== Suport, întrebări și clarificări ===== ===== Suport, întrebări și clarificări =====
-<​hidden>​ +Pentru întrebări sau nelămuriri legate de temă folosiți [[https://​curs.upb.ro/2022/​mod/​forum/​view.php?​id=76308|forumul temei]]. ​
-Pentru întrebări sau nelămuriri legate de temă folosiți ​[[:​so:​info:​lista-discutii|lista de discuții]] sau [[https://acs.curs.pub.ro/2019/​mod/​forum/​view.php?​id=17770|pe forumul ​dedicat ​temei]]. Pe forum am creat 2 topicuri: 1 dedicat enuntului si 1 dedicat strict infrastructurii unde vreau sa centralizam neclaritatile legate de aceste 2 subiecte necesare realizarii temei. Pentru orice alta problema puteti deschide thread nou sau puteti pune intrebarea pe mailing list! +
-</​hidden>​ +
-Pentru întrebări sau nelămuriri legate de temă folosiți [[https://​curs.upb.ro/​mod/​forum/​view.php?​id=289292|forumul temei]]. Recomandăm să căutați eventuale întrebări și în arhiva [[:​so:​info:​lista-discutii|listei de discuții]],​ poate veți găsi ceea ce căutați până veți primi un răspuns din partea noastră.+
  
 <note important>​ <note important>​
-Orice intrebare pe forum **trebuie** să conțină o descriere cât mai clară a eventualei probleme. Întrebări de forma: "Nu merge X. De ce?" fără o descriere mai amănunțită vor primi un răspuns mai greu.+Orice intrebare pe forum **trebuie** să conțină o descriere cât mai clară a eventualei probleme. Întrebări de forma: "Nu merge X. De ce?" fără o descriere mai amănunțită vor primi un răspuns mai greu. Înainte să postați o întrebare pe forum citiți și celelalte întrebări(dacă există) pentru a vedea dacă întrebarea voastră a fost deja adresată sub o altă formă(în cazul în care răspunsul din partea echipei vine mai greu este mai rapid să căutați voi deja printre întrebările existente).
  
 **ATENȚIE** să nu postați imagini cu părți din soluția voastră pe forumul pus la dispoziție sau orice alt canal public de comunicație. Dacă veți face acest lucru, vă asumați răspunderea dacă veți primi copiat pe temă. **ATENȚIE** să nu postați imagini cu părți din soluția voastră pe forumul pus la dispoziție sau orice alt canal public de comunicație. Dacă veți face acest lucru, vă asumați răspunderea dacă veți primi copiat pe temă.
 </​note>​ </​note>​
  
so/teme/tema-4.1620237254.txt.gz · Last modified: 2021/05/05 20:54 by ionut.mihalache1506
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0