X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileunix.tex;h=86652f3d57c6b1d09978ac9f680804135420cf01;hp=09e38a8ce394bb51a9cf685401ea102d7bf59bbd;hb=844ed2345d6004d47ec70e8e9b17b3dcd87a1b80;hpb=9750c196d5ff86f50d77499b271ee2a29eda3407 diff --git a/fileunix.tex b/fileunix.tex index 09e38a8..86652f3 100644 --- a/fileunix.tex +++ b/fileunix.tex @@ -32,48 +32,54 @@ ogni ulteriore operazione. Per capire come funziona questo canale di comunicazione occorre spiegare brevemente qual'è architettura con cui il kernel gestisce l'interazione fra -processi e file. Il kernel mantiene sempre un elenco dei processi -attivi nella cosiddetta \textit{process table} ed un elenco dei file aperti -nella \textit{file table}. - -Ciascuna voce della \textit{process table}, che in Linux è costituita da una -struttura \var{task_struct}, che contiene tutte le informazioni relative ad -ogni processo attivo nel sistema; fra queste c'è anche il puntatore ad una -ulteriore struttura \var{files_struct} che contiene le informazioni su tutti i -file che il processo sta usando. - -Ciascuna voce della \textit{file table}, che in Linux è costituita da una -struttura \var{file}, contiene informazioni ogni file aperto nel sistema. - - - -All'interno di ogni processo i file aperti sono identificati da un intero non -negativo, chiamato appunto \textit{file descriptors}; - - - -) che identifica il processo nei confronti del -kernel ogni processo mantiene una sezione (la \var{file_struct}, la cui -struttura è riportata in \nfig) - -ciascun processo porta -nella ha una tabella dei file aperti, in +processi e file. Il kernel mantiene sempre un elenco dei processi attivi +nella cosiddetta \textit{process table} ed un elenco dei file aperti nella +\textit{file table}. La relazione fra queste tabelle è mostrata in \nfig. +\begin{figure}[htb] + \centering + \includegraphics[width=7cm]{img/procfile.eps} + \caption{Schema delle operazioni del VFS} + \label{fig:file_VFS_scheme} +\end{figure} +Ciascuna voce della \textit{process table}, che in Linux è costituita da una +struttura \var{task\_struct}, contiene le informazioni relative ad ogni +processo attivo nel sistema; fra queste c'è anche il puntatore ad una +ulteriore struttura \var{files\_struct} in cui sono contenute le informazioni +relative a ogni file che il processo ha aperto, ed in particolare: +\begin{itemize} +\item i flag relativi ai file descriptor. +\item un puntatore alla struttura \var{file} nella \textit{file table} per + ogni file aperto. +\end{itemize} -Per ciascun file aperto nel sistema il kernel mantiene voce nella tabella dei -file; ciascuna voce di questa tabella contiene: +Ciascuna voce della \textit{file table}, che in Linux è costituita da una +struttura \var{file}, contiene le informazioni relative ad ogni file aperto +nel sistema, fra queste ci sono: \begin{itemize} \item lo stato del file (lettura, scrittura, append, etc.). \item il valore della posizione corrente (l'\textit{offset}). -\item un puntatore al +\item un puntatore all'inode\footnote{nel kernel 2.4.x si è in realtà passati + ad un puntatore ad una struttura \var{dentry} che punta a sua volta + all'inode passando per la nuova struttura del VFS} del file (da cui si + accede all'inode). +\item un puntatore alla tabella delle operazioni definite sul file (si ricordi + quanto detto a proposito di \tabref{tab:file_file_operations} nella + spiegazione del VFS di Linux). \end{itemize} +All'interno di ogni processo i file aperti sono identificati da un intero non +negativo, chiamato appunto \textit{file descriptors}; + + + + \subsection{La condivisione dei files} \label{sec:file_sharing} @@ -88,22 +94,22 @@ funzioni fondamentali \func{open}, \func{read}, \func{write}, \func{lseek} e \func{close}; -\subsection{La funzione \texttt{open}} +\subsection{La funzione \func{open}} \label{sec:file_open} -\subsection{La funzione \texttt{creat}} +\subsection{La funzione \func{creat}} \label{sec:file_creat} -\subsection{La funzione \texttt{close}} +\subsection{La funzione \func{close}} \label{sec:file_close} -\subsection{La funzione \texttt{lseek}} +\subsection{La funzione \func{lseek}} \label{sec:file_lseek} -\subsection{La funzione \texttt{read}} +\subsection{La funzione \func{read}} \label{sec:file_read} -\subsection{La funzione \texttt{write}} +\subsection{La funzione \func{write}} \label{sec:file_write} \subsection{Operazioni atomiche coi file} @@ -112,15 +118,16 @@ funzioni fondamentali \func{open}, \func{read}, \func{write}, \section{Funzioni avanzate} \label{sec:file_adv_func} -\subsection{La funzioni \texttt{dup} e \texttt{dup2}} +\subsection{La funzioni \func{dup} e \func{dup2}} \label{sec:file_dup} -\subsection{La funzione \texttt{fcntl}} +\subsection{La funzione \func{fcntl}} \label{sec:file_fcntl} -\subsection{La funzione \texttt{ioctl}} +\subsection{La funzione \func{ioctl}} \label{sec:file_ioctl} +