Vai al contenuto

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

Wikibooks, manuali e libri di testo liberi.
Indice del libro

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

File (o archivio)

[modifica | modifica sorgente]

Un file e' un contenitore di dati in formato elettronico

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

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 | modifica sorgente]

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 | modifica sorgente]

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 | modifica sorgente]

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 | modifica sorgente]

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 | modifica sorgente]

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 | modifica sorgente]

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 | modifica sorgente]

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 | modifica sorgente]

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 | modifica sorgente]

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 | modifica sorgente]

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)
[modifica | modifica sorgente]

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)

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

Allocazione contigua

[modifica | modifica sorgente]

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

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 | modifica sorgente]

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

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 | modifica sorgente]

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 | modifica sorgente]

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

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)

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 | modifica sorgente]

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

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

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)