This shows you the differences between two versions of the page.
so:laboratoare:resurse:recapitulare [2019/05/27 21:09] liza_elena.babu |
so:laboratoare:resurse:recapitulare [2022/03/14 18:02] (current) teodor_stefan.dutu [Exerciții] Rework exercise 1 |
||
---|---|---|---|
Line 3: | Line 3: | ||
Laboratorul constă în subiecte în stilul celor de la examen, însoțite de mici bucăți de cod complete sau aproape complete pe care le puteți rula pentru a vă convinge. Discuția pe marginea subiectelor cu asistentul sau cu colegii este încurajată. Subiectele sunt suficient de multe încât nu pot fi acoperite într-un singur laborator. | Laboratorul constă în subiecte în stilul celor de la examen, însoțite de mici bucăți de cod complete sau aproape complete pe care le puteți rula pentru a vă convinge. Discuția pe marginea subiectelor cu asistentul sau cu colegii este încurajată. Subiectele sunt suficient de multe încât nu pot fi acoperite într-un singur laborator. | ||
===== Exerciții ===== | ===== Exerciții ===== | ||
- | Utilizați arhiva {{:so:laboratoare:resurse:recap.tar.gz| recap.tar.gz}} aferentă laboratorului. | ||
- | - Demand-paging, Copy-on-Write. Intrați în directorul ''01-cow-dp''. | + | - Demand-paging, Copy-on-Write. Intrați în directorul ''01-cow''. |
- | * Rulați comanda:<code> | + | * Rulați comanda ''make'' și rulați executabilul creat: ''cow''. |
- | make && make run | + | * **Explicați** când au loc evenimentele de Demand-paging și de Copy-on-Write. |
- | </code> | + | * De ce scrierea efectuată de procesul copil în paginile alocate de părinte dureaza mult mai mult decât citirile? |
- | * **Explicați** apariția evenimentelor de Demand-paging și de Copy-on-Write. | + | |
- | * Pentru testare, utilizați fișierele: ''fault/fault'' și ''fault2/fault''. | + | |
- | * De ce la ultima pagină din buffer (din fișierul ''fault/fault'') nu se mai face Demand-paging? | + | |
- | * **Hints**: | + | |
- | * paginile **gri** reprezintă pagini muliple nemapate reprezentate într-un interval | + | |
- | * paginile **verzi** reprezintă pagini ce aparțin unui singur proces | + | |
- | * paginile **roșii** sunt pagini partajate de cel puțin două procese | + | |
- | * la **click** pe o pagină se centrează pagina respectivă și toate paginile legate de ea | + | |
- | * după ce a a apărut un eveniment de tipul Copy-on-Write **un** click duce la pagina la care este mapată acum, **următorul** click va duce la pagina veche la care era mapată | + | |
- Subsistemul IO. Intraţi în directorul ''02-io'' şi inspectaţi fişierul ''splice.c''. | - Subsistemul IO. Intraţi în directorul ''02-io'' şi inspectaţi fişierul ''splice.c''. | ||
* Închipuiţi-vă scenariul în care programul rulează repede şi un alt scenariu în care rulează greu (din punctul de vedere al timpului). | * Închipuiţi-vă scenariul în care programul rulează repede şi un alt scenariu în care rulează greu (din punctul de vedere al timpului). | ||
* **Hints**: | * **Hints**: | ||
* Ce operaţii se fac la trunchierea fişierului? | * Ce operaţii se fac la trunchierea fişierului? | ||
- | * Care este rolul fişierului [[http://www.linuxinsight.com/proc_sys_vm_drop_caches.html | /proc/sys/vm/drop_caches]] | + | * Care este rolul fişierului [[http://www.linuxinsight.com/proc_sys_vm_drop_caches.html | /proc/sys/vm/drop_caches]]? |
* Ce fel de mecanism implementează apelul de sistem ''splice''? | * Ce fel de mecanism implementează apelul de sistem ''splice''? | ||
* **Atenţie**: Asigurați-vă că sistemul dispune de suficientă memorie (RAM) liberă pentru a putea aduce tot fișierul în RAM (i.e. dimensiunea memorie liberă > dimensiunea fișierului). | * **Atenţie**: Asigurați-vă că sistemul dispune de suficientă memorie (RAM) liberă pentru a putea aduce tot fișierul în RAM (i.e. dimensiunea memorie liberă > dimensiunea fișierului). | ||
* Utilizaţi scriptul ''run.sh'': <code>sudo ./run.sh</code> | * Utilizaţi scriptul ''run.sh'': <code>sudo ./run.sh</code> | ||
* **Ignoraţi mesajul**:<code>Command terminated by signal 13</code> | * **Ignoraţi mesajul**:<code>Command terminated by signal 13</code> | ||
- | - Threads counter (LD): Un proces crează N thread-uri și un thread apelează fork(); câte threaduri, atât în procesul părinte cât și în procesul copil, există imediat după acest moment? Studiați conținutul directorului ''03-threads-counter''.În ce director din ''/proc/$PID/'' se află informațiile despre thread-urile procesului? De ce acestea au asignat un pid? | + | - Threads counter (LD): Un proces crează N thread-uri și un thread apelează fork(); câte threaduri, atât în procesul părinte cât și în procesul copil, există imediat după acest moment? Studiați conținutul directorului ''03-threads-counter''. În ce director din ''/proc/$PID/'' se află informațiile despre thread-urile procesului? De ce acestea au asignat un pid? |
- Function hijacking (LD): De ce în cazul folosirii LD_PRELOAD se pot intercepta apeluri de funcții? Intrați în directorul ''04-functions-hijacking'', compilați (''make'') și rulați (''./test'' și ''LD_PRELOAD=./libnative.so ./test''. Cum explicați output-ul diferit? | - Function hijacking (LD): De ce în cazul folosirii LD_PRELOAD se pot intercepta apeluri de funcții? Intrați în directorul ''04-functions-hijacking'', compilați (''make'') și rulați (''./test'' și ''LD_PRELOAD=./libnative.so ./test''. Cum explicați output-ul diferit? | ||
- Inițializări (VD): Intrați în directorul ''05-init''. Compilați programul ''initializari''. De ce durează mai mult prima inițializare? De asemenea, încercați să explicați dimensiunea mare a executabilului. | - Inițializări (VD): Intrați în directorul ''05-init''. Compilați programul ''initializari''. De ce durează mai mult prima inițializare? De asemenea, încercați să explicați dimensiunea mare a executabilului. |