This shows you the differences between two versions of the page.
so:teme:tema-3 [2022/11/06 18:08] ionut.mihalache1506 |
so:teme:tema-3 [2022/11/08 19:41] (current) ionut.mihalache1506 [Resurse de suport] |
||
---|---|---|---|
Line 2: | Line 2: | ||
<note important> | <note important> | ||
- | * <html><b>Deadline</b></html>: **21.11.2022, ora 23:55** | + | * <html><b>Deadline</b></html>: **24.11.2022, ora 23:55** |
</note> | </note> | ||
Line 123: | Line 123: | ||
===== Precizări/recomandări pentru implementare ===== | ===== Precizări/recomandări pentru implementare ===== | ||
- | * Implementarea //page fault// handler-ului se realizează prin intermediul unei [[http://www.kernel.org/doc/man-pages/online/pages/man2/sigaction.2.html | rutine pentru tratarea semnalului SIGSEGV]] sau a unui [[http://msdn.microsoft.com/en-us/library/ms681420(v=vs.85).aspx | handler de excepție]]. | + | * Implementarea //page fault// handler-ului se realizează prin intermediul unei [[http://www.kernel.org/doc/man-pages/online/pages/man2/sigaction.2.html | rutine pentru tratarea semnalului SIGSEGV]]. |
* Pentru a implementa logica de //demand paging// trebuie să interceptați page fault-urile produse în momentul unui acces nevalid la o zonă de memorie. La interceptarea page fault-urilor, tratați-o corespunzător, în funcție de segmentul din care face parte: | * Pentru a implementa logica de //demand paging// trebuie să interceptați page fault-urile produse în momentul unui acces nevalid la o zonă de memorie. La interceptarea page fault-urilor, tratați-o corespunzător, în funcție de segmentul din care face parte: | ||
* dacă nu este într-un segment cunoscut, rulați handler-ul default; | * dacă nu este într-un segment cunoscut, rulați handler-ul default; | ||
Line 143: | Line 143: | ||
* Tema se va rezolva folosind doar funcții POSIX. Se pot folosi de asemenea și funcțiile de citire/scriere cu formatare (''scanf''/''printf''), funcțiile de alocare/eliberare de memorie (''malloc''/''free'') și funcțiile de lucru cu șiruri de caractere (''strcat'', ''strdup'' etc.) | * Tema se va rezolva folosind doar funcții POSIX. Se pot folosi de asemenea și funcțiile de citire/scriere cu formatare (''scanf''/''printf''), funcțiile de alocare/eliberare de memorie (''malloc''/''free'') și funcțiile de lucru cu șiruri de caractere (''strcat'', ''strdup'' etc.) | ||
* Pentru partea de I/O se vor folosi doar funcții POSIX. De exemplu, funcțiile ''fopen'', ''fread'', ''fwrite'', ''fclose'' nu trebuie folosite; în locul acestora folosiți ''open'', ''read'', ''write'', ''close''. | * Pentru partea de I/O se vor folosi doar funcții POSIX. De exemplu, funcțiile ''fopen'', ''fread'', ''fwrite'', ''fclose'' nu trebuie folosite; în locul acestora folosiți ''open'', ''read'', ''write'', ''close''. | ||
+ | * Un exemplu de asociere a unui handler de tratare a unui semnal este prezentat mai jos: | ||
+ | |||
+ | <code c> | ||
+ | #include <signal.h> | ||
+ | ... | ||
+ | |||
+ | /* SIGUSR2 handler */ | ||
+ | static void usr2_handler(int signum) { | ||
+ | /* actions that should be taken when the signal signum is received */ | ||
+ | ... | ||
+ | } | ||
+ | |||
+ | int main(void) { | ||
+ | struct sigaction sa; | ||
+ | |||
+ | memset(&sa, 0, sizeof(sa)); | ||
+ | |||
+ | sa.sa_flags = SA_RESETHAND; /* restore handler to previous state */ | ||
+ | sa.sa_handler = usr2_handler; | ||
+ | sigaction(SIGSEGV, &sa, NULL); | ||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | </code> | ||
Line 156: | Line 180: | ||
* În urma rulării testelor, se va acorda, în mod automat, un punctaj total. Punctajul total maxim este de 95 de puncte, pentru o temă care trece toate testele. La acest punctaj se adaugă 5 puncte din oficiu. | * În urma rulării testelor, se va acorda, în mod automat, un punctaj total. Punctajul total maxim este de 95 de puncte, pentru o temă care trece toate testele. La acest punctaj se adaugă 5 puncte din oficiu. | ||
* Cele 100 de puncte corespund la 10 puncte din cadrul notei finale. | * Cele 100 de puncte corespund la 10 puncte din cadrul notei finale. | ||
- | * **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 puncte din totalul de 100 însă ajută la o organizare mai bună a codului. Pentru mai multe informații (dacă este nevoie) despre un cod de calitate citiți [[http://ocw.cs.pub.ro/courses/so/laboratoare/resurse/c_tips | pagina de recomandări]]. |
<note important> | <note important> | ||
- | Înainte de a [[https://vmchecker.cs.pub.ro | uploada]] tema, asigurați-vă că implementarea voastră trece testele pe [[http://ocw.cs.pub.ro/courses/so/info/mv | mașinile virtuale]]. Dacă apar probleme în rezultatele testelor, acestea se vor reproduce și pe [[https://vmchecker.cs.pub.ro | vmchecker]]. | + | Înainte de a [[https://vmchecker.cs.pub.ro | uploada]] tema, asigurați-vă că implementarea voastră trece testele pe [[http://ocw.cs.pub.ro/courses/so/info/mv | mașina virtuală de linux]]. Dacă apar probleme în rezultatele testelor, acestea se vor reproduce și pe [[https://vmchecker.cs.pub.ro | vmchecker]] sau pe orice alt mediu de testare solicitat. |
</note> | </note> | ||
Line 166: | Line 190: | ||
* Urmăriți penalizările precizate în cadrul [[http://ocw.cs.pub.ro/courses/so/teme/general#lista_depunctari | listei de depunctări]] | * Urmăriți penalizările precizate în cadrul [[http://ocw.cs.pub.ro/courses/so/teme/general#lista_depunctari | listei de depunctări]] | ||
* În cazuri excepționale (e.g. tema trece testele, însă implementarea este defectuoasă sau incompletă) se pot aplica depunctări suplimentare celor menționate mai sus. | * În cazuri excepționale (e.g. tema trece testele, însă implementarea este defectuoasă sau incompletă) se pot aplica depunctări suplimentare celor menționate mai sus. | ||
+ | * În general nu vă concentrați pe depunctări, nu este scopul nostru să vă dăm note mici, ci doar să vă atenționăm unde lucrurile pot fi făcute mai bine fără a aplica depunctări care să vă afecteze semnificativ nota finală. | ||
===== Resurse de suport ===== | ===== Resurse de suport ===== | ||
- | + | *Partea de curs și laborator care prezintă partea de gestiune a memoriei și memorie virtuală | |
- | *Cursuri | + | *Resursele de mai jos sunt mai vechi și nu trebuie consultate în detaliu pentru rezolvarea temei. Anumite concepte pot să vă fie de folos însă părțile de care aveți nevoie din ele nu reprezintă o parte semnificativă din rezolvarea temei |
- | *[[http://ocw.cs.pub.ro/courses/so/cursuri/curs-05 | Gestiunea memoriei]] | + | *Cursuri (Old but gold) |
- | *[[http://ocw.cs.pub.ro/courses/so/cursuri/curs-06 | Memoria virtuală]] | + | *[[http://ocw.cs.pub.ro/courses/so/cursuri/curs-05 | Gestiunea memoriei]] |
- | *[[http://ocw.cs.pub.ro/courses/so/cursuri/curs-07 | Securitatea memoriei]] | + | *[[http://ocw.cs.pub.ro/courses/so/cursuri/curs-06 | Memoria virtuală]] |
- | *Laboratoare | + | *[[http://ocw.cs.pub.ro/courses/so/cursuri/curs-07 | Securitatea memoriei]] |
- | *[[http://ocw.cs.pub.ro/courses/so/laboratoare/laborator-04 | Semnale]] | + | *Laboratoare (Old but gold) |
- | *[[http://ocw.cs.pub.ro/courses/so/laboratoare/laborator-05 | Gestiunea memoriei]] | + | *[[https://ocw.cs.pub.ro/courses/so/laboratoare/laborator-01] | Creare makefile și biblioteci]] |
- | *[[http://ocw.cs.pub.ro/courses/so/laboratoare/laborator-06 | Memoria virtuală]] | + | *[[http://ocw.cs.pub.ro/courses/so/laboratoare/laborator-04 | Semnale]] |
- | *Operating System Concepts -- Chapter 8 -- Main Memory | + | *[[http://ocw.cs.pub.ro/courses/so/laboratoare/laborator-05 | Gestiunea memoriei]] |
- | *Operating System Concepts -- Chapter 9 -- Virtual Memory | + | *[[http://ocw.cs.pub.ro/courses/so/laboratoare/laborator-06 | Memoria virtuală]] |
+ | *Operating System Concepts -- Chapter 8 -- Main Memory | ||
+ | *Operating System Concepts -- Chapter 9 -- Virtual Memory | ||
*Teste | *Teste | ||
* [[https://github.com/systems-cs-pub-ro/so/tree/2022-2023/teme/assignments/1-loader/checker-lin | Teste Linux]] | * [[https://github.com/systems-cs-pub-ro/so/tree/2022-2023/teme/assignments/1-loader/checker-lin | Teste Linux]] | ||
* Schelet | * Schelet | ||
- | * Directorul [[https://github.com/systems-cs-pub-ro/so/tree/2022-2023/teme/assignments/1-loader]] cu sufixul *-lin* sau *-linux* din [[https://github.com/systems-cs-pub-ro/so/tree/2022-2023/teme/assignments|repo-ul de pe Github]] | + | * Directorul [[https://github.com/systems-cs-pub-ro/so/tree/2022-2023/teme/assignments/1-loader]] din [[https://github.com/systems-cs-pub-ro/so/tree/2022-2023/teme/assignments|repo-ul de pe Github]] |
*[[https://elf.cs.pub.ro/vmchecker/ui | Interfața de upload vmchecker]] | *[[https://elf.cs.pub.ro/vmchecker/ui | Interfața de upload vmchecker]] | ||
- | *[[https://curs.upb.ro/mod/forum/view.php?id=259918|forumul temei]] | + | *[[https://curs.upb.ro/2022/mod/forum/view.php?id=76307|forumul temei]] |
*[[https://en.wikipedia.org/wiki/Executable_and_Linkable_Format| Formatul fișierelor executabile pe Linux (ELF)]] | *[[https://en.wikipedia.org/wiki/Executable_and_Linkable_Format| Formatul fișierelor executabile pe Linux (ELF)]] | ||
Line 201: | Line 228: | ||
===== 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/2021/mod/forum/view.php?id=210901|forumul temei]]. | + | Pentru întrebări sau nelămuriri legate de temă folosiți [[https://curs.upb.ro/2022/mod/forum/view.php?id=76307|forumul temei]]. |
<note important> | <note important> |