\end{figure}
Come si può notare dall'estratto di fig.~\ref{fig:kstruct_file}, la struttura
-contiene, oltre ad alcune informazioni usate dall'interfaccia dei file
-descriptor il cui significato emergerà più avanti, il puntatore \struct{f\_op}
-ad una struttura \kstruct{file\_operation}. Questa è l'analoga per i file di
-\kstruct{inode\_operation}, e definisce le operazioni generiche fornite dal
-VFS per i file. Si sono riportate in tab.~\ref{tab:file_file_operations} le
-più significative.
+\kstruct{file} contiene, oltre ad alcune informazioni usate dall'interfaccia
+dei file descriptor il cui significato emergerà più avanti, il puntatore
+\struct{f\_op} ad una struttura \kstruct{file\_operation}. Questa è l'analoga
+per i file di \kstruct{inode\_operation}, e definisce le operazioni generiche
+fornite dal VFS per i file. Si sono riportate in
+tab.~\ref{tab:file_file_operations} le più significative.
\begin{table}[htb]
\centering
\textit{system call} o una qualunque altra operazione sul file il VFS andrà ad
utilizzare la funzione corrispondente attraverso il puntatore
\var{f\_op}. Dato che è cura del VFS quando crea la struttura all'apertura del
-file, assegnare a \var{f\_op} il puntatore alla versione di
+file assegnare a \var{f\_op} il puntatore alla versione di
\kstruct{file\_operation} corretta per quel file, sarà possibile scrivere allo
stesso modo sulla porta seriale come su un normale file di dati, e lavorare
sui file allo stesso modo indipendentemente dal filesystem.
Il VFS realizza la quasi totalità delle operazioni relative ai file grazie
alle funzioni presenti nelle due strutture \kstruct{inode\_operation} e
\kstruct{file\_operation}. Ovviamente non è detto che tutte le operazioni
-possibili siano poi disponibili in tutti i casi, ad esempio una \code{seek}
-non è realizzabile per un dispositivo come la porta seriale o per una fifo,
-mentre sui file del filesystem \texttt{vfat} non sono disponibili i permessi,
-ma resta il fatto che grazie al VFS le \textit{system call} per le operazioni
-sui file restano sempre le stesse nonostante le enormi differenze che possono
-esserci negli oggetti a cui si applicano.
+possibili siano poi disponibili in tutti i casi, ad esempio \code{llseek} non
+sarà presente per un dispositivo come la porta seriale o per una fifo, mentre
+sui file del filesystem \texttt{vfat} non saranno disponibili i permessi, ma
+resta il fatto che grazie al VFS le \textit{system call} per le operazioni sui
+file possono restare sempre le stesse nonostante le enormi differenze che
+possono esserci negli oggetti a cui si applicano.
\itindend{Virtual~File~System}
% * http://thecoffeedesk.com/geocities/rkfs.html
% * http://www.linux.it/~rubini/docs/vfs/vfs.html
+
+
\subsection{Il funzionamento di un filesystem Unix}
\label{sec:file_filesystem}
è la modalità in cui opera normalmente il comando \cmd{mv} attraverso la
funzione \func{rename} (vedi sez.~\ref{sec:file_remove}). Questa operazione
non modifica minimamente neanche l'\textit{inode} del file, dato che non si
- opera su questo ma sulla directory che lo contiene.
+ opera sul file ma sulla directory che lo contiene.
-\item Gli \textit{inode} dei file, che contengono i \textsl{metadati} ed i
+\item Gli \textit{inode} dei file, che contengono i \textsl{metadati}, ed i
blocchi di spazio disco, che contengono i dati, sono risorse indipendenti ed
in genere vengono gestite come tali anche dai diversi filesystem; è pertanto
possibile esaurire sia lo spazio disco (il caso più comune) che lo spazio
per gli \textit{inode}. Nel primo caso non sarà possibile allocare ulteriore
spazio, ma si potranno creare file (vuoti), nel secondo non si potranno
creare nuovi file, ma si potranno estendere quelli che ci
- sono.\footnote{questo comportamento non è generale, alcuni filesystem evoluti
- possono evitare il problema dell'esaurimento degli \textit{inode}
+ sono.\footnote{questo comportamento non è generale, alcuni filesystem
+ evoluti possono evitare il problema dell'esaurimento degli \textit{inode}
riallocando lo spazio disco libero per i blocchi.}
\end{enumerate}
\label{sec:file_ext2}
-Benché non esista il filesystem di Linux, dato che esiste un supporto nativo
-di diversi filesystem che sono in uso da anni, quello che gli avvicina di più
-è la famiglia di filesystem evolutasi a partire dal \textit{second extended
- filesystem}, o \acr{ext2}, che nonostante il nome è stato il primo ad essere
-usato in maniera estensiva. Il filesystem \acr{ext2} ha subito un grande
-sviluppo e diverse evoluzioni, fra cui l'aggiunta del \textit{journaling} con
-\acr{ext3}, probabilmente ancora il filesystem più diffuso, ed una serie di
-ulteriori miglioramento con il successivo \acr{ext4}, che sta iniziando a
-sostituirlo gradualmente. In futuro è previsto che questo debba essere
-sostituito da un filesystem completamente diverso, \acr{btrfs}, che dovrebbe
-diventare il filesystem standard di Linux, ma questo al momento è ancora in
-fase di sviluppo.\footnote{si fa riferimento al momento dell'ultima revisione
- di di questo paragrafo, l'inizio del 2012.}
+Benché non esista ``il'' filesystem di Linux, dato che esiste un supporto
+nativo di diversi filesystem che sono in uso da anni, quello che gli avvicina
+di più è la famiglia di filesystem evolutasi a partire dal \textit{second
+ extended filesystem}, o \acr{ext2}. Il filesystem \acr{ext2} ha subito un
+grande sviluppo e diverse evoluzioni, fra cui l'aggiunta del
+\textit{journaling} con \acr{ext3}, probabilmente ancora il filesystem più
+diffuso, ed una serie di ulteriori miglioramento con il successivo \acr{ext4},
+che sta iniziando a sostituirlo gradualmente. In futuro è previsto che questo
+debba essere sostituito da un filesystem completamente diverso, \acr{btrfs},
+che dovrebbe diventare il filesystem standard di Linux, ma questo al momento è
+ancora in fase di sviluppo.\footnote{si fa riferimento al momento dell'ultima
+ revisione di di questo paragrafo, l'inizio del 2012.}
Il filesystem \acr{ext2} nasce come filesystem nativo per Linux a partire
dalle prime versioni del kernel e supporta tutte le caratteristiche di un
% in caso di crash del sistema)
-\subsection{La gestione dei filesystem}
+\subsection{La gestione dell'uso dei filesystem}
\label{sec:sys_file_config}
Come accennato in sez.~\ref{sec:file_arch_overview} per poter accedere ai file
occorre prima rendere disponibile al sistema il filesystem su cui essi sono
memorizzati; l'operazione di attivazione del filesystem è chiamata
-\textsl{montaggio}, per far questo in Linux si usa la funzione \funcd{mount}
-il cui prototipo è:\footnote{la funzione è una versione specifica di Linux e
- non è portabile.}
+\textsl{montaggio}, per far questo in Linux si usa la funzione \funcd{mount},
+il cui prototipo è:\footnote{la funzione è una versione specifica di Linux che
+ usa la omonima \textit{system call} e non è portabile.}
\begin{funcproto}{
\fhead{sys/mount.h}
indicati con la stringa contenente il loro \itindex{pathname}
\textit{pathname}.
-In generale un filesystem è contenuto su un disco, e come illustrato in
-sez.~\ref{sec:file_vfs_work} l'operazione di montaggio corrisponde a rendere
-visibile il contenuto del suddetto disco, identificato attraverso il file di
-dispositivo ad esso associato, all'interno di una directory dell'albero dei
-file.
-
-Ma la struttura del \textit{Virtual File System} vista in
-sez.~\ref{sec:file_vfs_work} è estremamente flessibile e può essere usata
-anche per oggetti diversi da un disco. Ad esempio usando il \textit{loop
- device} si può montare un file qualunque (come l'immagine di un CD-ROM o di
-un floppy) che contiene un filesystem, inoltre alcuni filesystem, come
-\file{proc} o \file{devfs} sono del tutto virtuali, i loro dati sono generati
-al volo ad ogni lettura, e passati al kernel ad ogni scrittura.
-
-Il tipo di filesystem è specificato dall'argomento \param{filesystemtype}, che
-deve essere una delle stringhe riportate nel file
-\procfile{/proc/filesystems}, che come accennato in
-sez.~\ref{sec:file_vfs_work} contiene l'elenco dei filesystem supportati dal
-kernel. Nel caso si sia indicato uno dei filesystem virtuali, che non è
-associato a nessun file di dispositivo, il contenuto di \param{source} viene
-ignorato.
+Normalmente un filesystem è contenuto su un disco o una partizione, ma come
+illustrato in sez.~\ref{sec:file_vfs_work} la struttura del \textit{Virtual
+ File System} è estremamente flessibile e può essere usata anche per oggetti
+diversi da un disco. Ad esempio usando il \textit{loop device} si può montare
+un file qualunque (come l'immagine di un CD-ROM o di un floppy) che contiene
+l'immagine di un filesystem, inoltre alcuni tipi di filesystem, come
+\texttt{proc} o \texttt{sysfs} sono virtuali e non hanno un supporto che ne
+contenga i dati, che invece sono generati al volo ad ogni lettura, e passati
+indietro al kernel ad ogni scrittura.\footnote{costituiscono quindi un
+ meccanismo di comunicazione, attraverso l'ordinaria interfaccia dei file,
+ con il kernel.}
+
+Il tipo di filesystem che si vuole montare è specificato
+dall'argomento \param{filesystemtype}, che deve essere una delle stringhe
+riportate nel file \procfile{/proc/filesystems} che, come accennato in
+sez.~\ref{sec:file_vfs_work}, contiene l'elenco dei filesystem supportati dal
+kernel. Nel caso si sia indicato un filesystem virtuale, che non è associato a
+nessun file di dispositivo, il contenuto di \param{source} viene ignorato.
L'argomento \param{data} viene usato per passare le impostazioni relative alle
caratteristiche specifiche di ciascun filesystem. Si tratta di una stringa di
-parole chiave (separate da virgole e senza spazi) che indicano le opzioni del
-filesytem che devono essere impostate, in sostanza viene usato il contenuto
-del parametro dell'opzione \texttt{-o} del comando \texttt{mount}. I valori
-utilizzabili dipendono dal tipo di filesystem e ciascuno ha i suoi, pertanto
-si rimanda alla documentazione della pagina di manuale di questo comando.
+parole chiave (separate da virgole e senza spazi) che indicano le cosiddette
+opzioni del filesystem che devono essere impostate, in sostanza viene usato il
+contenuto del parametro dell'opzione \texttt{-o} del comando \texttt{mount}. I
+valori utilizzabili dipendono dal tipo di filesystem e ciascuno ha i suoi,
+pertanto si rimanda alla documentazione della pagina di manuale di questo
+comando.
Dopo l'esecuzione della funzione il contenuto del filesystem viene resto
disponibile nella directory specificata come \itindex{mount~point}
\begin{table}[htb]
\footnotesize
\centering
- \begin{tabular}[c]{|l|r|p{8cm}|}
+ \begin{tabular}[c]{|l|p{8cm}|}
\hline
- \textbf{Parametro} & \textbf{Valore}&\textbf{Significato}\\
+ \textbf{Parametro} & \textbf{Significato}\\
\hline
\hline
- \const{MS\_RDONLY} & 1 & Monta in sola lettura.\\
- \const{MS\_NOSUID} & 2 & Ignora i bit \itindex{suid~bit} \acr{suid} e
- \itindex{sgid~bit} \acr{sgid}.\\
- \const{MS\_NODEV} & 4 & Impedisce l'accesso ai file di dispositivo.\\
- \const{MS\_NOEXEC} & 8 & Impedisce di eseguire programmi.\\
- \const{MS\_SYNCHRONOUS}& 16 & Abilita la scrittura sincrona.\\
- \const{MS\_REMOUNT} & 32 & Rimonta il filesystem cambiando le opzioni.\\
- \const{MS\_MANDLOCK} & 64 & Consente il \textit{mandatory locking}
- \itindex{mandatory~locking} (vedi
- sez.~\ref{sec:file_mand_locking}).\\
- \const{S\_WRITE} & 128 & Scrive normalmente.\\
- \const{S\_APPEND} & 256 & Consente la scrittura solo in
- \itindex{append~mode} \textit{append mode}
- (vedi sez.~\ref{sec:file_sharing}).\\
- \const{S\_IMMUTABLE} & 512 & Impedisce che si possano modificare i file.\\
- \const{MS\_NOATIME} &1024 & Non aggiorna gli \textit{access time} (vedi
- sez.~\ref{sec:file_file_times}).\\
- \const{MS\_NODIRATIME}&2048 & Non aggiorna gli \textit{access time} delle
- directory.\\
- \const{MS\_BIND} &4096 & Monta il filesystem altrove.\\
- \const{MS\_MOVE} &8192 & Sposta atomicamente il punto di montaggio.\\
+ \const{MS\_BIND} & Monta il filesystem altrove.\\
+ \const{MS\_DIRSYNC} & .\\
+ \const{MS\_MANDLOCK} & Consente il \textit{mandatory locking}
+ \itindex{mandatory~locking} (vedi
+ sez.~\ref{sec:file_mand_locking}).\\
+ \const{MS\_MOVE} & Sposta atomicamente il punto di montaggio.\\
+ \const{MS\_NOATIME} & Non aggiorna gli \textit{access time} (vedi
+ sez.~\ref{sec:file_file_times}).\\
+ \const{MS\_NODEV} & Impedisce l'accesso ai file di dispositivo.\\
+ \const{MS\_NODIRATIME} & Non aggiorna gli \textit{access time} delle
+ directory.\\
+ \const{MS\_NOEXEC} & Impedisce di eseguire programmi.\\
+ \const{MS\_NOSUID} & Ignora i bit \itindex{suid~bit} \acr{suid} e
+ \itindex{sgid~bit} \acr{sgid}.\\
+ \const{MS\_RDONLY} & Monta in sola lettura.\\
+ \const{MS\_RELATIME} & .\\
+ \const{MS\_REMOUNT} & Rimonta il filesystem cambiando le opzioni.\\
+ \const{MS\_SILENT} & .\\
+ \const{MS\_STRICTATIME}& .\\
+ \const{MS\_SYNCHRONOUS}& Abilita la scrittura sincrona.\\
+ % \const{S\_WRITE} & Scrive normalmente.\\
+ % \const{S\_APPEND} & Consente la scrittura solo in
+ % \itindex{append~mode} \textit{append mode}
+ % (vedi sez.~\ref{sec:file_sharing}).\\
+ % \const{S\_IMMUTABLE} & Impedisce che si possano modificare i file.\\
\hline
\end{tabular}
\caption{Tabella dei codici dei flag di montaggio di un filesystem.}
\end{table}
% TODO aggiornare con i nuovi flag di man mount
-% gli S_* non esistono più come segnalato da Alessio...
% verificare i readonly mount bind del 2.6.26
La funzione \func{mount} può essere utilizzata anche per effettuare il
% LocalWords: second linked journaled source filesystemtype unsigned device
% LocalWords: mountflags NODEV ENXIO dummy devfs magic MGC RDONLY NOSUID MOVE
% LocalWords: NOEXEC SYNCHRONOUS REMOUNT MANDLOCK NODIRATIME umount MNT statfs
-% LocalWords: fstatfs fstab mntent ino bound orig new setpcap
+% LocalWords: fstatfs fstab mntent ino bound orig new setpcap metadati sysfs
%%% Local Variables:
%%% mode: latex