Poca roba di domenica
[gapil.git] / fileadv.tex
index 1a221087ced04b5df77d9a57f1599a9ea14d3691..7c3734c3da82a21225f1522445187fa28be20b07 100644 (file)
@@ -3278,16 +3278,14 @@ eseguita su un segmento di dimensioni rigorosamente multiple di quelle di una
 pagina, ed in generale queste potranno non corrispondere alle dimensioni
 effettive del file o della sezione che si vuole mappare.
 
-
 \begin{figure}[!htb] 
   \centering
-  \includegraphics[height=6cm]{img/mmap_boundary}
+  \includegraphics[height=6.5cm]{img/mmap_boundary}
   \caption{Schema della mappatura in memoria di una sezione di file di
     dimensioni non corrispondenti al bordo di una pagina.}
   \label{fig:file_mmap_boundary}
 \end{figure}
 
-
 Il caso più comune è quello illustrato in fig.~\ref{fig:file_mmap_boundary},
 in cui la sezione di file non rientra nei confini di una pagina: in tal caso
 verrà il file sarà mappato su un segmento di memoria che si estende fino al
@@ -3653,9 +3651,43 @@ mappatura che gi
   essere utile per il linker dinamico, in particolare quando viene effettuato
   il \textit{prelink} delle applicazioni.}
 
-\itindend{memory~mapping}
+Per i vantaggi illustrati all'inizio del paragrafo l'interfaccia del
+\textit{memory mapped I/O} viene usata da una grande varietà di programmi,
+spesso con esigenze molto diverse fra di loro riguardo le modalità con cui
+verranno eseguiti gli accessi ad un file; è ad esempio molto comune per i
+database effettuare accessi ai dati in maniera pressoché casuale, mentre un
+riproduttore audio o video eseguirà per lo più letture sequenziali.
+
+Per migliorare le prestazioni a seconda di queste modalità di accesso è
+disponibile una apposita funzione, \funcd{madvise},\footnote{tratteremo in
+  sez.~\ref{sec:file_fadvise} le funzioni che consentono di ottimizzare
+  l'accesso ai file con l'interfaccia classica.} che consente di fornire al
+kernel delle indicazioni su dette modalità, così che possano essere adottate
+le opportune strategie di ottimizzazione. Il suo prototipo è:
+\begin{functions}  
+  \headdecl{sys/mman.h} 
+
+  \funcdecl{int madvise(void *start, size\_t length, int advise)}
+  
+  Fornisci indicazioni sull'uso di un \textit{memory mapping}.
+
+  \bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di
+    errore, nel qual caso \var{errno} assumerà uno dei valori:
+    \begin{errlist}
+    \item[\errcode{EAGAIN}] .
+    \item[\errcode{EBADF}] .
+    \item[\errcode{EINVAL}] .
+    \item[\errcode{EIO}] .
+    \item[\errcode{ENOMEM}] .
+    \end{errlist}
+  }
+\end{functions}
+
 
 % TODO documentare \func{madvise}
+\itindend{memory~mapping}
+
 
 \subsection{I/O vettorizzato: \func{readv} e \func{writev}}
 \label{sec:file_multiple_io}