X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileintro.tex;h=374a87017cb9b7303cee2ab1ac5ea6d56d5307cd;hp=1d2f9368fc94313fc10ff094b45a438f6de8c776;hb=922de35645e21550b70e2e5fe5ced103a0d2e0b4;hpb=4cbeb0e4fa1d31da798c8e68108eb6785586ab34 diff --git a/fileintro.tex b/fileintro.tex index 1d2f936..374a870 100644 --- a/fileintro.tex +++ b/fileintro.tex @@ -172,7 +172,7 @@ dispositivo sottostante effettua le operazioni di I/O.\footnote{in sostanza i 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} & @@ -354,7 +354,7 @@ fig.~\ref{fig:file_VFS_scheme}. 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 @@ -384,7 +384,7 @@ Gli altri due descrittori usati dal VFS sono relativi agli altri due oggetti 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. @@ -401,7 +401,7 @@ viene eseguita una ricerca dentro la \textit{directory entry cache} (in breve 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 @@ -412,11 +412,11 @@ file, contiene anche il riferimento alle funzioni (i \textsl{metodi} del VFS) 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 @@ -424,9 +424,9 @@ l'albero dei file, ovviamente per non riempire tutta la memoria questa vista è 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. @@ -434,7 +434,7 @@ 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 @@ -515,7 +515,7 @@ superblock (ma sulle caratteristiche di \acr{ext2} e derivati torneremo in 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] \centering @@ -547,12 +547,12 @@ particolare è opportuno ricordare sempre che: \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 @@ -565,18 +565,18 @@ particolare è opportuno ricordare sempre che: 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 @@ -597,7 +597,7 @@ anche per le directory; per cui, se a partire dalla situazione mostrata in 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] \centering @@ -657,7 +657,7 @@ le seguenti: 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 @@ -683,7 +683,7 @@ filesystem (superblock e descrittore del filesystem sono quindi ridondati) 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] \centering @@ -694,7 +694,7 @@ fra i dati e la tabella degli \index{inode} inode. 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.