Un file che contiene dei dati (l'accezione normale di file).\\
\textit{directory} & \textsl{cartella o direttorio} &
Un file che contiene una lista di nomi associati a degli
- \index{inode} \textit{inode} (vedi sez.~\ref{sec:file_vfs}).\\
+ \itindex{inode} \textit{inode} (vedi sez.~\ref{sec:file_vfs}).\\
\textit{symbolic link} & \textsl{collegamento simbolico} &
Un file che contiene un riferimento ad un altro file/directory.\\
\textit{char device} & \textsl{dispositivo a caratteri} &
anche su tutti i sistemi non Unix. Gli \index{file!stream} \textit{stream}
sono oggetti complessi e sono rappresentati da puntatori ad un opportuna
struttura definita dalle librerie del C; si accede ad essi sempre in maniera
-indiretta utilizzando il tipo \ctyp{FILE *}. L'interfaccia è definita
+indiretta utilizzando il tipo \type{FILE *}. L'interfaccia è definita
nell'header \file{stdio.h}.
Entrambe le interfacce possono essere usate per l'accesso ai file come agli
di I/O sul dispositivo fisico, secondo lo schema riportato in
fig.~\ref{fig:file_VFS_scheme}.
-\begin{figure}[htb]
+\begin{figure}[!htb]
\centering
\includegraphics[width=7cm]{img/vfs}
\caption{Schema delle operazioni del VFS.}
Il VFS definisce un insieme di funzioni che tutti i filesystem devono
implementare. L'interfaccia comprende tutte le funzioni che riguardano i file;
le operazioni sono suddivise su tre tipi di oggetti: \textit{filesystem},
-\index{inode} \textit{inode} e \textit{file}, corrispondenti a tre apposite
+\itindex{inode} \textit{inode} e \textit{file}, corrispondenti a tre apposite
strutture definite nel kernel.
Il VFS usa una tabella mantenuta dal kernel che contiene il nome di ciascun
su cui è strutturata l'interfaccia. Ciascuno di essi contiene le informazioni
relative al file in uso, insieme ai puntatori alle funzioni dello specifico
filesystem usate per l'accesso dal VFS; in particolare il descrittore
-\index{inode} dell'inode contiene i puntatori alle funzioni che possono essere
+\itindex{inode} dell'inode contiene i puntatori alle funzioni che possono essere
usate su qualunque file (come \func{link}, \func{stat} e \func{open}), mentre
il descrittore di file contiene i puntatori alle funzioni che vengono usate
sui file già aperti.
efficiente il \textit{pathname} a una specifica \textit{dentry}.
Una singola \textit{dentry} contiene in genere il puntatore ad un
-\index{inode} \textit{inode}; quest'ultimo è la struttura base che sta sul
+\itindex{inode} \textit{inode}; quest'ultimo è la struttura base che sta sul
disco e che identifica un singolo oggetto del VFS sia esso un file ordinario,
una directory, un link simbolico, una FIFO, un file di
\index{file!di~dispositivo} dispositivo, o una qualsiasi altra cosa che possa
da usare per poterlo manipolare.
Le \textit{dentry} ``vivono'' in memoria e non vengono mai salvate su disco,
-vengono usate per motivi di velocità, gli \index{inode} \textit{inode} invece
+vengono usate per motivi di velocità, gli \itindex{inode} \textit{inode} invece
stanno su disco e vengono copiati in memoria quando serve, ed ogni cambiamento
viene copiato all'indietro sul disco (aggiornando i cosiddetti
-\textsl{metadati} del file), gli \index{inode} inode che stanno in memoria
-sono \index{inode} inode del VFS ed è ad essi che puntano le singole
+\textsl{metadati} del file), gli \itindex{inode} inode che stanno in memoria
+sono \itindex{inode} inode del VFS ed è ad essi che puntano le singole
\textit{dentry}.
La \textit{dcache} costituisce perciò una sorta di vista completa di tutto
parziale (la \textit{dcache} cioè contiene solo le \textit{dentry} per i file
per i quali è stato richiesto l'accesso), quando si vuole risolvere un nuovo
\itindex{pathname} \textit{pathname} il VFS deve creare una nuova
-\textit{dentry} e caricare \index{inode} l'inode corrispondente in memoria.
+\textit{dentry} e caricare \itindex{inode} l'inode corrispondente in memoria.
-Questo procedimento viene eseguito dal metodo \code{lookup()} \index{inode}
+Questo procedimento viene eseguito dal metodo \code{lookup()} \itindex{inode}
dell'inode della directory che contiene il file; questo viene installato nelle
relative strutture in memoria quando si effettua il montaggio lo specifico
filesystem su cui l'inode va a vivere.
Una volta che il VFS ha a disposizione la \textit{dentry} (ed il relativo
\textit{inode}) diventa possibile accedere alle varie operazioni sul file come
la \func{open} per aprire il file o la \func{stat} per leggere i dati
-\index{inode} dell'inode e passarli in user space.
+\itindex{inode} dell'inode e passarli in user space.
L'apertura di un file richiede comunque un'altra operazione, l'allocazione di
una struttura di tipo \struct{file} in cui viene inserito un puntatore alla
sez.~\ref{sec:file_ext2}). È comunque caratteristica comune di tutti i
filesystem per Unix, indipendentemente da come poi viene strutturata nei
dettagli questa informazione, prevedere una divisione fra la lista degli
-\index{inode} inode e lo spazio a disposizione per i dati e le directory.
+\itindex{inode} inode e lo spazio a disposizione per i dati e le directory.
-\begin{figure}[htb]
+\begin{figure}[!htb]
\centering
\includegraphics[width=14cm]{img/disk_struct}
\caption{Organizzazione dello spazio su un disco in partizioni e
esemplificare la situazione con uno schema come quello esposto in
fig.~\ref{fig:file_filesys_detail}.
-\begin{figure}[htb]
+\begin{figure}[!htb]
\centering
\includegraphics[width=14cm]{img/filesys_struct}
\caption{Strutturazione dei dati all'interno di un filesystem.}
\begin{enumerate}
-\item L'\textit{inode} \index{inode} contiene tutte le informazioni (i
+\item L'\textit{inode} \itindex{inode} contiene tutte le informazioni (i
cosiddetti \textsl{metadati}) riguardanti il file: il tipo di file, i
permessi di accesso, le dimensioni, i puntatori ai blocchi fisici che
contengono i dati e così via. Le informazioni che la funzione \func{stat}
fornisce provengono dall'\textit{inode}; dentro una directory si troverà
- solo il nome del file e il numero \index{inode} dell'\textit{inode} ad esso
+ solo il nome del file e il numero \itindex{inode} dell'\textit{inode} ad esso
associato, cioè quella che da qui in poi chiameremo una \textsl{voce} (come
traduzione dell'inglese \textit{directory entry}, che non useremo anche per
evitare confusione con le \textit{dentry} del kernel di cui si parlava in
i dati del file vengono effettivamente rimossi dal disco. Per questo la
funzione per cancellare un file si chiama \func{unlink}, ed in realtà non
cancella affatto i dati del file, ma si limita ad eliminare la relativa voce
- da una directory e decrementare il numero di riferimenti \index{inode}
+ da una directory e decrementare il numero di riferimenti \itindex{inode}
nell'\textit{inode}.
\item Il numero di \textit{inode} nella voce si riferisce ad un \textit{inode}
nello stesso filesystem e non ci può essere una directory che contiene
- riferimenti ad \index{inode} \textit{inode} relativi ad altri filesystem.
+ riferimenti ad \itindex{inode} \textit{inode} relativi ad altri filesystem.
Questo limita l'uso del comando \cmd{ln} (che crea una nuova voce per un
file esistente con la funzione \func{link}) al filesystem corrente.
\item Quando si cambia nome ad un file senza cambiare filesystem, il contenuto
del file non viene spostato fisicamente, viene semplicemente creata una
- nuova voce per \index{inode} l'\textit{inode} in questione e rimossa la
+ nuova voce per \itindex{inode} l'\textit{inode} in questione e rimossa la
vecchia (questa è la modalità in cui opera normalmente il comando \cmd{mv}
attraverso la funzione \func{rename}). Questa operazione non modifica
minimamente neanche l'\textit{inode} del file dato che non si opera su
fig.~\ref{fig:file_filesys_detail} creiamo una nuova directory \file{img}
nella directory \file{gapil}, avremo una situazione come quella in
fig.~\ref{fig:file_dirs_link}, dove per chiarezza abbiamo aggiunto dei numeri
-di \index{inode} inode.
+di \itindex{inode} inode.
-\begin{figure}[htb]
+\begin{figure}[!htb]
\centering
\includegraphics[width=14cm]{img/dir_links}
\caption{Organizzazione dei \textit{link} per le directory.}
in fase di creazione, a seconda delle sue esigenze (blocchi più grandi
permettono un accesso più veloce, ma sprecano più spazio disco).
\item il filesystem implementa link simbolici veloci, in cui il nome del file
- non è salvato su un blocco, ma tenuto all'interno \index{inode} dell'inode
+ non è salvato su un blocco, ma tenuto all'interno \itindex{inode} dell'inode
(evitando letture multiple e spreco di spazio), non tutti i nomi però
possono essere gestiti così per limiti di spazio (il limite è 60 caratteri).
\item vengono supportati i file immutabili (che possono solo essere letti) per
una maggiore affidabilità e possibilità di recupero in caso di corruzione del
superblock principale. L'utilizzo di raggruppamenti di blocchi ha inoltre
degli effetti positivi nelle prestazioni dato che viene ridotta la distanza
-fra i dati e la tabella degli \index{inode} inode.
+fra i dati e la tabella degli \itindex{inode} inode.
-\begin{figure}[htb]
+\begin{figure}[!htb]
\centering
\includegraphics[width=9cm]{img/dir_struct}
\caption{Struttura delle directory nel \textit{second extented filesystem}.}
Le directory sono implementate come una \itindex{linked~list} \textit{linked
list} con voci di dimensione variabile. Ciascuna voce della lista contiene
-il numero di inode \index{inode}, la sua lunghezza, il nome del file e la sua
+il numero di inode \itindex{inode}, la sua lunghezza, il nome del file e la sua
lunghezza, secondo lo schema in fig.~\ref{fig:file_ext2_dirs}; in questo modo
è possibile implementare nomi per i file anche molto lunghi (fino a 1024
caratteri) senza sprecare spazio disco.