Differences

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

Link to this comparison view

so:teme:tema-4 [2022/03/10 15:10]
ionut.mihalache1506
so:teme:tema-4 [2022/12/07 23:20] (current)
ionut.mihalache1506 [FAQ]
Line 1: Line 1:
-<​hidden>​ +====== Planificator de threaduri ======
-====== ​Tema 4 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 12: 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 80: 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 174: 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 181: 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 193: 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 219: 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
  
-===== Materiale ajutătoare =====+ 
 +<​note>​Depunctările nu au caracter obligatoriu pentru orice greșeală (oricât de mică) și nu se aplică de mai multe ori. O eventuală depunctare va apărea o singură dată chiar dacă în codul vostru „problema” apare de mai multe ori</​note>​ 
 +===== Materiale ajutătoare ​suplimentare ​=====
  
 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)]]
  
 ===== FAQ ===== ===== FAQ =====
Line 237: 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 =====
-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ă.+Pentru întrebări sau nelămuriri legate de temă folosiți [[https://​curs.upb.ro/2022/​mod/​forum/​view.php?​id=76308|forumul temei]]. ​
  
 <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>​
-</​hidden>​ 
  
so/teme/tema-4.1646917836.txt.gz · Last modified: 2022/03/10 15:10 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