Title: Sistemi Operativi / 2 - Architettura / 07 - File System

Q: FileSystem introduzione
A: È un astrazione dei dispositivi di memorizzazione (e non solo), l'utente vede file e directory
Attributi (dipendono dal filesystem che ne possono aggiugere):
- Nome
- Tipo
- Locazione e dimensione
- Data e ora
Alcuni filesystem riconoscono tipi diversi di file (quando un filesystem si mette a gestire i tipi di file il sistema operativo diventa più complesso).
Il riconoscimento è fatto attravero: estensione, attributo type o magic number

Q: Tipi di file in UNIX
A: File regolari: sequenze di byte
Directory: mantengono la struttura del filesystem (sono delle tabelle che associano il nome all'inode)
File speciali a Blocchi: utilizzati per modellare dispositivi di I/O come dischi
File speciali a caratteri:utilizzati per modellare dispositivi di I/O come terminali o network
Altri file spciali: come le pipe, etc..

Q: metodi d'accesso
A: ## Metodo ad Indice
tiene una tabella che corrisponde chiave posizione, metodo efficente come memoria ma dispendioso come come tempo. (implementativamente vengono gestite delle aree che aggiongono del padding non utilizzato, e aree di overflow quando questo viene utilizzato, quando non c'è più spazio disponabili vengono lanciati dei demoni per riscrivere gli indici)
## Accesso diretto
read pos write pos
## Sequenziale
read e write andando avati con il pointer

Q: Operazioni sui file
A: La Api relativa al file system è basta sulle operazioni open e close.L'astrazione serve per:
- mantenere le strutture dati di accesso al file
- controllare le modalità di accesso e gestire gli accessi concorrenti
- definire un descrittore per le operazioni di accesso ai dati
La struttura delle directory, su unix sono create a DAG.

Q: Organizzazione del disco
A: Un disco può essere partizionato, ospitando filesystem distinti.
MBR: master boot record, è il primo settore del disco è utilizzato:
- utilizzato per fare il boot del sistema
- contiene la partition table
- contiene l'indice della partizione attiva
Superblock: contiene informazioni sul tipo di filesystem e sui parametri e organizzazione
Tabelle G. S. Libero: contiene informazioni sui blocchi liberi
Tabelle G. S. Occupato:
root dir: direcotry radice del filesystem
Esempio: molte volte nei grandi sistemi, dove i log vengono mantenuti in dischi o partizioni diverse, in modo che se si riempiano molto in fretta non corrompono il disco/partizione principale

Q: Tipi di Allocazione
A: ## Allocazione contigua
(usato per esmpio nei filesystem di sola lettura)
i file vengono memorizzati in sequenze contingue di blocchi dischi:
- Vantaggi:l'accesso è efficente
- Svantaggi: problematice per la riallocazione, frammentazione esterna e i file non possno crescere
## Allocazione Concatenata
Ogni file è una lista concatenata di blocchi, il descrittore contiene un link al primo e all'ulitmo
Vantaggi: risolve la frammentazione interna e l'append mode è efficente
Svantaggi:l'accesso diretto è inefficente, il sistema degrata con l'utilizzo
Aumentando i blocchi si riduce il tempo dei seek ma aumenta la frammentazione interna
## Fat
invece di utilizzare parte del blocco dati per contenere il puntatore al blocco successivo si crea una tabella unica con un elemento per blocco (o per cluster)
]
Veniva utilizzata soprattuto perchè la tabella fat si poteva semplicemente caricare in memoria
## Allocazione Indicizzata
l'elenco dei blocchi che compongono un file viene memorizzato in un blocco (o area) indice, per accedere ad un file, si carica in memoria la sua area indice e si utilizzano i puntatori contenuti
Svantaggio: la dimensione del blocco determina l'ampiezza massima del file, e usare blocchi troppo grandi comporta un novtevole spreco di spazio
Concatenazione di blocchi indice: l'ultimo elemento del blocco indice non punta al blocco dati ma al blocco indice successivo
Indice multilivello: si utilizza un blocco indice dei blocchi indice, la prestaizone degrada un maggior numero di accessi
## Allocazione UNIX
Ogni file è associato un i-node ( che contiene gli attributi del file tranne il nome), e  un indice di blocci diretti e indiretti con uno schema misto

Q: Gestione Spazio libero
A: ## Mappa di bit
ad ogni blocco corrisponde un bit di una bitmap
Vantaggi: molto veloce, in alcuni processori cisc c'è addirittura una operazone specifica per cercarli
Svantaggi: consuma molto spazio la memorizzazione del vettore
## Lista Concatenata
I blocchi liberi sono mantenuti in una lista concatenata.
Utilizzata da fat che tiene una lista delle aree libere
Svantaggi: l’allocazione di aree libere contigue è molto difficoltosa, e disolito mina le performance mettendo i blocchi in posti molto distanti
## Dimensione dei cluster

Q: Implementazione delle Directory
A: La directory è un file speciale perchè contiene informazioni sui file contenuti in se stessa.
Scelete implementative:
- Directory Entry ogni directory conteiene nome attributi e informazioni di allocazione (MS-DOS) (non importnante)
- Unix ogni directory è un inode che ha come tutti gli altri file i permessi timestamp etc.. e poi contiene le dir entry (cioè le associazioni tra nomi e inode) dei file che contiene (le dir entry sono storate nei data block)
Lunghezza dei nomi, per utilizzare la lunghezza variabile dei nomi vengono utilizzate le due seguenti implmenetazioni
Viene solitamente utilizzato il metodo a.
Implementazione delle dir (per la ricerca dei nomi -> inode) : si può utilizzare una lista lineare o una tabella hash (con ovviamente i soliti pro e contro)

Q: Link
A: I link possono essere di due tipi:
- hard link: i link puntano allo stesso inode
- simbolic link: sono un inode diverso dal file che punta
gli hard link creano un grafo DAG al posto del tree, infatti non tutti i filesystem li supportano

Q: Tecniche per garantire la coerenza
A: Servono per non compromettere il filesystem dopo che si spegne la macchina.
Ci sono due soluzioni:
## fsck
## filesystem basati su log
Il writing dei log è di solito veloce in quando lo fanno su memoria vicina (ciclic buffer), quindi nonostante le due write di solito è meglio in quanto quelle dei log sono asincrone e fatte in qualsiasi ordine (di solito il migliore).
Si basa molto sull'ipotesi che i computer sono havily-write (e quindi la maggior parte delle read è fatta dalle cache/ memoria primaria)