Datotečni sistem UNIX


LINUX podpira sočasno uporabo več vrst  datotečnih sistemov. To transparentnost doseže z uvedbo  "vmesnega, virtualnega sistema VFS (Virtual File System).

LINUX:  podrobnosti o datotečnih sistemih

Strukture datotečnega sistema UNIX prikazuje spodnja slika. Del teh struktur je rezidenčnih na disku, nekatere pa so v primarnem pomnilniku.

LINUX: Opis vsake odprte datoteke
LINUX: Opis datotek, ki jih ima odprte dani proces.

Na posameznem disku imamo več področij. Na začetku je normalno zagonski blok (bootstrap block). Ta vsebuje programsko kodo (zagonski nalagalnik, bootstrap loader), ki jo računalnik bere in nato izvede ob svojem zagonu.
 
 
struct ext2_super_block {
  unsigned long  s_inodes_count; 
  unsigned long  s_blocks_count; 
  unsigned long  s_r_blocks_count; 
  unsigned long  s_free_blocks_count;
  unsigned long  s_free_inodes_count;
  unsigned long  s_first_data_block;
  unsigned long  s_log_block_size;
  long           s_log_frag_size;
  unsigned long  s_blocks_per_group;
  unsigned long  s_frags_per_group;
  unsigned long  s_inodes_per_group;
  unsigned long  s_mtime;
  unsigned long  s_wtime;
  unsigned short s_mnt_count;
  short          s_max_mnt_count;
  unsigned short s_magic;
  unsigned short s_state;
  unsigned short s_errors;
  unsigned short s_pad;
  unsigned long  s_lastcheck;
  unsigned long  s_checkinterval;
  unsigned long  s_reserved[238];
};
Temu sledi super-blok, ki določa stanje datotečnega sistema. Pove velikost sistema, koliko datotek lahko pomnimo, kje je še prostor na disku. 

V superbloku so tudi podatki o geometriji diska (število glav, cilindrov,..), glava seznama i-vozlov in seznam prostih blokov. 

Na levi strani je struktura super-bloka za primer operacijskega sistema LINUX 

Podrobnosti o strukturi super-blok. 

Sledijo podatki o datotekah. Ti so spet shranjeni v dveh strukturah. Prva je seznam i-vozlov (inode list), Drugo pa predstavlja skupek podatkovnih blokov.
 
 
Podatkovna struktura i-vozel vsebuje podatke o lastništvu in zaščiti datoteke, o času zadnjega dostopa in spremembe datoteke, pa tudi o tem, kje se nahajajo podatkovni bloki datoteke. Kot že rečeno, lahko vsaki datoteki ustreza več imen, ki so z vezmi (links) navezana na datoteko preko i-vozla. Imena datotek so pomnjena v direktorijih, ki so tudi datoteke. 

Linux: Podrobnosti strukture i-vozla   (VFS)
Linux: Podrobnosti strukture i-vozla   (ext2)


 
Kako pridemo iz i-vozla do podatkov v sami datoteki. Pri kratkih datotekah imamo direktno naslavljanje podatkovnih blokov, pri daljših pa indirektno, indirektno-indirektno ali celo preko trojne indirekcije. 
 

 

Zaradi večje učinkovitosti hrani sistem kopijo i-vozlov tudi v primarnem pomnilniku. Ta kopija ima še nekaj dodatnih informacij in sicer:

Ali je blok zaklenjen,
Ali čaka kakšen proces na ta (zaklenjeni) blok,
Ali se kopija i-vozla razlikuje od originalnega i-vozla,
Logično številko enote, na kateri se nahaja datoteka,
Številko i-vozla (originalni i_vozel tega nima, je element polja na disku),
Kazalce na ostale pomnilniške (in core) i-vozle,
Števec, kolikokrat je dana datoteka v danem trenutku odprta.

Poleg tega ima jedro tu še dva tipa podatkovnih struktur. Za vsak proces formira tabelo opisnikov datotek (User file descriptor table, UFD). Ta tabela vsebuje po en element za vsako datoteko, ki jo proces odpre ali tvori. Vsaka UFD ima najmanj tri elemente, ki ustrezajo standardnemu vhodu, standardnemu izhodu in standardnemu izhodu za obvestila o napakah. Poleg tega vzdržuje sistem še globalno tabelo datotek.

Vloga podatkovnih struktur pri stavku read( )