Differences

This shows you the differences between two versions of the page.

Link to this comparison view

so:laboratoare:laborator-12 [2020/04/18 11:09]
dragos_florin.costea [Schimbarea directorului rădăcina al unui proces]
so:laboratoare:laborator-12 [2022/05/29 20:59] (current)
maria.mihailescu [Înainte de laborator: Feedback] Fix date
Line 1: Line 1:
 ====== Laborator 12 - Implementarea sistemelor de fișiere ====== ====== Laborator 12 - Implementarea sistemelor de fișiere ======
  
-===== Materiale Ajutătoare ===== 
- 
-  * [[http://​elf.cs.pub.ro/​so/​res/​laboratoare/​lab12-slides.pdf | lab12-slides.pdf]] 
  
 ===== Nice to read =====  ===== Nice to read ===== 
Line 30: Line 27:
   * [[#​dirname_si_basename|dirname și basename]]   * [[#​dirname_si_basename|dirname și basename]]
  
 +===== Înainte de laborator: Feedback =====
 +
 +Pentru a îmbunătăți cursul de SO, componentele sale și modul de desfășurare,​ ne sunt foarte utile opiniile voastre. Pentru aceasta, vă rugăm să accesați și completați formularul de feedback de pe site-ul [[https://​curs.upb.ro|curs.upb.ro]]. Trebuie să fiți autentificați și înrolați în cadrul cursului.
 +
 +Formularul este anonim și este activ în perioada 23 mai 2022 - 3 iunie 2022. Rezultatele vor fi vizibile în cadrul echipei cursului doar după încheierea sesiunii. Este accesibil la link-ul "​Formular feedback"​ a paginii principale a cursului de SO al seriei voastre pe [[https://​curs.upb.ro|curs.upb.ro]]. **Nu** este în meta-cursul disponibil tuturor seriilor.
 +
 +Vă invităm să evaluați activitatea echipei de SO și să precizați punctele tari și punctele slabe și sugestiile voastre de îmbunătățire a disciplinei. Feedback-ul vostru ne ajută să creștem calitatea materiei în anii următori și să îmbunătățim disciplinele pe care le veți face în continuare.
 +
 +Vom publica la începutul semestrului viitor analiza feedback-ului vostru.
 +
 +Ne interesează în special:
 +
 +  * Ce nu v-a plăcut și ce credeți că nu a mers bine?
 +  * De ce nu v-a plăcut și de ce credeți că nu a mers bine?
 +  * Ce ar trebuie să facem ca lucrurile să fie plăcute și să meargă bine?
  
 ===== Device Nodes ===== ===== Device Nodes =====
Line 137: Line 149:
   * conținutul este diferit: un director conține un vector de nume de fișiere și inode-uri.   * conținutul este diferit: un director conține un vector de nume de fișiere și inode-uri.
  
-===== Link-uri simbolice (soft) =====+===== Link-uri simbolice (soft links) =====
  
 Un //link simbolic// (sau soft link), este un tip special de fișier al cărui conținut reprezintă numele altui fișier. Link-urile simbolice sunt create cu comanda ''​ln -s''​ sau cu apelul [[http://​linux.die.net/​man/​2/​symlink | symlink(2)]] Un //link simbolic// (sau soft link), este un tip special de fișier al cărui conținut reprezintă numele altui fișier. Link-urile simbolice sunt create cu comanda ''​ln -s''​ sau cu apelul [[http://​linux.die.net/​man/​2/​symlink | symlink(2)]]
Line 230: Line 242:
 ===== Rezolvarea unei căi ===== ===== Rezolvarea unei căi =====
  
-Apelul [[http://​man7.org/​linux/​man-pages/​man3/​realpath.3.html | realpath(3)]] dereferențiază link-ul simbolic primit ca argument și rezolvă toate referințele către ​'/​.'​și '/​..'​ pentru a produce un șir de caractere conținând calea absolută.+Apelul [[http://​man7.org/​linux/​man-pages/​man3/​realpath.3.html | realpath(3)]] dereferențiază link-ul simbolic primit ca argument ​în ''​path''​ **și** elimină subşirurile ''/./'', ​''/​../''​ precum şi apariţii în plus ale caracterului ''/'​' pentru a genera o cale absolută ​plasată în parametrul de ieşire ''​realpath''​.
  
-<code c>  char *realpath(const char *path, char *resolved_path);​ </​code>​+Exemplu: Dacă parametrul de intrare ''​path''​ ar fi ''/​home/​madalina/​%%/​%%/​%%/​%%/​so/​tema4/​../​../​seriale/​thewire/''​ , în urma apelului ''​realpath(path,​ resolved_path)'',​ parametrul de ieşire ''​resolved_path''​ devine ''/​home/​madalina/​seriale/​thewire/''​. Presupunem că ierarhia de directoare prezentată în exemplu există deja. 
 + 
 +<code c>  
 +char *realpath(const char *path, char *resolved_path);​ 
 +</​code>​
  
 ===== dirname și basename ===== ===== dirname și basename =====
Line 240: Line 256:
 <code c> <code c>
 char *dirname(char *path); char *dirname(char *path);
- 
 char *basename(char *path); char *basename(char *path);
 </​code>​ </​code>​
Line 257: Line 272:
  
 ====== Exerciții ====== ====== Exerciții ======
 +
 +<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}''​.
 +
 +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.
 +</​note>​
  
 ===== Completare feedback ===== ===== Completare feedback =====
Line 262: Line 290:
 Vă invităm să **evaluați activitatea echipei de SO** și să precizați punctele tari și punctele slabe și sugestiile voastre de îmbunătățire a materiei. Feedback-ul vostru este foarte important pentru noi să creștem calitatea materiei în anii următori și să îmbunătățim materiile pe care le veți face în continuare. Vă invităm să **evaluați activitatea echipei de SO** și să precizați punctele tari și punctele slabe și sugestiile voastre de îmbunătățire a materiei. Feedback-ul vostru este foarte important pentru noi să creștem calitatea materiei în anii următori și să îmbunătățim materiile pe care le veți face în continuare.
  
-<note tip>​Găsiți **formularul de feedback** în partea dreaptă a paginii principale de SO de pe [[https://acs.curs.pub.ro|acs.cs.pub.ro]] într-un frame numit //"​FEEDBACK"//​. Trebuie să fiți înrolați la cursul de SO și să intrati pe pagina asociată seriei voastre (nu pe metaserie), altfel veți primi o eroare de acces.+<note tip>​Găsiți **formularul de feedback** în partea dreaptă a paginii principale de SO de pe [[https://​curs.upb.ro|curs.upb.ro]] într-un frame numit //"​FEEDBACK"//​. Trebuie să fiți înrolați la cursul de SO și să intrati pe pagina asociată seriei voastre ​**(nu pe metaserie)**, altfel veți primi o eroare de acces.
 </​note>​ </​note>​
 Vă mulțumim! Vă mulțumim!
-===== Exercițiul 0 - Joc interactiv ===== 
- 
-  * Detalii desfășurare [[http://​ocw.cs.pub.ro/​courses/​so/​meta/​notare#​joc_interactiv|joc]]. 
  
 ===== Linux ===== ===== Linux =====
  
-<note important>​Pentru rezolvarea laboratorului descărcați arhiva de [[http://​elf.cs.pub.ro/​so/​res/​laboratoare/​lab12-tasks.zip | lab12-tasks.zip]]. ​Codul va fi scris în fișierul ''​mini.c''​ din directorul ''​1-mini/''​. Pentru fiecare exercițiu decomentați linia TODO corespunzătoare. </​note>​ +<note important>​Codul va fi scris în fișierul ''​mini.c''​ din directorul ''​1-mini/''​. Pentru fiecare exercițiu decomentați linia ''​TODO'' ​corespunzătoare. </​note>​
  
  
Line 279: Line 303:
  
 ==== Exercițiul 2 ==== ==== Exercițiul 2 ====
-Implementați comanda ''​list''​ <​device_node>,​ ce va primi ca argument un device node și va afișa pentru acesta tipul (c/b), identificatorii ''​major'',​ respectiv ''​minor''​. Folosiți funcția [[http://​man7.org/​linux/​man-pages/​man2/​stat.2.html | stat(2)]] pentru a obține o structură de tipul ''​struct stat''​ din care veți extrage tipul device-ului (''​st_mode''​) (hint: [[http://​www.gnu.org/​software/​libc/​manual/​html_node/​Testing-File-Type.html#​Testing-File-Type|S_ISCHR,​ S_ISBLK]]) apoi din câmpul ''​st_rdev''​ extrageți [[http://​man7.org/​linux/​man-pages/​man3/​makedev.3.html | major]] și [[http://​man7.org/​linux/​man-pages/​man3/​makedev.3.html |minor]]. Nu uitați să decomentați linia marcată cu // #define TODO2 //+Implementați comanda ''​list''​ <​device_node>,​ ce va primi ca argument un device node și va afișa pentru acesta tipul (c/b), identificatorii ''​major'',​ respectiv ''​minor''​. Folosiți funcția [[http://​man7.org/​linux/​man-pages/​man2/​stat.2.html | stat(2)]] pentru a obține o structură de tipul ''​struct stat''​ din care veți extrage tipul device-ului (''​st_mode''​) (hint: [[http://​www.gnu.org/​software/​libc/​manual/​html_node/​Testing-File-Type.html#​Testing-File-Type|S_ISCHR,​ S_ISBLK]]) apoi din câmpul ''​st_rdev''​ extrageți [[http://​man7.org/​linux/​man-pages/​man3/​makedev.3.html | major]] și [[http://​man7.org/​linux/​man-pages/​man3/​makedev.3.html |minor]]. Nu uitați să decomentați linia marcată cu '' ​#define TODO2 ''​
  
  
 ==== Exercițiul 3 ==== ==== Exercițiul 3 ====
  
-Creați punctul de montare ''/​mnt/​my''​. Ca root, rulați comanda:<​code bash> +Creați punctul de montare ''/​mnt/​my''​. Ca root, în terminalul bash, rulați comanda: 
-mkdir /mnt/my+<code bash> 
 +mkdir /mnt/my
 </​code>​ </​code>​
  
 Parcurgeți paginile de manual ale funcțiilor [[http://​man7.org/​linux/​man-pages/​man2/​mount.2.html|mount]] și [[http://​man7.org/​linux/​man-pages/​man2/​umount.2.html|umount]]. Parcurgeți paginile de manual ale funcțiilor [[http://​man7.org/​linux/​man-pages/​man2/​mount.2.html|mount]] și [[http://​man7.org/​linux/​man-pages/​man2/​umount.2.html|umount]].
  
-Folosiți comenzile ''​mount''​ și ''​umount''​ din executabilul mini pentru a monta discul ​''​/dev/sda1''​ în punctul de montare ''/​mnt/​my''​. Citiți secțiunea marcată cu TODO din fișierul ''​mini.c''​. Pentru argumentul 4 și argumentul 5 al funcției ''​mount''​ folosiți, respectiv, valorile ''​0''​ și ''​NULL''​.+Folosiți comenzile ''​mount''​ și ''​umount''​ din executabilul mini pentru a monta fişierul ​''​my_fs''​ în punctul de montare ''/​mnt/​my''​. Citiți secțiunea marcată cu ''​TODO'' ​din fișierul ''​mini.c''​. Pentru argumentul 4 și argumentul 5 al funcției ''​mount''​ folosiți, respectiv, valorile ''​0''​ și ''​NULL''​.
  
-Testare: Rulați, ca root, comanda:<​code bash>+Testare: Rulați, ​**ca root**, comanda: 
 +<code bash>
 ./mini ./mini
-</​code>​și apoi rulați comanda de montare în cadrul acestui shell:<​code bash> 
-mount /dev/sda1 /mnt/my ext3 
 </​code>​ </​code>​
-Într-o altă consolă, într-un shell obișnuit, verificați rezultatele folosind comanda<​code bash>+ 
 +și apoi rulați comanda de montare în cadrul acestui shell: 
 + 
 +<code bash> 
 +mount /​dev/​mapper/​vgvagrant-root /mnt/my ext4 
 +</​code>​ 
 + 
 +În cazul în care nu lucraţi în maşina virtuală de SO, folosiţi ''/​dev/​sda1''​ în loc de ''/​dev/​mapper/​vgvagrant-root''​. 
 + 
 +Într-o altă consolă, într-un shell obișnuit, verificați rezultatele folosind comanda
 +<code bash>
 cat /​proc/​mounts cat /​proc/​mounts
 </​code>​ </​code>​
Line 309: Line 343:
  
 Pentru testare folosiți, în shell-ul aferent comenzii ''​./​mini'',​ comanda:<​code bash> Pentru testare folosiți, în shell-ul aferent comenzii ''​./​mini'',​ comanda:<​code bash>
-symlink /etc/passwd ​local-passwd+symlink /proc/filesystems ​local-filesystems
 </​code>​ </​code>​
 Ca să verificați,​ într-o altă consolă, în același director cu cel în care ați rulat comanda ''​./​mini'',​ folosiți<​code bash> Ca să verificați,​ într-o altă consolă, în același director cu cel în care ați rulat comanda ''​./​mini'',​ folosiți<​code bash>
Line 315: Line 349:
 </​code>​ </​code>​
 Pentru a șterge symlink-ul folosiți comanda<​code bash> Pentru a șterge symlink-ul folosiți comanda<​code bash>
-unlink local-passwd+unlink local-filesystems
 </​code>​ </​code>​
 Pentru validare rulați din nou comanda<​code bash> Pentru validare rulați din nou comanda<​code bash>
Line 344: Line 378:
  
  
- 
-===== Soluții ===== 
- 
- ​[[http://​elf.cs.pub.ro/​so/​res/​laboratoare/​lab12-sol.zip | Soluții exerciții laborator 12]] 
  
  
so/laboratoare/laborator-12.1587197357.txt.gz · Last modified: 2020/04/18 11:09 by dragos_florin.costea
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0