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

Sistemi operativi: manuale pratico
Copertina Tutti i moduli · Sviluppo
Introduzione ai sistemi operativi
* Funzioni principali dei sistemi operativi
* Classificazione dei sistemi operativi
* File system linux
Processi
* Introduzione
* Segnali
* Inter-process communication
* Thread
* Sincronizzazione
* Shell
Comandi linux
* Comandi shell
* Script di shell
* AWK
* Strumenti di programmazione
* Comandi POSIX
Modifica il sommario
Sistemi operativi: manuale pratico/Introduzione ai sistemi operativi/File system linux

# File (o archivio)

Un file e' un contenitore di dati in formato elettronico

## Filename

Il nome di un file puo' essere una sequenza di caratteri qualunque (eccetto: / " ' * ; ? [ ] ( ) $\sim$ ! $$\{$$\$$<$$>$# @ &$|$) 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

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

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

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

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

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

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)

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

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

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

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

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)

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

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

## Allocazione contigua

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

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

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

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)

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 $2$ accessi alla memoria

## Allocazione indicizzata

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

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

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 $12$ puntatori diretti a blocchi dati del file; $3$ puntatori indiretti a blocchi dati del file; con questa tecnica e' possibile memorizzare file di dimensione pari a $2^{60}$$byte$

## Puntatore indiretto

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

## Hard link

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

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)