This shows you the differences between two versions of the page.
so:cursuri:curs-02 [2014/02/21 13:32] razvan.deaconescu |
so:cursuri:curs-02 [2019/04/14 09:08] (current) dragos_florin.costea [Curs 02 - Interfața sistemului de fișiere] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Curs 02 - Sistemul de fișiere ====== | + | ====== Curs 02 - Interfața sistemului de fișiere ====== |
- | <html> | + | * [[http://prezi.com/5-5ua6acyxv9/so-curs-2/?kw=view-5-5ua6acyxv9&rc=ref-31844697 | Curs 02 - Interfața sistemului de fișiere (vizualizare Prezi)]] |
- | <iframe src="http://prezi.com/embed/5-5ua6acyxv9/?bgcolor=ffffff&lock_to_path=0&autoplay=no&autohide_ctrls=0&features=undefined&disabled_features=undefined" width="550" height="400" frameBorder="0"></iframe> | + | * [[http://elf.cs.pub.ro/so/res/cursuri/SO_Curs-02.pdf | Curs 02 - Interfața sistemului de fișiere (PDF)]] |
- | </html> | + | |
- | * [[http://prezi.com/5-5ua6acyxv9/so-curs-2/?kw=view-5-5ua6acyxv9&rc=ref-31844697 | Curs 02 - Sistemul de fișiere (vizualizare Prezi)]] | + | * [[https://docs.google.com/document/d/1kH3Sg8OcW8oMUqsuG1jaicUxUze05vN_2wHaJix3W28/edit?usp=sharing|Notițe de curs]] |
- | * [[http://elf.cs.pub.ro/so/res/cursuri/SO_Curs-02.pdf | Curs 02 - Sistemul de fișiere (PDF)]] | + | |
* Suport curs | * Suport curs | ||
Line 12: | Line 10: | ||
* Capitolul 9 - File-System Interface | * Capitolul 9 - File-System Interface | ||
* Capitolul 10, Secțiunea 10.1 - File-System Structure | * Capitolul 10, Secțiunea 10.1 - File-System Structure | ||
- | * Modern Operating Systems | ||
- | * Capitolul 6 - File System Implementation (secțiunile 1 și 2) | ||
* Linux System Programming | * Linux System Programming | ||
* Capitolul 2 (programatic) | * Capitolul 2 (programatic) | ||
Line 19: | Line 15: | ||
* Capitolul 2 (programatic) | * Capitolul 2 (programatic) | ||
+ | <html> | ||
+ | <center> | ||
+ | <iframe src="https://prezi.com/embed/5-5ua6acyxv9/?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> | ||
===== Demo-uri ===== | ===== Demo-uri ===== | ||
Line 50: | Line 51: | ||
</spoiler> | </spoiler> | ||
+ | <note> | ||
+ | Pe anumite sisteme descriptorul este marcat cu ''0u'' adică este read-write; dar, în mod practic, este folosit doar pentru citire. | ||
+ | </note> | ||
==== Descriptori de fișier pentru procesele daemon ==== | ==== Descriptori de fișier pentru procesele daemon ==== | ||
Line 56: | Line 60: | ||
</code> | </code> | ||
- | Pentru unul dintre procesele daemon descoperite prin rularea comenzii anterioare , afișam tabela de descriptori (e nevoie de drept de ''root'') folosind comanda ''lsof'':<code bash> | + | Pentru unul dintre procesele daemon descoperite prin rularea comenzii anterioare, afișăm tabela de descriptori (e nevoie de drept de ''root'') folosind comanda ''lsof'':<code bash> |
sudo lsof -a -d 0-1023 -p $PID | sudo lsof -a -d 0-1023 -p $PID | ||
</code> | </code> | ||
Line 78: | Line 82: | ||
==== Descriptorii de fișier după redirectare ==== | ==== Descriptorii de fișier după redirectare ==== | ||
- | Vrem să vedem cum se modifică descriptorii de fișier în cazul redicterării. Pentru a putea vedea acest lucru vom rula o comandă de durată (''sleep'') și vom redirecta intrarea și ieșirea standard:<code bash> | + | Vrem să vedem cum se modifică descriptorii de fișier în cazul redirectării. Pentru a putea vedea acest lucru vom rula o comandă de durată (''sleep'') și vom redirecta intrarea și ieșirea standard:<code bash> |
sleep 100 < /etc/passwd > f.txt | sleep 100 < /etc/passwd > f.txt | ||
</code> | </code> | ||
- | Pentru a investiga procesul ''sleep'' proaspăt porni, trebuie să știm PID-ul său. Deschidem o altă consolă și aflăm PID-ul procesului ''sleep'' creat folosind comanda:<code bash> | + | Pentru a investiga procesul ''sleep'' proaspăt pornit, trebuie să știm PID-ul său. Deschidem o altă consolă și aflăm PID-ul procesului ''sleep'' creat folosind comanda:<code bash> |
pidof sleep | pidof sleep | ||
</code> | </code> | ||
- | Vom folosi onstrucția ''$PID'' referă PID-ul procesului ''sleep'' pe care-l investigăm. Ca și până acum, afișam tabela de descriptori de fișier a procesului folosind comanda:<code bash> | + | Vom folosi construcția ''$PID'' referă PID-ul procesului ''sleep'' pe care-l investigăm. Ca și până acum, afișam tabela de descriptori de fișier a procesului folosind comanda:<code bash> |
lsof -a -o -d 0-1023 -p $PID | lsof -a -o -d 0-1023 -p $PID | ||
</code> | </code> | ||
Line 128: | Line 132: | ||
<spoiler Răspuns> | <spoiler Răspuns> | ||
- | Apelul ''ftruncate'' modifică modifică dimensiunea fișierului. Un fișier are un câmp de dimensiune alterat de comanda ''ftruncate''. Acest câmp este diferit de cursorul de fișier. Teoretic cursorul de fișier poate fi plasat dincolo de sfârșitul fișierului. Din acest motiv, apelul ''ftruncate'' nu are nici un efect asupra cursorului de fișier. | + | Apelul ''ftruncate'' modifică dimensiunea fișierului. Un fișier are un câmp de dimensiune alterat de comanda ''ftruncate''. Acest câmp este diferit de cursorul de fișier. Teoretic cursorul de fișier poate fi plasat dincolo de sfârșitul fișierului. Din acest motiv, apelul ''ftruncate'' nu are nici un efect asupra cursorului de fișier. |
Acest lucru este precizat și în [[http://man7.org/linux/man-pages/man2/ftruncate.2.html#DESCRIPTION|secțiunea DESCRIPTION a paginii de manual a apelului ftrunctate]]. | Acest lucru este precizat și în [[http://man7.org/linux/man-pages/man2/ftruncate.2.html#DESCRIPTION|secțiunea DESCRIPTION a paginii de manual a apelului ftrunctate]]. | ||
Line 180: | Line 184: | ||
</code> | </code> | ||
- Rapid, într-o altă consolă, urmărim **apelurile de bibliotecă** realizate de programul ''buffered'' folosind comanda:<code bash> | - Rapid, într-o altă consolă, urmărim **apelurile de bibliotecă** realizate de programul ''buffered'' folosind comanda:<code bash> | ||
- | ltrace -e putchar+fputc -p $(pidof buffered) | + | ltrace -e putchar,fputc -p $(pidof buffered) |
</code> | </code> | ||
Line 187: | Line 191: | ||
./buffered | ./buffered | ||
</code> | </code> | ||
- | - Rapid, într-o altă consolă, urmărim **apelurile de bibliotecă** realizate de programul ''buffered'' folosind comanda:<code bash> | + | - Rapid, într-o altă consolă, urmărim **apelurile de sistem** realizate de programul ''buffered'' folosind comanda:<code bash> |
strace -e write -p $(pidof buffered) | strace -e write -p $(pidof buffered) | ||
</code> | </code> | ||
- | Care este numărul de apeluri de bibliotecă și numărul de apeluri de sistem realizate de programul ''buffered''? | + | Care este numărul de apeluri de bibliotecă și numărul de apeluri de sistem realizate de programul ''buffered'' în cadrul buclelor ''for''? |
<spoiler Răspuns> | <spoiler Răspuns> | ||
Line 201: | Line 205: | ||
</code> | </code> | ||
- | Care este numărul de apeluri de bibliotecă și numărul de apeluri de sistem realizate de programul ''buffered''? | + | Care este numărul de apeluri de bibliotecă și numărul de apeluri de sistem realizate de programul ''system''? |
<spoiler Răspuns> | <spoiler Răspuns> | ||
Line 240: | Line 244: | ||
[[http://www.ibm.com/developerworks/aix/library/au-lsof.html|Finding open files with lsof]] | [[http://www.ibm.com/developerworks/aix/library/au-lsof.html|Finding open files with lsof]] | ||
- |