This shows you the differences between two versions of the page.
so:laboratoare:laborator-08 [2021/02/28 09:26] teodor_stefan.dutu [Materiale ajutătoare] Eliminare slide-uri |
so:laboratoare:laborator-08 [2022/05/02 17:25] (current) daniel.dosaru [Tipuri de fire de execuție] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Laborator 08 - Thread-uri Linux ====== | + | ====== Laborator 08 - Threaduri Linux ====== |
Line 22: | Line 22: | ||
===== Prezentare teoretică ===== | ===== Prezentare teoretică ===== | ||
- | În laboratoarele anterioare a fost prezentat conceptul de **proces**, acesta fiind unitatea elementară de alocare a resurselor utilizatorilor. În cadrul acestui laborator este prezentat conceptul de **fir de execuție** (sau **thread**), acesta fiind unitatea elementară de planificare într-un sistem. Ca și procesele, firele de execuție reprezintă un mecanism prin care un calculator poate sǎ ruleze mai multe task-uri simultan. | + | În laboratoarele anterioare a fost prezentat conceptul de **proces**, acesta fiind unitatea elementară de alocare a resurselor utilizatorilor. În cadrul acestui laborator este prezentat conceptul de **fir de execuție** (sau **thread**), acesta fiind unitatea elementară de planificare într-un sistem. Ca și procesele, firele de execuție reprezintă un mecanism prin care un calculator poate să ruleze mai multe task-uri simultan. |
- | Un fir de execuție există în cadrul unui proces, și reprezintă o unitate de execuție mai fină decât acesta. În momentul în care un proces este creat, în cadrul lui există un singur fir de execuție, care execută programul secvențial. Acest fir poate la rândul lui sǎ creeze alte fire de execuție; aceste fire vor rula porțiuni ale binarului asociat cu procesul curent, posibil aceleași cu firul inițial (care le-a creat). | + | Un fir de execuție există în cadrul unui proces, și reprezintă o unitate de execuție mai fină decât acesta. În momentul în care un proces este creat, în cadrul lui există un singur fir de execuție, care execută programul secvențial. Acest fir poate la rândul lui să creeze alte fire de execuție; aceste fire vor rula porțiuni ale binarului asociat cu procesul curent, posibil aceleași cu firul inițial (care le-a creat). |
==== Diferențe dintre fire de execuție și procese ==== | ==== Diferențe dintre fire de execuție și procese ==== | ||
Line 69: | Line 69: | ||
__Dezavantaje__ : | __Dezavantaje__ : | ||
- | *comutarea contextului este efectuată de kernel (cu o viteză de comutare mai mică): | + | *comutarea contextului este efectuată de kernel (cu o viteză de comutare mai mare): |
*se trece dintr-un fir de execuție în kernel | *se trece dintr-un fir de execuție în kernel | ||
*kernelul întoarce controlul unui alt fir de execuție. | *kernelul întoarce controlul unui alt fir de execuție. | ||
Line 1022: | Line 1022: | ||
- | ====== Exerciţii de laborator ====== | + | ====== Exerciţii ====== |
- | + | ||
- | + | ||
- | ===== Linux ===== | + | |
<note important> | <note important> | ||
În cadrul laboratoarelor vom folosi repository-ul de git al materiei SO - https://github.com/systems-cs-pub-ro/so. Va trebui sa clonați repository-ul pe masinile virtuale folosind comanda: ''git clone https://github.com/systems-cs-pub-ro/so''. Dacă doriți să descărcați repositoryul în altă locație, folosiți comanda ''git clone https://github.com/systems-cs-pub-ro/so ${target}''. | În cadrul laboratoarelor vom folosi repository-ul de git al materiei SO - https://github.com/systems-cs-pub-ro/so. Va trebui sa clonați repository-ul pe masinile virtuale folosind comanda: ''git clone https://github.com/systems-cs-pub-ro/so''. Dacă doriți să descărcați repositoryul în altă locație, folosiți comanda ''git clone https://github.com/systems-cs-pub-ro/so ${target}''. | ||
- | Pentru a actualiza repository-ul, folosiți comanda ''git pull origin master'' din interiorul directorului în care se află repository-ul. Recomandarea este să îl actualizați cât mai frecvent, înainte să începeți lucrul, pentru a vă asigura că aveți versiunea cea mai recentă. | + | Pentru a actualiza repository-ul, folosiți comanda ''git pull origin master'' din interiorul directorului în care se află repository-ul. Recomandarea este să îl actualizați cât mai frecvent, înainte să începeți lucrul, pentru a vă asigura că aveți versiunea cea mai recentă. În cazul în care gitul detectează conflicte la nivelul vreunui fişier, folosiți următoarele comenzi pentru a vă păstra modificările: |
+ | <code> | ||
+ | git stash | ||
+ | git pull origin master | ||
+ | git stash pop | ||
+ | </code> | ||
Pentru mai multe informații despre folosirea utilitarului git, urmați ghidul de la https://gitimmersion.com. | Pentru mai multe informații despre folosirea utilitarului git, urmați ghidul de la https://gitimmersion.com. | ||
</note> | </note> | ||
- | <note tip> Pentru a vă ajuta la implementarea exercițiilor din laborator, în directorul ''utils'' din arhivă există un fișier ''utils.h'' cu funcții utile. </note> | + | <note tip> |
+ | Pentru a vă ajuta la implementarea exercițiilor din laborator, în directorul ''utils'' din arhivă există un fișier ''utils.h'' cu funcții utile. | ||
+ | </note> | ||
+ | |||
+ | ===== Linux ===== | ||
<note>Pentru a instala paginile de manual pentru 'pthreads' | <note>Pentru a instala paginile de manual pentru 'pthreads' | ||
Line 1234: | Line 1240: | ||
*/ | */ | ||
- | ===== Soluții ===== | ||
- | [[http://elf.cs.pub.ro/so/res/laboratoare/lab08-sol.zip | lab08-sol.zip]] | ||
===== Resurse utile ===== | ===== Resurse utile ===== | ||