X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=fileintro.tex;h=c03e36032d1b25e5e39a42c322eb9b982a0cf4e2;hb=13d5a5ace5c88b8659e5a96975919b3fb7143d3e;hp=a2735a7dd2e5473902dfe5b9c949deffe8c4de82;hpb=66765a9be9a61085dd00abd92d99a24b23dc844b;p=gapil.git diff --git a/fileintro.tex b/fileintro.tex index a2735a7..c03e360 100644 --- a/fileintro.tex +++ b/fileintro.tex @@ -70,10 +70,7 @@ convenzione, sono inseriti nella directory \texttt{/dev}). \label{sec:fileintr_vfs} Esamineremo adesso come viene implementato l'accesso ai files in Linux. Questa -sezione riporta informazioni sui dettagli di come il kernel gestisce i files, -ed è basata sul documento di Richard Goochs distribuito coi sorgenti del -kernel (nella directory \texttt{linux/Documentation/vfs.txt}). - +sezione riporta informazioni sui dettagli di come il kernel gestisce i files. L'argomento è abbastanza ``esoterico'' e questa sezione può essere saltata ad una prima lettura; è bene però tenere presente che vengono introdotti qui alcuni termini che potranno comparire in seguito, come \textit{inode}, @@ -81,10 +78,26 @@ alcuni termini che potranno comparire in seguito, come \textit{inode}, In Linux il concetto di \textit{everything is a file} è stato implementato attraverso il \textit{virtual filesystem} (da qui in avanti VFS) che è -l'interfaccia astratta che il kernel rende disponibile ai programmi in user -space attraverso la quale vengono manipolati i files; esso provvede anche -un'astrazione delle operazioni di manipolazione sui files che permette la -coesistenza di diversi filesystem all'interno dello stesso albero. +l'interfaccia che il kernel rende disponibile ai programmi in user space +attraverso la quale vengono manipolati i files; esso provvede un livello di +indirezione che permette di collegare le operazioni di manipolazione sui files +alle operazioni di I/O e gestisce l'organizzazione di questi ultimi nei vari +modi in cui diversi filesystem la effettuano, permettendo la coesistenza +di filesystem differenti all'interno dello stesso albero delle directory + +Quando un processo esegue una system call che opera su un file il kernel +chiama sempre una funzione implementata nel VFS; la funzione eseguirà le +manipolazioni sulle strutture generiche e ridirigendo la chiamata alla +opportune routine del filesystem specifico a cui si fa riferimento, saranno +queste a chiamare le funzioni di piu basso livello che eseguono le operazioni +di I/O sul dispositivo fisico, secondo lo schema riportato in \nfig. + +\begin{figure}[htb] + \centering + + \caption{Schema delle operazioni del VFS} + \label{fig:fileintro_VFS_scheme} +\end{figure} La funzione più importante implementata dal VFS è la system call \texttt{open} che permette di aprire un file. Dato un pathname viene eseguita una ricerca @@ -220,7 +233,7 @@ torneremo su questo in maggiori dettagli in seguito in \secref{sec:proc_perms}. Come detto in precedenza esistono vari tipi di oggetti implementati del VFS per i quali è disponibile l'interfaccia astratta da esso provveduta. Un elenco -dei vari tipi di file è il seguente: +dei vari tipi di file definiti nel VFS è il seguente: \begin{table}[htb] \begin{center} @@ -266,7 +279,8 @@ Una seconda differenza codificata in maniera diversa da Windows o MacIntosh, in particolare il fine riga è il carattere \texttt{LF} (o \verb|\n|) al posto del \texttt{CR} (\verb|\r|) del mac e del \texttt{CR LF} di Windows. Questo può causare alcuni -problemi qualora si facciano assunzioni sul terminatore della riga. +problemi qualora nei programmi si facciano assunzioni sul terminatore della +riga. \section{Una panoramica sull'uso dei file}