This shows you the differences between two versions of the page.
so:cursuri:curs-03 [2015/03/11 00:14] adrian_mihai.iosif [Informații despre schimbările de context] |
so:cursuri:curs-03 [2019/03/02 09:07] (current) razvan.deaconescu |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Curs 03 - Procese ====== | ====== Curs 03 - Procese ====== | ||
- | <html> | + | /* |
- | <iframe src="http://prezi.com/embed/q-s8q3mrycz5/?bgcolor=ffffff&lock_to_path=0&autoplay=no&autohide_ctrls=0&features=undefined&disabled_features=undefined" width="550" height="400" frameBorder="0"></iframe> | + | * [[http://prezi.com/q-s8q3mrycz5/so-curs-3/?kw=view-q-s8q3mrycz5&rc=ref-31844697|Curs 03 - Procese (vizualizare Prezi)]] |
- | </html> | + | */ |
+ | * [[http://elf.cs.pub.ro/so/res/cursuri/SO%20-%20Curs%2003%20-%20Procese.pdf|Curs 03 - Procese (PDF)]] | ||
- | * [[http://prezi.com/q-s8q3mrycz5/so-curs-3/?kw=view-q-s8q3mrycz5&rc=ref-31844697 | Curs 03 - Procese (vizualizare Prezi)]] | + | * [[https://docs.google.com/document/d/1m5viP2CYF9P-ETMFPogiPsV1c8MlrFOAdBZVNemGNNY/edit?usp=sharing|Notițe de curs]] |
- | * [[http://elf.cs.pub.ro/so/res/cursuri/SO_Curs-03.pdf | Curs 03 - Procese (PDF)]] | + | |
* Suport curs | * Suport curs | ||
Line 20: | Line 20: | ||
* Capitolul 6 - Process Management | * Capitolul 6 - Process Management | ||
* Capitolul 11 - Interprocess Communication | * Capitolul 11 - Interprocess Communication | ||
+ | |||
+ | /* | ||
+ | <html> | ||
+ | <center> | ||
+ | <iframe src="https://prezi.com/embed/q-s8q3mrycz5/?bgcolor=ffffff&lock_to_path=0&autoplay=no&autohide_ctrls=0&features=undefined&disabled_features=undefined" width="550" height="400" frameBorder="0"></iframe> | ||
+ | </center> | ||
+ | </html> | ||
+ | */ | ||
+ | |||
+ | <html> | ||
+ | <center> | ||
+ | <iframe src="https://docs.google.com/viewer?url=https://elf.cs.pub.ro/so/res/cursuri/SO%20-%20Curs%2003%20-%20Procese.pdf&embedded=true" width="600" height="480" style="border: none;"> | ||
+ | </iframe> | ||
+ | </center> | ||
+ | </html> | ||
+ | |||
===== Demo-uri ===== | ===== Demo-uri ===== | ||
Line 114: | Line 130: | ||
cat /proc/$(pidof cpu)/status | cat /proc/$(pidof cpu)/status | ||
</code> | </code> | ||
- | Observăm că se modifică preponderent valoarea câmpului ''nonvoluntary_ctxt_switches''. Acest lucru se întâmplă pentru că avem un proces CPU-bound. Acesta va consuma timp de procesor ori de câte ori prinde ocazia și va fi dat afară în majorir la expirarea cuantei (nu face operații blocante). Un astfel de proces poartă numele de //CPU hog//. | + | Observăm că se modifică preponderent valoarea câmpului ''nonvoluntary_ctxt_switches''. Acest lucru se întâmplă pentru că avem un proces CPU-bound. Acesta va consuma timp de procesor ori de câte ori prinde ocazia și va fi dat afară în majoritar la expirarea cuantei (nu face operații blocante). Un astfel de proces poartă numele de //CPU hog//. |
Apoi rulăm executabilul ''io'':<code bash> | Apoi rulăm executabilul ''io'':<code bash> | ||
Line 129: | Line 145: | ||
Pentru a urmări comportamentului cursorului de fișier (//file pointerului//) vom folosi directorul ''fork-file-pointer/'' din arhiva cu demo-uri a cursului. | Pentru a urmări comportamentului cursorului de fișier (//file pointerului//) vom folosi directorul ''fork-file-pointer/'' din arhiva cu demo-uri a cursului. | ||
- | Vom parcurge fișierul ''fork-file-pointer.c''. Obserăm că același descriptor de fișier este folosit și de procesul copil și de procesul părinte. Vrem să vedem dacă aceste două procese partajează cursorul de fișier. | + | Vom parcurge fișierul ''fork-file-pointer.c''. Observăm că același descriptor de fișier este folosit și de procesul copil și de procesul părinte. Vrem să vedem dacă aceste două procese partajează cursorul de fișier. |
Pentru început compilăm programul folosind comanda:<code bash> | Pentru început compilăm programul folosind comanda:<code bash> | ||
Line 175: | Line 191: | ||
watch -n 1 ps -f -C zombie | watch -n 1 ps -f -C zombie | ||
</code> | </code> | ||
- | Observă,m trecerea procesului copil în starea //zombie//; în ieșirea comenzii ''ps'' apare șirul ''<defunct>''. Observăm eliminarea procesului //zombie// după așteptarea sa de procesul părinte. | + | Observăm trecerea procesului copil în starea //zombie//; în ieșirea comenzii ''ps'' apare șirul ''<defunct>''. Observăm eliminarea procesului //zombie// după așteptarea sa de procesul părinte. |
Un proces este //zombie// pentru că reține niște informație reziduală legată de modul în care și-a încheiat execuția; această informație reziduală este utilă procesului părinte. În momentul în care procesul părinte citește această informație reziduală folosind un apel din familia ''wait'', procesul copil, acum //zombie//, își încheie complet execuția și dispare din sistem. | Un proces este //zombie// pentru că reține niște informație reziduală legată de modul în care și-a încheiat execuția; această informație reziduală este utilă procesului părinte. În momentul în care procesul părinte citește această informație reziduală folosind un apel din familia ''wait'', procesul copil, acum //zombie//, își încheie complet execuția și dispare din sistem. |