Curs 12 - Implementarea sistemelor de fișiere

  • Suport curs
    • Operating System Concepts Essentials
      • Capitolul 10: File-System Implementation
        • Secțiunile 10.1 – 10.8
    • Modern Operating Systems
      • Capitolul 6: File Systems
        • Secțiunile 6.3, 6.4

Demo-uri

Pentru parcurgerea demo-urilor, folosiți arhiva aferentă.

  1. Folosiți comanda stat pentru a afișa informații despre inode-ul corespunzător unui fișier, director, link simbolic, char device, block device:
    stat /etc/passwd
    stat /usr/lib/
    stat /usr/bin/cc
    stat /dev/null
    stat /dev/loop0
    • Afișați informații despre un socket Unix, după ce îl căutați în ierarhia /var/run/:
      sudo find /var/run -type s
      sudo stat /var/run/udev/control
    • Aflați dimensiunea fișierului /sbin/init folosind stat:
      stat -c %s /sbin/init
    • Urmăriți modificările timpilor de acces pe fișier (access time, modify time, change time) folosind comenzile de mai jos:
      cd /tmp
      touch a.txt
      stat a.txt
      cat a.txt
      stat a.txt
      chmod a+rw a.txt
      stat a.txt
      echo "abc" > stat.txt
      stat a.txt
      • access time este timpul de acces al fișierului, deschis pentru citire.
      • modify time este timpul de modificare a datelor fișierului.
      • change time este timpul de modificare a metadatelor fișierului (informații din inode).
  2. Creați un fișier simplu și urmăriți numărul de link-uri ale acestuia:
    cd /tmp
    touch first.txt
    ls -i first.txt
    ls -l first.txt
    • A doua coloana de la rularea ls -l este numărul de link-uri, inițial 1.
    • Creați un fișier ca hard link la primul:
      ln first.txt second.txt
    • Observați că inode-ul este același iar numărul de link-uri este egal cu doi:
      ls -i first.txt second.txt
      ls -l first.txt second.txt
    • Creați un al treilea link și observați numărul de link-uri egal cu 3:
      ln second.txt third.txt
      ls -i first.txt second.txt third.txt
      ls -l first.txt second.txt third.txt
    • Ștergeți primele două link-uri/nume și obsevați păstrarea inode-ului și reducerea numărului de link-uri la 1 pentru ultimul nume:
      unlink first.txt
      rm second.txt
      ls -i third.txt
      ls -l third.txt
      • unlink și rm pot fi folosite interschimbabil.
  3. Urmăriți numărul de link-uri/nume aferente unui director gol. Numărul este 2: un link este numele efectiv al directorului, iar altul este referința '.' (punct, dot) către director însuși:
    cd /tmp
    mkdir /tmp/test-d
    ls -ld /tmp/test-d
    • Creați un subdirector al directorului /tmp/test-d/. Numărul de link-uri va crește la 3, cu ajutorul referinței '..' (punct punct, dot dot) de la subdirector:
      mkdir /tmp/test-d/test-subd
      ls -ld /tmp/test-d
    • Creați un subfișier al directorul /tmp/test-d/. Numărul de link-uri nu se va modifica, întrucât fișierul nu are o referință la directorul părinte:
      touch /tmp/test-d/test-f
      ls -ld /tmp/test-d
  4. Creați un director simplu și vedeți ce spațiu ocupă pe disc, folosind comanda stat:
    cd /tmp
    mkdir /tmp/fill-d
    stat -c %s /tmp/fill-d
    • Copiați scriptul create-long-filenames din arhivă și rulați-l în directorul proaspăt creat:
      cd /tmp/fill-d
      # TODO: copy script
      ./create-long-filenames
    • Observați conținutul directorului și noua dimensiune a acestuia:
      ls -l /tmp/fill-d
      stat -c %s /tmp/fill-d
      • Dimensiunea directorului a crescut datorită numărului de intrări în director.
      • Dimensiunea directorului este multiplu de dimensiunea blocului sistemului.
  5. Citirea intrărilor dintr-un director; simularea comenzii ls
    • Intrați în directorul 5-dirent/.
    • Consultați fișierul dirent.c.
    • Compilați fișierul folosind comanda make.
    • Rulați executabilul obținut dându-i ca argument un director:
      ./dirent tmp
      ./dirent /usr
      ./dirent /var/run
      ./dirent /usr/lib
      • Observați afișarea intrărilor și a tipului acestora.
      • Structura struct dirent reține informațiile legate de o intrare dintr-un director.
    • Un director este, pe disc, un inode ale cărui bloc-uri conține un vector de intrări asemănătoare cu struct dirent.
      • Intrările sunt citite de pe disc folosind apelul readdir, similar folosirii apelului read pentru fișiere.
      • La fel ca fișierele obișnuite (regular files) și directoarele folosesc intern un cursor de fișier care este actualizat după fiecare apel readdir.
so/cursuri/curs-12.txt · Last modified: 2019/05/11 15:36 by razvan.deaconescu
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