Sistemi operativi: manuale pratico/Introduzione ai sistemi operativi/File system linux

Indice del libro

Sistemi operativi: manuale pratico/Introduzione ai sistemi operativi/File system linux

File (o archivio) modifica

Un file e' un contenitore di dati in formato elettronico

Filename modifica

Il nome di un file puo' essere una sequenza di caratteri qualunque (eccetto: / " ' * ; ? [ ] ( )   ! $    # @ & ) Se il nome di un file inizia con il carattere "." il file e' nascosto Non esiste (formalmente) l'estensione di un file; esistono estensioni utilizzate per scopi specifici

File path modifica

Il path (assoluto o relativo) di un file e' una stringa di nomi di directory separate da "/" che indica in modo univoco la posizione di un file all'interno di un file-system

Codifica dei caratteri modifica

I codici standard per la codifica dei caratteri sono:

  • Extended ASCII (American Standard Code for Information Interchange): composto da 255 caratteri
  • Unicode (implementato come UCS o UTF): composto da 110000 caratteri

File di testo modifica

Un file di testo è un file i cui bit sono organizzati a gruppi (8, 16, ...) ognuno dei quali rappresenta caratteri (lettere, numeri, ...) di un codice (ASCII o Unicode)

File binario modifica

Un file binario è un file i cui bit (singolarmente o a gruppi) possono rappresentare qualunque tipo di dati (anche non caratteri); i file binari necessitano di applicazioni in grado di interpretare il loro contenuto; i file binari sono più compatti dei file di testo (non sono codificati)

Serializzazione modifica

La serializzazione e' un processo di traduzione di una struttura (e.g.: "struct" in C) in un formato tale per cui la memorizzazione e la trasmissione della struttura avvenga come un'unica entità (e non come oggetto composto da entità diverse)

Parametri di un file-system modifica

I parametri di un file-system sono:

  • efficienza: velocità nel localizzare un file
  • convenienza: semplicità per un utente di identificare i propri file
  • organizzazione: raggruppamento delle informazioni in base alle caratteristiche

Directory (direttorio) modifica

Una directory e' un nodo (di un albero) o un vertice (di un grafo) contenente file e informazioni riguardanti tali file

File-system a un livello modifica

Un file-system a un livello e' un file-system in cui tutti i file sono contenuti in un'unica directory

  • vantaggi: efficienza (semplice)
  • svantaggi: convenienza (filename univoci), organizzazione (gestione multi utente complessa)

File-system a due livelli modifica

Un file-system a un livello e' un file-system in cui ogni utente ha una propria directory

  • vantaggi: efficienza (semplice)
  • svantaggi: convenienza parziale (filename univoci per ogni utente), organizzazione parziale (ogni utente ha solo la sua home)

File-system ad albero modifica

Un file-system ad albero e' un file-system in cui ogni directory puo' contenere come entry altre directory

  • vantaggi: convenienza (filename diversi solo nella stessa directory), organizzazione (a discrezione dell'utente)
  • svantaggi: efficienza parziale (ricerche pi\`{u} lunghe)

File-system a grafo modifica

Un file-system a grafo e' un file-system in cui ogni directory puo' contenere come entry: altre directory o link ad altri file (Linux non consente link a directory per evitare cicli)

  • vantaggi: convenienza (filename diversi solo nella stessa directory), organizzazione (a discrezione dell'utente), condivisione di file e directory (tramite i link)
  • svantaggi: efficienza (ricerche pi\`{u} lunghe e gestione di eventuali cicli complessa)

Link (collegamento) modifica

Un link e' un riferimento (puntatore) ad un'altra entry preesistente; un file viene eliminato quando viene eliminato il suo ultimo link (occorre memorizzare un contatore del numero di link)

Allocazione modifica

L'allocazione e' il processo attraverso il quale il SO riserva una parte della memoria per la memorizzazione di un file

Allocazione contigua modifica

L'allocazione contigua e' una tecnica di allocazione in cui ogni file occupa blocchi di memoria contigui; per memorizzare un file e' necessario specificare l'indirizzo del primo blocco e la dimensione del file

Prestazioni modifica

Le prestazioni dell'allocazione contigua sono:

  • vantaggi: tecnica semplice (per memorizzare un file sono necessari solo 2 parametri), permette accessi sequenziali immediati, permette accessi diretti semplici (tramite offset)
  • svantaggi: politica di allocazione complessa e mai efficiente (frammentazione esterna, si creano "buchi"), problemi di allocazione dinamica (la dimensione del file non può aumentare liberamente)

Allocazione concatenata modifica

L'allocazione concatenata e' una tecnica di allocazione in cui ogni file occupa blocchi di memoria organizzati in una lista concatenata (ogni blocco contiene un puntatore al blocco successivo); per memorizzare un file e' necessario specificare l'indirizzo del primo e dell'ultimo blocco

Prestazioni modifica

Le prestazioni dell'allocazione concatenata sono:

  • vantaggi: permette allocazione dinamica di file, elimina la frammentazione esterna
  • svantaggi: efficiente solo per accessi sequenziali (non per accessi diretti), spazio per memorizzazione puntatori, poco affidabile (se si perde un puntatore si butta tutto)

File Allocation Table (FAT) modifica

La FAT e' una tabella di puntatori a blocchi di memoria; la FAT e' molto lenta perché per la lettura di un blocco di memoria sono necessari   accessi alla memoria

Allocazione indicizzata modifica

L'allocazione indicizzata e' una tecnica di allocazione in cui per ogni file esiste un blocco di memoria che contiene l'elenco dei puntatori ai blocchi che compongono il file; per memorizzare un file e' necessario specificare i suoi puntatori; per leggere un file e' necessario specificare il puntatore al blocco indice

Prestazioni modifica

Le prestazioni dell'allocazione indicizzata sono:

  • vantaggi: permette allocazione dinamica di file, elimina la frammentazione esterna, permette accesso diretto efficiente, affidabile
  • svantaggi: gestione dei blocchi indice (e.g.: inode)

Inode modifica

L'inode e' un blocco di memoria (nei sistemi Unix/linux) associato ad ogni file che contiene tutte le informazioni relative a quel file; l'inode contiene   puntatori diretti a blocchi dati del file;   puntatori indiretti a blocchi dati del file; con questa tecnica e' possibile memorizzare file di dimensione pari a   

Puntatore indiretto modifica

Un puntatore indiretto e' un puntatore che punta ad un blocco di memoria che contiene puntatori a blocchi dati

Hard link modifica

Un hard link e' una directory entry che punta all'inode di un file; un file e' fisicamente rimosso quando tutti i suoi hard link sono stati rimossi Non e' possibile creare hard link: verso directory e verso file memorizzati su altri file-system

Soft link modifica

Un soft link e' una directory entry che contiene il path name di un file (cioe' il percorso della entry che punta all'inode del file)