Alcune correzioni ai font dei link, e una trattazione esplicita
[gapil.git] / fileadv.tex
index 346fc454499a592999383f1c03ef8be8f7ab8f60..1ba5b9990692a8489fe8deefd1f9c54124dd4964 100644 (file)
@@ -2910,7 +2910,7 @@ che anzi in certi casi si potevano avere anche dei peggioramenti.  Questo ha
 portato, per i kernel della serie 2.6,\footnote{per alcune motivazioni di
   questa scelta si può fare riferimento a quanto illustrato da Linus Torvalds
   in \href{http://www.cs.helsinki.fi/linux/linux-kernel/2001-03/0200.html}
-  {\texttt{http://www.cs.helsinki.fi/linux/linux-kernel/2001-03/0200.html}}.}
+  {\textsf{http://www.cs.helsinki.fi/linux/linux-kernel/2001-03/0200.html}}.}
 alla decisione di consentire l'uso della funzione soltanto quando il file da
 cui si legge supporta le operazioni di \textit{memory mapping} (vale a dire
 non è un socket) e quello su cui si scrive è un socket; in tutti gli altri
@@ -2937,13 +2937,15 @@ semplicemente un ``\textsl{dimezzamento}'' di \func{sendfile}.\footnote{nel
   sarebbe altro che la lettura degli stessi su un buffer seguita dalla
   relativa scrittura, cosa che in questo caso si dovrebbe eseguire con due
   chiamate a \func{splice}.} In realtà le due system call sono profondamente
-diverse nel loro meccanismo di funzionamento; \func{sendfile} infatti, come
-accennato, non necessita affatto di avere a disposizione un buffer interno,
-perché esegue un trasferimento diretto di dati; questo la rende in generale
-molto più efficiente, ma anche limitata nelle sue applicazioni, dato che
-questo tipo di trasferimento è possibile solo in casi specifici.\footnote{e
-  nel caso di Linux questi sono anche solo quelli in cui essa può essere
-  effettivamente utilizzata.}
+diverse nel loro meccanismo di funzionamento;\footnote{questo fino al kernel
+  2.6.23, dove \func{sendfile} è stata reimplementata in termini di
+  \func{splice}, pur mantenendo disponibile la stessa interfaccia verso l'user
+  space.} \func{sendfile} infatti, come accennato, non necessita di avere a
+disposizione un buffer interno, perché esegue un trasferimento diretto di
+dati; questo la rende in generale più efficiente, ma anche limitata nelle sue
+applicazioni, dato che questo tipo di trasferimento è possibile solo in casi
+specifici.\footnote{e nel caso di Linux questi sono anche solo quelli in cui
+  essa può essere effettivamente utilizzata.}
 
 Il concetto che sta dietro a \func{splice} invece è diverso,\footnote{in
   realtà la proposta originale di Larry Mc Voy non differisce poi tanto negli
@@ -2951,7 +2953,7 @@ Il concetto che sta dietro a \func{splice} invece 
   stata la reinterpretazione che ne è stata fatta nell'implementazione su
   Linux realizzata da Jens Anxboe, concetti che sono esposti sinteticamente
   dallo stesso Linus Torvalds in \href{http://kerneltrap.org/node/6505}
-  {\texttt{http://kerneltrap.org/node/6505}}.} si tratta semplicemente di una
+  {\textsf{http://kerneltrap.org/node/6505}}.} si tratta semplicemente di una
 funzione che consente di fare in maniera del tutto generica delle operazioni
 di trasferimento di dati fra un file e un buffer gestito interamente in kernel
 space. In questo caso il cuore della funzione (e delle affini \func{vmsplice}
@@ -3335,7 +3337,7 @@ detto che i dati vengono effettivamente spostati o copiati, il kernel infatti
 realizza le \textit{pipe} come un insieme di puntatori\footnote{per essere
   precisi si tratta di un semplice buffer circolare, un buon articolo sul tema
   si trova su \href{http://lwn.net/Articles/118750/}
-  {\texttt{http://lwn.net/Articles/118750/}}.}  alle pagine di memoria interna
+  {\textsf{http://lwn.net/Articles/118750/}}.}  alle pagine di memoria interna
 che contengono i dati, per questo una volta che i dati sono presenti nella
 memoria del kernel tutto quello che viene fatto è creare i suddetti puntatori
 ed aumentare il numero di referenze; questo significa che anche con \func{tee}
@@ -3389,7 +3391,7 @@ all'accesso al disco; il suo prototipo 
 
 La funzione richiede che venga letto in anticipo il contenuto del file
 \param{fd} a partire dalla posizione \param{offset} e per un ammontare di
-\param{count} bytes, in modo da portarlo in cache.  La funzione usa la
+\param{count} byte, in modo da portarlo in cache.  La funzione usa la
 \index{memoria~virtuale} memoria virtuale ed il meccanismo della
 \index{paginazione} paginazione per cui la lettura viene eseguita in blocchi
 corrispondenti alle dimensioni delle pagine di memoria, ed i valori di
@@ -3444,13 +3446,13 @@ definisce la macro \macro{\_XOPEN\_SOURCE} ad almeno 600, 
 La funzione dichiara al kernel le modalità con cui intende accedere alla
 regione del file indicato da \param{fd} che inizia alla posizione
 \param{offset} e si estende per \param{len} byte. Se per \param{len} si usa un
-valora nullo la regione coperta sarà da \param{offset} alla fine del
+valore nullo la regione coperta sarà da \param{offset} alla fine del
 file.\footnote{questo è vero solo per le versioni più recenti, fino al kernel
   2.6.6 il valore nullo veniva interpretato letteralmente.} Le modalità sono
 indicate dall'argomento \param{advice} che è una maschera binaria dei valori
 illustrati in tab.~\ref{tab:posix_fadvise_flag}. Si tenga presente comunque
 che la funzione dà soltanto un avvertimento, non esiste nessun vincolo per il
-kernel, che utilzza semplicemente l'informazione.
+kernel, che utilizza semplicemente l'informazione.
 
 \begin{table}[htb]
   \centering
@@ -3465,11 +3467,11 @@ kernel, che utilzza semplicemente l'informazione.
                                    comportamento sarà identico a quello che si
                                    avrebbe senza nessun avviso.\\ 
     \const{POSIX\_FADV\_SEQUENTIAL}& L'applicazione si aspetta di accedere di
-                                   accedere ai dati spercificati in maniera
+                                   accedere ai dati specificati in maniera
                                    sequenziale, a partire dalle posizioni più
                                    basse.\\ 
     \const{POSIX\_FADV\_RANDOM}  & I dati saranno letti in maniera
-                                   completamete causale.\\
+                                   completamente causale.\\
     \const{POSIX\_FADV\_NOREUSE} & I dati saranno acceduti una sola volta.\\ 
     \const{POSIX\_FADV\_WILLNEED}& I dati saranno acceduti a breve.\\ 
     \const{POSIX\_FADV\_DONTNEED}& I dati non saranno acceduti a breve.\\ 
@@ -3484,7 +3486,7 @@ kernel, che utilzza semplicemente l'informazione.
 Anche \func{posix\_fadvise} si appoggia al sistema della memoria virtuale ed
 al meccanismo standard del \textit{readahead} utilizzato dal kernel; in
 particolare con \const{POSIX\_FADV\_SEQUENTIAL} si raddoppia la dimensione
-dell'ammontare di dati letti preventivamente rispetto al default, apettandosi
+dell'ammontare di dati letti preventivamente rispetto al default, aspettandosi
 appunto una lettura sequenziale che li utilizzerà, mentre con
 \const{POSIX\_FADV\_RANDOM} si disabilita del tutto il suddetto meccanismo,
 dato che con un accesso del tutto casuale è inutile mettersi a leggere i dati
@@ -3532,16 +3534,15 @@ macro \macro{\_XOPEN\_SOURCE} ad almeno 600, 
       valido o non è aperto in scrittura.
     \item[\errcode{EINVAL}] o \param{offset} o \param{len} sono minori di
       zero.
-    \item[\errcode{EFBIG}] il valore di \param{offset} + \param{len} eccede la
-      dimensione massima di un file.
+    \item[\errcode{EFBIG}] il valore di (\param{offset} + \param{len}) eccede
+      la dimensione massima consentita per un file.
     \item[\errcode{ENODEV}] l'argomento \param{fd} non fa riferimento ad un
       file regolare.
     \item[\errcode{ENOSPC}] non c'è sufficiente spazio disco per eseguire
       l'operazione. 
     \item[\errcode{ESPIPE}] l'argomento \param{fd} è una pipe.
-
-  }
   \end{errlist}
+  }
 \end{functions}
 
 La funzione si assicura che venga allocato sufficiente spazio disco perché sia
@@ -3549,7 +3550,7 @@ possibile scrivere sul file indicato dall'argomento \param{fd} nella regione
 che inizia dalla posizione \param{offset} e si estende per \param{len} byte;
 se questa si estende oltre la fine del file le dimensioni di quest'ultimo
 saranno incrementate di conseguenza. Dopo aver eseguito con successo la
-funzione è garantito che una scrittura nella regione inidicata non fallirà per
+funzione è garantito che una scrittura nella regione indicata non fallirà per
 mancanza di spazio disco.
 
 
@@ -3560,7 +3561,7 @@ mancanza di spazio disco.
 
 % TODO documentare \func{fallocate}, introdotta con il 2.6.23
 % vedi http://lwn.net/Articles/226710/ e http://lwn.net/Articles/240571/
-
+% http://kernelnewbies.org/Linux_2_6_23
 
 %\subsection{L'utilizzo delle porte di I/O}
 %\label{sec:file_io_port}
@@ -4468,10 +4469,11 @@ possibilit
 % LocalWords:  NUL sizeof casting printevent nread limits sysconf SC wrapper Di
 % LocalWords:  splice result argument DMA controller zerocopy Linus Larry Voy
 % LocalWords:  Jens Anxboe vmsplice seek ESPIPE GIFT TCP CORK MSG splicecp nr
-% LocalWords:  nwrite segs patch readahead
+% LocalWords:  nwrite segs patch readahead posix fadvise TC advice FADV NORMAL
 
 
 %%% Local Variables: 
 %%% mode: latex
 %%% TeX-master: "gapil"
 %%% End: 
+% LocalWords:  SEQUENTIAL NOREUSE WILLNEED DONTNEED streaming fallocate EFBIG