Revisionati gli errori di mmap e risistemate alcune indicizzazioni (ed
[gapil.git] / fileadv.tex
index bd3063a0e2d5d3fd16cf3040265b6a690ed241cf..e5313642070f22b19db1e8308888fe2eaf70ae52 100644 (file)
@@ -3950,8 +3950,8 @@ prototipo è:
 }
 
 {La funzione ritorna il puntatore alla zona di memoria mappata in caso di
 }
 
 {La funzione ritorna il puntatore alla zona di memoria mappata in caso di
-  successo, e \const{MAP\_FAILED} ($-1$) per un errore, nel qual caso
-  \var{errno} assumerà uno dei valori:
+  successo, e \const{MAP\_FAILED} (\texttt{(void *) -1}) per un errore, nel
+  qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
     \item[\errcode{EACCES}] o \param{fd} non si riferisce ad un file regolare,
       o si è usato \const{MAP\_PRIVATE} ma \param{fd} non è aperto in lettura,
   \begin{errlist}
     \item[\errcode{EACCES}] o \param{fd} non si riferisce ad un file regolare,
       o si è usato \const{MAP\_PRIVATE} ma \param{fd} non è aperto in lettura,
@@ -3965,13 +3965,19 @@ prototipo è:
       \const{MAP\_ANONYMOUS}.
     \item[\errcode{EINVAL}] i valori di \param{start}, \param{length} o
       \param{offset} non sono validi (o troppo grandi o non allineati sulla
       \const{MAP\_ANONYMOUS}.
     \item[\errcode{EINVAL}] i valori di \param{start}, \param{length} o
       \param{offset} non sono validi (o troppo grandi o non allineati sulla
-      dimensione delle pagine).
+      dimensione delle pagine), o \param{lengh} è zero (solo dal 2.6.12)
+      o \param{flags} contiene sia \const{MAP\_PRIVATE} che
+      \const{MAP\_SHARED} o nessuno dei due.
     \item[\errcode{ENFILE}] si è superato il limite del sistema sul numero di
       file aperti (vedi sez.~\ref{sec:sys_resource_limit}).
     \item[\errcode{ENODEV}] il filesystem di \param{fd} non supporta il memory
       mapping.
     \item[\errcode{ENOMEM}] non c'è memoria o si è superato il limite sul
       numero di mappature possibili.
     \item[\errcode{ENFILE}] si è superato il limite del sistema sul numero di
       file aperti (vedi sez.~\ref{sec:sys_resource_limit}).
     \item[\errcode{ENODEV}] il filesystem di \param{fd} non supporta il memory
       mapping.
     \item[\errcode{ENOMEM}] non c'è memoria o si è superato il limite sul
       numero di mappature possibili.
+    \item[\errcode{EOVERFLOW}] su architettura a 32 bit con il supporto per i
+      \textit{large file} (che hanno una dimensione a 64 bit) il numero di
+      pagine usato per \param{lenght} aggiunto a quello usato
+      per \param{offset} eccede i 32 bit (\texttt{unsigned long}).
     \item[\errcode{EPERM}] l'argomento \param{prot} ha richiesto
       \const{PROT\_EXEC}, ma il filesystem di \param{fd} è montato con
       l'opzione \texttt{noexec}.
     \item[\errcode{EPERM}] l'argomento \param{prot} ha richiesto
       \const{PROT\_EXEC}, ma il filesystem di \param{fd} è montato con
       l'opzione \texttt{noexec}.
@@ -3981,14 +3987,14 @@ prototipo è:
 }
 \end{funcproto}
 
 }
 \end{funcproto}
 
-
 La funzione richiede di mappare in memoria la sezione del file \param{fd} a
 partire da \param{offset} per \param{length} byte, preferibilmente
 all'indirizzo \param{start}. Il valore \param{start} viene normalmente
 La funzione richiede di mappare in memoria la sezione del file \param{fd} a
 partire da \param{offset} per \param{length} byte, preferibilmente
 all'indirizzo \param{start}. Il valore \param{start} viene normalmente
-considerato come un suggerimento, ma l'uso di un valore diverso da \val{NULL},
-in cui si rimette completamente al kernel la scelta dell'indirizzo, viene
-sconsigliato per ragioni di portabilità. Il valore di \param{offset} deve
-essere un multiplo della dimensione di una pagina di memoria.
+considerato come un suggerimento, ma l'uso di un qualunque valore diverso da
+\val{NULL}, in cui si rimette completamente al kernel la scelta
+dell'indirizzo, viene sconsigliato per ragioni di portabilità. Il valore
+di \param{offset} deve essere un multiplo della dimensione di una pagina di
+memoria.
 
 \begin{table}[htb]
   \centering
 
 \begin{table}[htb]
   \centering
@@ -4063,13 +4069,13 @@ tab.~\ref{tab:file_mmap_flag}.
                              con gli indirizzi crescenti verso il basso.\\
     \const{MAP\_HUGETLB}   & Esegue la mappatura usando le cosiddette
                              ``\textit{huge pages}'' (dal 2.6.32).\\
                              con gli indirizzi crescenti verso il basso.\\
     \const{MAP\_HUGETLB}   & Esegue la mappatura usando le cosiddette
                              ``\textit{huge pages}'' (dal 2.6.32).\\
-    \const{MAP\_LOCKED}    & Se impostato impedisce lo \textit{swapping} delle pagine
-                             mappate (dal 2.5.37).\\
+    \const{MAP\_LOCKED}    & Se impostato impedisce lo \textit{swapping} delle
+                             pagine mappate (dal 2.5.37).\\
     \const{MAP\_NONBLOCK}  & Esegue un \textit{prefaulting} più limitato che
                              non causa I/O (dal 2.5.46).\\
     \const{MAP\_NORESERVE} & Si usa con \const{MAP\_PRIVATE}. Non riserva
     \const{MAP\_NONBLOCK}  & Esegue un \textit{prefaulting} più limitato che
                              non causa I/O (dal 2.5.46).\\
     \const{MAP\_NORESERVE} & Si usa con \const{MAP\_PRIVATE}. Non riserva
-                             delle pagine di \textit{swap} ad uso del meccanismo del
-                             \textit{copy on write} \itindex{copy~on~write}
+                             delle pagine di \textit{swap} ad uso del meccanismo
+                             del \textit{copy on write} \itindex{copy~on~write}
                              per mantenere le modifiche fatte alla regione
                              mappata, in questo caso dopo una scrittura, se
                              non c'è più memoria disponibile, si ha
                              per mantenere le modifiche fatte alla regione
                              mappata, in questo caso dopo una scrittura, se
                              non c'è più memoria disponibile, si ha
@@ -4142,25 +4148,22 @@ effettive del file o della sezione che si vuole mappare.
 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
 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
-bordo della pagina successiva.
-
-In questo caso è possibile accedere a quella zona di memoria che eccede le
-dimensioni specificate da \param{length}, senza ottenere un \signal{SIGSEGV}
-poiché essa è presente nello spazio di indirizzi del processo, anche se non è
-mappata sul file. Il comportamento del sistema è quello di restituire un
-valore nullo per quanto viene letto, e di non riportare su file quanto viene
-scritto.
+bordo della pagina successiva.  In questo caso è possibile accedere a quella
+zona di memoria che eccede le dimensioni specificate da \param{length}, senza
+ottenere un \signal{SIGSEGV} poiché essa è presente nello spazio di indirizzi
+del processo, anche se non è mappata sul file. Il comportamento del sistema è
+quello di restituire un valore nullo per quanto viene letto, e di non
+riportare su file quanto viene scritto.
 
 Un caso più complesso è quello che si viene a creare quando le dimensioni del
 file mappato sono più corte delle dimensioni della mappatura, oppure quando il
 file è stato troncato, dopo che è stato mappato, ad una dimensione inferiore a
 
 Un caso più complesso è quello che si viene a creare quando le dimensioni del
 file mappato sono più corte delle dimensioni della mappatura, oppure quando il
 file è stato troncato, dopo che è stato mappato, ad una dimensione inferiore a
-quella della mappatura in memoria.
-
-In questa situazione, per la sezione di pagina parzialmente coperta dal
-contenuto del file, vale esattamente quanto visto in precedenza; invece per la
-parte che eccede, fino alle dimensioni date da \param{length}, l'accesso non
-sarà più possibile, ma il segnale emesso non sarà \signal{SIGSEGV}, ma
-\signal{SIGBUS}, come illustrato in fig.~\ref{fig:file_mmap_exceed}.
+quella della mappatura in memoria.  In questa situazione, per la sezione di
+pagina parzialmente coperta dal contenuto del file, vale esattamente quanto
+visto in precedenza; invece per la parte che eccede, fino alle dimensioni date
+da \param{length}, l'accesso non sarà più possibile, ma il segnale emesso non
+sarà \signal{SIGSEGV}, ma \signal{SIGBUS}, come illustrato in
+fig.~\ref{fig:file_mmap_exceed}.
 
 Non tutti i file possono venire mappati in memoria, dato che, come illustrato
 in fig.~\ref{fig:file_mmap_layout}, la mappatura introduce una corrispondenza
 
 Non tutti i file possono venire mappati in memoria, dato che, come illustrato
 in fig.~\ref{fig:file_mmap_layout}, la mappatura introduce una corrispondenza